Files
classhelper-island-refactor…/analysis/features.md
T
ClassIsland Prompt Kit 22c1784bab feat: ClassIsland / ClassHelper 灵动岛提示词套件
- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构)
- ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本)
- 投喂指南、分卷、逐节文件
- 调研记录、一致性基线、生成与质检脚本
2026-11-12 21:59:58 +08:00

28 KiB
Raw Blame History

features(Part 06/07/08)分析备注

负责人:features。产出:parts/06-schedule-profile.md、parts/07-notifications.md、parts/08-automation.md。 本文件记录:已读源文件清单、关键枚举/默认值表(供 Lead 汇总时交叉校验)、未决问题与缺口。全部为静态阅读结论,未构建、未运行、未截图。

1. 已读文件清单(相对 D:\clword)

1.1 档案 / 课表 / 时间表(Part 06)

文件 说明 / 关键行
repos/ClassIsland/ClassIsland.Shared/Models/Profile/Profile.cs 档案根模型(484 行):字段默认值 17-32,内置课表群 44-59,解散/删除群 104-137,科目编辑集合 139-217,临时层/临时课表/临时群 313-449,OrderedSchedules 468-477
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassPlan.cs 课表(608 行):默认值 15-27,ValidTimeLayoutItems 双向裁剪 54-98,RefreshClassesList 451-491,RefreshIsChangedClass 496-513,RemoveTimePointSafe 515-522
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeLayout.cs 时间表(298 行):默认名 17,增删时间点 188-235,Layouts 254-267
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeLayoutItem.cs 时间点(256 行):Start/End 62-93,TimeType 文档 119-138,BreakName 175-191,ActionSet 196-205,CompareTo 212-241
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassInfo.cs 课程项(122 行)
repos/ClassIsland/ClassIsland.Shared/Models/Profile/Subject.cs 科目(141 行):自动 Initial 19-30,三个内置科目 79-101,复姓表 14、GetFirstName 107-140
repos/ClassIsland/ClassIsland.Shared/Models/Profile/TimeRule.cs 触发规则(70 行):默认 WeekDay=0 / Div=0 / DivTotal=2
repos/ClassIsland/ClassIsland.Shared/Models/Profile/ClassPlanGroup.cs 课表群(50 行):两个内置 GUID
repos/ClassIsland/ClassIsland.Shared/Models/Profile/OrderedSchedule.cs 预定课表(25 行)
repos/ClassIsland/ClassIsland.Shared/Enums/TempClassPlanGroupType.cs Override / Inherit
repos/ClassIsland/ClassIsland.Shared/Enums/TimeState.cs None/OnClass/PrepareOnClass/Breaking/AfterSchool
repos/ClassIsland/ClassIsland/Services/LessonsService.cs 课程服务(646 行):50ms 计时器 39-45,课表选择 143-201,tick 主逻辑 373-527,LoadCurrentClassPlan 549-580,CheckClassPlan 582-607,周次计算 619-635,GetClassIndex 531-541
repos/ClassIsland/ClassIsland/Services/ProfileService.cs 档案服务(438 行):路径 34-53,集控合并 78-137,加载/保存 139-227,临时层 235-328,转正 335-360,临时群 362-415,信任 417-422
repos/ClassIsland/ClassIsland/Services/ProfileAnalyzeService.cs 对象图分析(212 行)
repos/ClassIsland/ClassIsland/Views/ProfileSettingsWindow.axaml 档案编辑窗(2004 行):窗口参数 23-30,课表信息面板 53-140,时间表面板 202-232,临时课表/临时层 235-338,课表群 342-413,换课 Flyout 415-446,临时层 Flyout 448+
repos/ClassIsland/ClassIsland/Views/ProfileSettingsWindow.axaml.cs 交互逻辑(1671 行):Open 与页索引 186-262,保存于关闭 264-274,新增时间点 983-1099,调课 1414-1510,导入导出 1565-1668
repos/ClassIsland/ClassIsland/Views/ClassPlanDetailsWindow.axaml 课表详细信息窗(199 行)
repos/ClassIsland/ClassIsland/Controls/TimeRuleEditControl.axaml 单双周/星期 Chip UI(54 行)
repos/ClassIsland/ClassIsland/Controls/WeekOffsetSettingsControl.axaml.cs 轮换偏移正/反算(132 行)
repos/ClassIsland/ClassIsland.Shared/Extensions/CsesExtensions.cs CSES 双向转换(167 行)
repos/ClassIsland/ClassIsland/Controls/ProfileTransferProviders/CsesImportProvider.cs CSES 导入(72 行)
repos/ClassIsland/ClassIsland/Controls/ProfileTransferProviders/ClassIsland1ImportProvider.cs 1.x 导入(58 行)
repos/ClassIsland/ClassIsland/Views/ExcelImportWindow.xaml.cs 整文件 #if false(1 行处),WPF 遗留(824 行)
repos/ClassIsland/ClassIsland/Views/ExcelExportWindow.xaml.cs 整文件 #if false(1-539 行)
repos/ClassIsland/ClassIsland/App.Services.xaml.cs 注册表:窗口 109/145/148/198/204,提醒提供方 198-202,触发器 240-251,规则 253-267,行动 269-276,导入导出 292-296

1.2 提醒(Part 07)

文件 说明 / 关键行
repos/ClassIsland/ClassIsland/Services/NotificationHostService.cs 提醒主机(542 行):优先队列 41,提供方注册 79-114,Setup 128-155,Show 157-176,入队 178-191,链式 205-254,渠道注册 273-284,取消全部 322-335,推送/弹出 337-419,消费者注册 436-470,重新入队 488-522
repos/ClassIsland/ClassIsland/Services/NotificationWorkerService.cs 播放会话(250 行):设置三层覆盖 109-124,计时 82-107,语音/音效 178-208,状态机 211-234
repos/ClassIsland/ClassIsland.Core/Models/Notification/NotificationRequest.cs v2 请求(200 行)
repos/ClassIsland/ClassIsland.Core/Models/Notification/NotificationContent.cs 内容与三个模板工厂(217 行)
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationPriority.cs 比较器(63 行,含 IsPriorityOverride 反常行为)
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationSettings.cs 提醒设置默认值(116 行)
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationProviderRegisterInfo.cs 提供方注册信息(57 行)
repos/ClassIsland/ClassIsland.Shared/Models/Notification/NotificationRequest.cs 旧版([Obsolete],249 行)
repos/ClassIsland/ClassIsland.Core/Enums/Notification/NotificationState.cs 播放状态(32 行)
repos/ClassIsland/ClassIsland.Shared/Enums/NotificationModes.cs Disabled/EnabledForce/Default
repos/ClassIsland/ClassIsland.Core/Abstractions/INotificationConsumer.cs 消费者契约
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/NotificationProviders/NotificationProviderBase.cs 提供方基类(198 行)
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/NotificationProviders/NotificationChannel.cs 渠道(104 行)
repos/ClassIsland/ClassIsland.Shared/Interfaces/INotificationProvider.cs 默认音效 Uri(37 行)
repos/ClassIsland/ClassIsland.Core/Attributes/NotificationProviderInfo.cs / NotificationChannelInfo.cs 特性定义
repos/ClassIsland/ClassIsland/Services/NotificationProviders/ClassNotificationProvider.cs 上下课提醒(325 行)
.../AfterSchoolNotificationProvider.cs 放学提醒(61 行)
.../WeatherNotificationProvider.cs 天气提醒(173 行)
.../ManagementNotificationProvider.cs 集控提醒(81 行)
.../ActionNotificationProvider.cs 行动提醒(17 行,仅作为发送源)
repos/ClassIsland/ClassIsland/Models/NotificationProviderSettings/ClassNotificationSettings.cs 上下课设置默认值(199 行)
.../WeatherNotificationProviderSettings.cs 天气设置默认值(70 行)
.../AfterSchoolNotificationProviderSettings.cs 放学设置默认值(33 行)
repos/ClassIsland/ClassIsland.Controls/NotificationProviders/*.axaml 气泡内容布局:ClassNotificationProviderControl.axaml(104 行)、AfterSchoolNotificationProvider.axaml(30 行)、WeatherNotificationProviderControl.axaml(47 行)
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.cs 消费者与播放流程(815 行):ReceiveNotifications 639-656,模板键解析 658-665,中心点 667-680,ProcessNotification 682-811,AcceptsNotificationRequests 814
repos/ClassIsland/ClassIsland/Controls/MainWindowLine.axaml 行样式:IslandContainerHeight=40(16 行),进度绑定 77
repos/ClassIsland/ClassIsland/XamlThemes/FluentTheme/Styles.axaml 气泡模板与动画(120-197、275-449);SlantedMaskControl 参数 175-180
repos/ClassIsland/ClassIsland/XamlThemes/ClassicTheme/Styles.axaml 经典主题同类样式(136-330)
repos/ClassIsland/ClassIsland/Controls/SlantedMaskControl.cs 斜切遮罩(346 行,含 5 区域权重与绘制)
repos/ClassIsland/ClassIsland/Controls/NotificationEffects/RippleEffect.axaml(.cs) 强提醒涟漪(32/113 行)
repos/ClassIsland/ClassIsland/Views/TopmostEffectWindow.axaml(.cs) 特效窗口(35/135 行),UpdateWindowPos 100-109
repos/ClassIsland/ClassIsland/ViewModels/TopmostEffectWindowViewModel.cs 特效控件集合(24 行)
repos/ClassIsland/ClassIsland/MainWindow.axaml.cs 置顶锁 1056-1092,清除全部 1171-1174
repos/ClassIsland/ClassIsland/MainWindow.axaml 右键「清除全部提醒」86-94,行「此行可以显示提醒」425-433
repos/ClassIsland/ClassIsland/Views/ClearNotificationButtonWindow.xaml(.cs) #if false 遗留,仅 15/18 行
repos/ClassIsland/ClassIsland/Services/AudioService.cs 音频设备共享与播放(143 行)
repos/ClassIsland/ClassIsland/Services/SpeechService/SystemSpeechService.cs 系统 TTS 音量映射
.../EdgeTtsService.cs Edge TTS 音色/缓存/音量
repos/ClassIsland/ClassIsland/Views/SettingPages/NotificationSettingsPage.axaml 提醒设置页(497 行)

1.3 自动化(Part 08)

文件 说明 / 关键行
repos/ClassIsland/ClassIsland/Services/AutomationService.cs 自动化服务(465 行):时间点行动 84-108,触发 112-133,恢复 138-167,配置加载 173-233,工作流加载 237-328,触发器加载 334-436
repos/ClassIsland/ClassIsland/Services/ActionService.cs 行动服务(277 行):Invoke/Revert/Interrupt 20-91,行动项执行 93-135,可变列表迭代 137-173,迁移 179-203,菜单树 208-260
repos/ClassIsland/ClassIsland/Services/RulesetService.cs 规则求值(163 行)
repos/ClassIsland/ClassIsland/Services/WeatherService.cs 天气规则处理(460 行):规则注册 64-68,各规则 93-221,刷新与预警去重 236-403
repos/ClassIsland/ClassIsland/Services/WindowRuleService.cs 窗口规则处理(111 行)
repos/ClassIsland/ClassIsland.Core/Models/Automation/Workflow.cs 工作流(33 行)
.../TriggerSettings.cs 触发器设置(61 行)
repos/ClassIsland/ClassIsland.Shared/Models/Automation/ActionSet.cs 行动组(128 行)
.../ActionItem.cs 行动项(99 行)
repos/ClassIsland/ClassIsland.Core/Models/Ruleset/{Ruleset,RuleGroup,Rule,StringMatchingSettings}.cs 规则集模型
repos/ClassIsland/ClassIsland.Core/Enums/RulesetLogicalMode.cs Or/And
repos/ClassIsland/ClassIsland.Shared/Enums/ActionSetStatus.cs 4 状态
repos/ClassIsland/ClassIsland.Core/Abstractions/Automation/{TriggerBase,ActionBase}.cs 基类契约
repos/ClassIsland/ClassIsland.Core/Attributes/{TriggerInfo,ActionInfo}.cs 注册特性
repos/ClassIsland/ClassIsland/Services/Automation/Triggers/*.cs 12 个触发器(逐文件已读)
repos/ClassIsland/ClassIsland/Services/Automation/Actions/*.cs 7 个行动(逐文件已读)
repos/ClassIsland/ClassIsland/Models/Automation/Triggers/*.cs 5 个触发器设置模型
repos/ClassIsland/ClassIsland/Models/Actions/*.cs 6 个行动设置模型
repos/ClassIsland/ClassIsland/Models/Rules/*.cs 6 个规则设置模型
repos/ClassIsland/ClassIsland/Views/SettingPages/AutomationSettingsPage.axaml(.cs) 自动化设置页(402/167 行)
repos/ClassIsland/ClassIsland/Models/Settings.cs 全局默认值(2655 行,按行号引用)

2. 关键枚举 / 默认值总表(供交叉校验)

2.1 枚举

名称 值 证据
TimeLayoutItem.TimeType 0 上课 / 1 课间 / 2 分割线 / 3 行动 TimeLayoutItem.cs:120-138,246-253
TimeState 0 None / 1 OnClass / 2 PrepareOnClass(预留) / 3 Breaking / 4 AfterSchool TimeState.cs:6-27
TempClassPlanGroupType 0 Override / 1 Inherit TempClassPlanGroupType.cs:6-16
NotificationState None/Queued/Playing/Paused/Cancelled/Completed NotificationState.cs:6-31
NotificationModes Disabled=0 / EnabledForce=1 / Default=2 NotificationModes.cs:6-19
ActionSetStatus Normal / Invoking / IsOn / Reverting ActionSetStatus.cs:6-24
RulesetLogicalMode Or / And RulesetLogicalMode.cs:6-15
WindowStatusRuleSettings.State 0 正常 / 1 最大化 / 2 最小化 / 3 全屏(默认 1) WindowStatusRuleSettings.cs:7-27
RunActionRunType Application/Command/File/Folder/Url(字符串枚举) RunActionSettings.cs:19-49
WeatherNotificationActionSettings.NotificationKind 0 三天预报 / 1 预警 / 2 逐小时 WeatherNotificationActionSettings.cs:7

2.2 固定 GUID / ID

  • 默认课表群 ACAF4EF0-E261-4262-B941-34EA93CB4369;全局课表群 00000000-0000-0000-0000-000000000000(ClassPlanGroup.cs:44-49)。
  • 提醒提供方:上下课 08F0D9C3-C770-4093-A3D0-02F3D90C24BC、放学 8FBC3A26-6D20-44DD-B895-B9411E3DDC51、天气 7625DE96-38AA-4B71-B478-3F156DD9458D、集控 0117fb4f-5374-434a-97fb-4f5374634a07、行动 4B12F124-8585-43C7-AFC5-7BBB7CBE60D6。
  • 渠道:准备上课 CDDFE7FF-B904-4C73-B458-82793B2F66E9、上课 AFF5B9A4-037C-4A71-8563-C9EA87DDA75C、下课 77C9F3FB-0A2A-4B22-BDDF-3C333462B2F9。
  • 触发器 12 个 ID、行动 8 个 ID、规则 15 个 ID:见 Part 08 的表格(证据集中在 App.Services.xaml.cs:240-276 与各触发器/行动源文件)。

2.3 关键默认值(Part 06/07/08 交叉引用)

设置 默认 证据
SelectedProfile "Default.json" Settings.cs:66
SingleWeekStartTime 今天所在周的周日 Settings.cs:37-42
MultiWeekRotationMaxCycle 4 Settings.cs:61
MultiWeekRotationOffset [-1,-1,0,0,0] Settings.cs:60
DefaultOnClassTimePointMinutes 40 Settings.cs:108
DefaultBreakingTimePointMinutes 10 Settings.cs:109
ClassPrepareNotifySeconds 60 Settings.cs:43
IsProfileEditorClassInfoSubjectAutoMoveNextEnabled true Settings.cs:181
IsSwapMode true Settings.cs:210
ExpIsExcelImportEnabled false Settings.cs:113
档案窗口 1100×600,MinWidth 750 ProfileSettingsWindow.axaml:27-28
课表详情窗口 800×500 ClassPlanDetailsWindow.axaml:17
IsNotificationEnabled true Settings.cs:91
AllowNotificationSpeech false Settings.cs:153
AllowNotificationEffect true Settings.cs:154
AllowNotificationSound false Settings.cs:155
AllowNotificationTopmost true Settings.cs:156
NotificationSoundVolume 1.0 Settings.cs:182
SpeechVolume 1.0 Settings.cs:136
EdgeTtsVoiceName zh-CN-XiaoxiaoNeural Settings.cs:138
IsNotificationSoundEnabled(全局兜底层) true Settings.cs:144
NotificationEffectRenderingScale 1.0 Settings.cs:150
NotificationUseStandaloneEffectUiThread true Settings.cs:1837
AnimationLevel 1 Settings.cs:1851
遮罩/正文默认时长 5s / 5s NotificationContent.cs:22-23
行高 IslandContainerHeight 40 MainWindowLine.axaml:16
IsAutomationEnabled / IsAutomationWarningVisible / CurrentAutomationConfig false / true / "Default" Settings.cs:160-162
IsOnClassNotificationEnabled 等三个上下课开关 true ClassNotificationSettings.cs:7-9
室内/户外提前量 60 / 600 秒 ClassNotificationSettings.cs:10-11
WeatherAlertSpeed 7.0 WeatherNotificationProviderSettings.cs:14
天气显示模式(预警/预报) Disabled / Disabled WeatherNotificationProviderSettings.cs:10-11
放学提醒 IsEnabled / NotificationMsg true / "今天的课程已结束,请同学们有序离开。" AfterSchoolNotificationProviderSettings.cs:9-10
NotificationActionSettings.MaskDurationSeconds / ContentDurationSeconds 5.0 / 10.0 NotificationActionSettings.cs:14-15
SleepActionSettings.Value 5 秒 SleepActionSettings.cs:6
PreTimePointTriggerSettings TargetState=OnClass, TimeSeconds=60 PreTimePointTriggerSettings.cs:9-11
CronTriggerSettings.CronExpression "* * * * *" CronTriggerSettings.cs:7
ActionSet.Name / IsEnabled / IsRevertEnabled "新行动组" / true / false ActionSet.cs:77-93

3. 未决问题 / 缺口(需 Lead 决策或后续补读)

  1. 提醒优先级插队语义反常:NotificationPriority.CompareTo 在 IsPriorityOverride=true 时返回 1(NotificationPriority.cs:47-50),在 .NET 最小堆中意味着更晚出队,与「紧急插队」直觉相反。Part 07 已按「显式定义 + 标注【推断】为历史取反问题」处理;若 Lead 要求逐位一致,需在总纲统一说明。
  2. ClearNotificationButtonWindow 为 #if false 遗留:当前版本没有「清除提醒浮动按钮窗口」;Part 07 明确要求不得实现它,改用右键菜单「清除全部提醒」。若产品要求必须有,属新增功能。
  3. Excel 导入/导出整体被 #if false 屏蔽(两个窗口 + DI 注册 + ExpIsExcelImportEnabled=false)。Part 06 已把它标为非首版必做,并给出【推断】格式建议;当前可用的导入导出是 CSES / ClassIsland 1.x / Class Widgets 1.2 / 导出 CSES(App.Services.xaml.cs:292-296)。
  4. 「静音时段」不存在:Settings 与提醒链路中没有任何免打扰时段字段,只有 -q 静默启动后 10 秒丢弃提醒(MainWindowLine.cs:698-704)。Part 07 已声明不得虚构,并给出可选扩展模型(标注【推断】)。
  5. 强提醒渲染缩放自动推算公式缺失:IsNotificationEffectRenderingScaleAutoSet=true 时的具体系数未在 TopmostEffectWindow.cs 中给出,Part 07 标【推断】。
  6. Class Widgets 1.2 导入转换逻辑未细读:ClassWidgetsProfileTransferHelper.cs 尚未逐行阅读,Part 06 只按注册表与通用导入契约要求实现(文件名/流程/失败提示),未写字段映射细则。若需要像素级导入转换,需补读该文件。
  7. ClassIslandV1ProfileTransferHelper 与 ClassWidgetsProfileTransferHelper 同样未逐行读;Part 06 只覆盖 CSES 的完整映射算法。
  8. 时间线缩放常量缺失:ProfileSettingsWindow.axaml.cs 的 ZoomIn/ZoomOut 只做 UI 事件,未读取具体缩放范围常量,Part 06 标【推断】为 0.5x–3x / 步长 0.1。
  9. 档案 JSON 损坏的容错细节:ConfigureFileHelper.LoadConfig 未逐行读,Part 06 要求「回退空档案 + 保留 .bak」并标【推断】。
  10. ScheduleDataGrid 单元格渲染细节(科目简称/颜色/换课标记的视觉)未细读,Part 06 标【推断】,视觉规格建议归入 Part 04/05 由 ui-island 统一。
  11. ProfileSettingsWindow.axaml 的 2004 行中仅精读约 500 行(结构、课表/时间表/临时/群/换课/导入导出区域)。剩余部分(约 900-1600 行为止的时间线列表模板、日程调整表格模板、附加设置项)只做了 outline 级 grep,像素细节若需要请 ui-island 或 windows part 补充。
  12. 接口文件 ILessonsService / IProfileService 未逐行读:只依据实现类与调用点推断契约;对外接口方法名(如 GetCyclePositionsByDate、CreateTempClassPlan)已在 Part 06 使用实现类签名表述。
  13. ActionSetRunningControl / TriggerSettingsControl / ActionControl / RulesetControl 的内部 UI 未精读(仅确认存在与绑定方式),Part 08 只描述宿主页布局与行为契约;控件内部像素规格建议由 windows part 统一。
  14. 天气图标模板 / WeatherInfo 数据结构(ClassIsland.Core/Models/Weather)未展开,Part 07 只用到 Alerts[].Title/Detail/Type/PubTime/Images、ForecastDaily.Weather/SunRiseSet、Minutely.Precipitation.RainRemainingMinutes、Current.Weather、UpdateTime。若需要完整天气数据 schema,需补读该目录(可能属 Part 05 天气组件范围)。
  15. GetSettingsDeltaTime 的附加设置来源:ClassNotificationProvider 使用 IAttachedSettingsHostService;附加设置体系(AttachedSettings)属跨 part 内容,Part 06/07 只按「按优先级取第一个启用项」描述,未定义完整附加设置模型,建议由 Lead 在总纲指定归属(可能在 Part 05 或 Part 13)。

3.1 裁决与修补(Lead 裁决,2026-11-12 修补轮)

本轮按 Lead 裁决修补 parts/06、parts/07、parts/08(不重写整篇),结论如下:

  1. Excel 导入/导出 = P1 必须实现:用 xlsx(SheetJS)重建,禁止依赖 ReoGrid/WPF/OfficeOpenXml。ClassIsland 2.1 源码两个窗口整体 #if false,且 ExcelImportViewModel/ExcelExportViewModel 类型在仓库中已不存在(全仓检索无命中,属不可编译骨架),只能作布局参考。向导 UI 归 Part 11;Part 06 已新增 6.9.1 定义列格式、映射算法、往返一致性、预检规则与导出参数默认值(默认值标【推断】)。CSES 导入/导出标 P0。
  2. ClearNotificationButtonWindow:维持「不实现(#if false 遗留)」,清除提醒统一用右键菜单「清除全部提醒」→ CancelAllNotifications。
  3. 静音时段:维持「ClassIsland 2.1 不存在、不得虚构」;可选扩展模型改为明确 P2、默认关闭,并要求命中时段时只屏蔽音效/语音/置顶/特效、不丢弃提醒。
  4. NotificationPriority = 最终确定语义:排序键 (提供方优先级下标升序) → (Level: Emergency>High>Normal>Low) → (入队序号升序);新增 NotificationLevel 字段(默认 Normal);记录原比较器 IsPriorityOverride 取反的反常行为并声明按语义修正;旧字段兼容映射(读入 true→Emergency,写出 High/Emergency→true)。Part 07 §7.2 已删除互相矛盾的「逐位一致」表述。
  5. 附加设置 AttachedObjects = 2.x 现役机制:ClassIsland.Shared/AttachableSettingsObject.cs:15 定义 Dictionary<Guid, object?> AttachedObjects;2.x AttachedSettingsControlPresenter 读取 :241、回写 :361。Part 06 新增 §6.10(定义/注册表 GUID/读取优先级/写回纪律/1.7 兼容/与档案分析关系/边界),Part 07 补全提醒侧的数据来源、GUID 与字段。注意:实际继承 AttachableSettingsObject 的是 ClassPlan/ClassInfo/TimeLayout/TimeLayoutItem/Subject;Profile 不继承(Profile.cs:14),故附加设置不能挂档案根——已在 §6.10.1 按源码写明。
  6. 天气服务:Part 07 末尾新增 §7.14(刷新/缓存、定位与城市来源、完整 JSON schema、预警去重、图标主题、断网降级与重试、消费方分工、验收)。数据源证据为 Services/WeatherService.cs 全文、ClassIsland.Core/Models/Weather/* 全部 18 个模型、IWeatherService、ILocationService、WeatherSettingsPage.axaml、Assets/XiaomiWeather/xiaomi_weather_status.json。
  7. 其余未细读项(Class Widgets 1.2 / ClassIsland 1.x 导入 helper 的字段映射、ScheduleDataGrid 单元格视觉)按要求保持【推断】,本轮不补读。
  8. 原 §3 第 3、4、14、15 条已被上述裁决覆盖/关闭;第 1 条已由裁决 4 关闭;第 5、8、9、10、11、12、13 条仍为开放缺口,保留原描述。

3.1.1 本轮补读文件清单(新增证据)

文件 用途
repos/ClassIsland/ClassIsland.Shared/AttachableSettingsObject.cs(62 行) AttachedObjects 字段 15、GetAttachedObject 23-32、写入 39-42、默认值重载 51-61
repos/ClassIsland/ClassIsland.Shared/Interfaces/IAttachedSettings.cs(40 行) IsAttachSettingsEnabled 与 GetIsEnabled(含 JsonElement 兼容)
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/IAttachedSettingsHostService.cs(44 行) 4 个注册集合(14-22)、GetAttachedSettingsByPriority 24-43
repos/ClassIsland/ClassIsland/Services/AttachedSettingsHostService.cs(13 行) 实例侧集合
repos/ClassIsland/ClassIsland.Core/Attributes/AttachedSettingsControlInfo.cs / AttachedSettingsUsage.cs 注册特性(GUID/名称/图标/hasEnabledState/targets)
repos/ClassIsland/ClassIsland.Core/Enums/AttachedSettingsTargets.cs / AttachedSettingsControlState.cs Flags 目标值、节点状态 Disabled/Enabled/Override
repos/ClassIsland/ClassIsland.Core/Controls/AttachedSettingsControlPresenter.axaml.cs(421 行) 读取 241、目标类型映射 245-253、状态提示 272-341、写回纪律 354-362
repos/ClassIsland/ClassIsland/Helpers/AttachedSettingsControlHelper.cs(69 行) 控件侧读写 helper
repos/ClassIsland/ClassIsland/Controls/AttachedSettingsControls/*.axaml.cs(4 个) 4 个附加设置的 GUID/名称/图标/targets/hasEnabledState
repos/ClassIsland/ClassIsland/Models/AttachedSettings/{ClassNotification,AfterSchoolNotification,WeatherNotification}.cs、ClassIsland.Core/Models/AttachedSettings/LessonControlAttachedSettings.cs 附加设置模型与默认值
repos/ClassIsland/ClassIsland/Models/AttachedSettingsNodeWithState.cs 节点+状态模型
repos/ClassIsland/doc/AttachedSettings.md(88 行) 官方优先级说明 Subject→TimeLayoutItem→ClassPlan→TimeLayout(50-57)
repos/ClassIsland/ClassIsland.Core/Models/Weather/*.cs(18 个,36+23+22+14+9+8+40+9+8+18+33+29+21+9+12+10+32 行) 天气完整 schema 与派生字段
repos/ClassIsland/ClassIsland.Core/Abstractions/Services/IWeatherService.cs、ClassIsland.Platforms.Abstractions/Services/ILocationService.cs 天气服务契约、定位契约
repos/ClassIsland/ClassIsland/Views/SettingPages/WeatherSettingsPage.axaml(327 行) 城市搜索/位置设置/图标包/排除预警/不使用 TLS 的 UI 文案
repos/ClassIsland/ClassIsland/Assets/XiaomiWeather/xiaomi_weather_status.json 天气码→中文文案表(0-35、53、301、302、99)
repos/ClassIsland/ClassIsland/Views/ExcelImportWindow.xaml.cs(824 行,#if false) 时间点解析正则/数字个数 422-458、自动补课间 502-522、科目 Contains 匹配 587-639、完成导入 695-708
repos/ClassIsland/ClassIsland/Views/ExcelExportWindow.xaml.cs(539 行,#if false) 星期名 340-350、单元格生成 352-473、列宽/行高/边框 446-472、保存/打开 486-516

4. 与其他 part 的边界约定(避免重复/冲突)

  • 窗口/控件像素级细节:主界面行、组件、主题样式以 Part 04/05/03 为准;本三篇只给与业务强相关的数值(气泡动画、斜切遮罩、特效窗口、课表窗口尺寸),并已注明来源,便于交叉核对。
  • 数据存储路径、备份、迁移、Settings/Profile JSON schema 总表:Part 13;本三篇给出的是业务字段语义与默认值,字段名保持一致(Actions 而非 ActionItems、ClassPlans、OrderedSchedules 等)。
  • 动画总表:Part 14;本三篇提供气泡/涟漪的时长与曲线原始值,建议 Part 14 直接引用本节,勿另行估算。
  • 设置中心页面树:Part 10;本三篇只描述「提醒」「自动化」两页的结构与文案,页面注册顺序由 Part 10 统一。
  • Excel 导入/导出向导 UI 归 Part 11;数据契约/列格式/往返一致性/预检以 Part 06 §6.9.1 为准,Part 11 只做步骤机与表单,不得另定格式。
  • 附加设置模型(AttachedObjects)以 Part 06 §6.10 为唯一事实源;Part 05(组件)/Part 13(存储 schema)如需引用,必须沿用同名字段与同一优先级链,不得另立模型。
  • 天气服务与数据模型以 Part 07 §7.14 为准;Part 05 的天气组件只消费 LastWeatherInfo 与 SelectedWeatherIconTemplate,不得自行请求或另定义 schema。
  • 提醒优先级语义(三级排序键 + NotificationLevel)以 Part 07 §7.2 为准,Part 08 的「显示提醒」行动与集控提醒都按此映射,不得各自定义顺序。