| Merge pull request #41 from Mutx163/dependabot/github_actions/github-actions-62c522be73 Bump actions/setup-java from 5.7.0 to 6.0.1 in the github-actions group across 1 directory | 5 天前 |
| 修复(日历同步): 清空与写入合并成一次批处理(失败不再丢已同步日程);权限申请改排队扇出,修连点后 Future 永挂 三个病根各自独立,都在「同步到系统日历」这条链路上: 1) 旧版先 resolver.delete 清空、成功后再另开一批 applyBatch 插入。insert 失败时清空已经提交且无回滚,用户之前同步好的日程被清没。改为 buildSyncOps 先构造完整批次(首条恒为清空 + N 条合法插入),同一次 applyBatch 提交 —— ContentProvider 批处理是事务,中途失败整批回滚。 批次抽成纯数据 SyncOp 列表,落库前才转 ContentProviderOperation, 使「清空与写入必须同批」这条规则能在 JVM 单测里断言。 2) 权限申请只有单个 pendingPermissionResult 槽位,连点两次按钮第二次会 覆盖第一次的 Result,Dart 侧第一个 Future 永挂。改为 PermissionRequestQueue 排队 + 单弹窗扇出:首个等待者触发系统弹窗,后来的只排队,complete 一次 把全部等待者按同一结果收束。 3) activity == null 之外补判 isFinishing / isDestroyed(销毁中的 Activity 照样 requestPermissions,回调可能永远不来);新增 onHostDestroyed() 由 MainActivity.onDestroy() 调用,把还没等到结果的等待者按未授权收束。 测试:新增 android/app/src/test/kotlin/.../CalendarSyncLogicTest.kt(8 例纯 逻辑单测,无需设备);Dart 侧补 1 例「连点两次都要 await 到结果」回归钉。 验证:flutter analyze 3 个改动文件 0 issue;calendar_sync_service_test.dart 与 liquid_glass_surface_test.dart 共 31 例全绿; gradlew :app:compileDevDebugUnitTestKotlin 编译通过。 | 1 天前 |
| chore(branding): 彻底移除废弃丑图标及其生成脚本 - 删除 assets/branding/app_icon_source.png:早已废弃的旧版草稿图, 与真实发布的桌面图标(launcher_icon.png)完全不同源,多次被 AI 误当作当前设计引用,导致桌面图标被错误重绘的事故 - 删除 tool/generate_app_icons.py:唯一产出上述草稿图的脚本,其 mipmap 输出会覆盖真实图标,属危险遗留物 - 真实品牌资产 launcher_icon.png 及 mipmap 图标不受影响 | 1 个月前 |
| chore(docs): auto-update releases json and SEO pages | 1 天前 |
| 修复(设置·壁纸行): 文件名按两种分隔符切,不再只看当前系统的分隔符 CI(Ubuntu)上唯一那条红:appearance_editor_test.dart「弹层正文跟着草稿走」断言 find.text('wall.png') 读到 0 个,本地 Windows 绿。根因是这行用的是 path.split(Platform.pathSeparator).last Platform.pathSeparator 是**运行平台**的分隔符,不是**这条路径**的分隔符。测试喂的是 Windows 形状的 C:\fake\wall.png,在 Linux 上按 / 切不开,整条路径被当成文件名显示。 不只是测试的毛病:本仓有 android / ios / linux / macos / windows 五个目标,设置又能 经 WebDAV 跨设备同步 —— 一台机器上存下的壁纸路径,到另一台的壁纸行里就显示成整条 路径。单机同平台使用不触发,所以一直没暴露。 改成 path.split(RegExp(r'[\/]')).last:两种分隔符都切,语义收成「这一行显示的就是 文件名」,与路径来自哪个平台无关。没有改测试里的假路径 —— 那样 CI 也能绿,但等于把 「路径只可能是本机形状」这个错误假设固化进测试,跨设备同步那条路照样是坏的。 验证:全量 flutter test → 2600 通过 / 4 跳过 / 1 失败(唯一那条是不进仓库的本机临时 量测用例);appearance_editor_test.dart 18 例全绿; flutter analyze --no-pub --fatal-infos 该文件 0 issue。笔记已补(外观编辑页第 26 节)。 | 1 天前 |
| 修复(工具/脚本): page_lastmod 静默回退改告警 + 三处 gitignore/脚本缺陷 - tool/build_docs_seo.py:page_lastmod 取不到 git 时**静默**回退硬编码 2026-08-19,恰好复现它自己要治的「所有页面看起来从未更新」。补 returncode 检查并按 stderr 打告警;区分 git 缺失 / 超时 / 其他异常。 - .gitignore:'.py' 只匹配字面名 '.py'(实测 foo.py 未被忽略),改为 '/*.py' 只忽略仓库根的临时脚本,避免写成 '*.py' 吞掉 tool/ 下新文件。另注明 CODE_REVIEW_*.md 对**已跟踪**文件无效。 - scripts/wsl-env.sh:健康判定里硬编码 /home/mutx/.pub-cache,改用 $HOME; 补 BASH_SOURCE 守卫——此前被 source 时会读调用方的 $1/$@/$0,调用者若带 '--doctor' 之类参数会被本脚本当自己的参数执行。 - scripts/sync-main.sh:未守卫的命令替换补 || fail。缺 set -e 时若 git rev-list --count 失败,变量变空串,[ "" -gt 0 ] 报 integer expression expected 并被当假,脚本会落进「与 GitHub main 一致」分支继续推送。 | 10 天前 |
| 整理(注释): 卡片着色器的边光口径说明写清 写明当前口径(整圈均匀、不看法线朝向)与「按形状分档为什么走不通」的实测依据 (权重、过渡宽度、各卡片尺寸)。 | 1 天前 |
| chore: cut v2.1.3.1 prerelease - 新增 docs/releases/v2.1.3.1.md:收录 v2.1.2.3 之后 198 个提交里的用户可见改动, 归成 26 条(新增 10 / 优化 7 / 修复 9)。纯内部的(性能探针、CI 卡口修复、 注释整理、文档机器人数据提交、测试重构)不进用户可见日志。 - 官网更新日志补 v2.1.3.1 预发布段,同时移除已被它取代的 v2.1.2.3 预发布段 (该页自述「只放最近的版本」,完整历史在 Releases 页)。 - pubspec: 2.1.2-3+135 → 2.1.3-1+136(预发布需含 - 段)。 tool/verify_release_pubspec.sh pubspec.yaml prerelease 通过(version=2.1.3-1+136)。 tag v2.1.3.1 → VERSION_NAME=2.1.3.1 → 读 docs/releases/v2.1.3.1.md 作为发版说明, is_prerelease=true(pubspec 含 -)。 | 1 天前 |
| 修复(静态检查): 去掉 settings_appearance_editor_entry_test 里没用到的 provider import CI 的 Analyze 步骤用 flutter analyze --fatal-infos,warning 也算失败,这一条就拦在 那条规则上(unused_import)。TimetableProvider 在该测试里一次都没引用,直接删掉。 验证:全量 flutter analyze --no-pub --fatal-infos → No issues found,exit 0; 该测试文件 1 例全绿。 | 1 天前 |
| 收紧(工程化): lint 收紧至 strict-casts/strict-raw-types + 40 条扩展规则并全量清零,analyze --fatal-infos 门禁,CJK 硬编码审计棘轮接入 CI——analysis_options 启用 use_build_context_synchronously/cancel_subscriptions/avoid_print 等正确性规则与风格集(dart fix 批量修 1432 处 + 手工修 14 error/17 warning),两个高噪音规则 cascade_invocations(127)/discarded_futures(195) 注释保留待第二批;CI/安卓构建 analyze 收紧为 --fatal-infos 防劣化;audit_cjk_hardcode.py 新增 --baseline 棘轮模式(回归失败/改进自动下调),基线 68 文件 1070 行入库,CI 新增 CJK hardcode audit 步骤;附带 strict_raw_type 显式泛型、lan_edit_api_handlers ArgumentError.message 类型收窄、avoid_slow_async_io 24 处 exists()→existsSync()。flutter analyze 0 issues,services/providers/architecture/models/domain/utils/logging/data 测试全绿(壁纸 7 例失败为主分支既有,与本批无关)。 | 23 天前 |
| 修复(CI): 过中文硬编码审计的棘轮卡口 CI 红在「CJK hardcode audit」而不是测试上:那份清单记录每个源码文件里「没走多语言 资源的占位中文」的行数,只许减不许增,这次 5 个文件超了。分两类处理: 4 行其实是**行尾中文注释**(审计只跳整行注释,行尾注释照算,属它的误伤)——挪成 独立的整行注释即可,语义零变化: · lib/screens/timetable_screen.dart(「内嵌页表态只看主题」「56 正圆」) · lib/ui/hyperos/soft_glass/soft_glass_tab_bar.dart(两条 return 上的说明) 挪完这两处的计数归零,把清单里 timetable_screen 那条(1)一并删掉 —— 留着会让 将来单行行尾注释溜过去,删掉才是把棘轮收紧。 剩下 8 行是**诊断/日志文案**(出不了图的原因、着色器加载失败、坐标换算提示、 ErrorDescription 等),都不是界面文案、不该走 l10n,按本仓既有惯例登记进清单: · lib/ui/hyperos/hyperos_proxies.dart:1 · lib/ui/hyperos/preview_bake_boundary.dart:6 · lib/widgets/glass_shader_program.dart:1 (清单里本就有 71 个文件、1078 行同类存量,隔壁 soft_glass_surface:7 等都在。) 验证:本地跑该审计脚本 → 「OK: 71 files, 1078 lines (same as baseline)」exit 0; 两个被改文件 flutter analyze 0 issue;相关 3 个底栏测试文件共 7 例全绿。 | 1 天前 |
| 修复(CI): 门禁长期红是根组织构建-CPU 配额耗尽,非代码问题;顺带修 CJK 棘轮回归 CI 失败的根因不是本 PR 的代码,而是账号级配额:自 2026-09-03 11:42 起 根组织 Mutx163 的「云原生构建-CPU」(160 核时/月)已耗尽,所有 push / pull_request / tag_push 流水线都在 Prepare 阶段直接 error: Root Group's events CPU core-hours are insufficient for pre-freezing (Freezing time:5.00 min, equivalent to 0.67 core-hours) 实测对照(2026-09-10 同一分钟并发,本 PR 分支): 09:32:38 push error 8868ms 09:32:45 pull_request error 11730ms 09:32:55 pull_request.comment@npc 正常拉起 同一分支同分钟:门禁两条全红、NPC 正常 —— 两个配额桶互不相通 (门禁走「构建-CPU」,NPC 走「开发-CPU」)。Stage 列表里 analyze / unit-test 全是 skipped,说明一行代码都没跑。平台按 5min 步长预冻结, 8 核 → 每次 0.67 核时,空跑失败也照扣。 本次改动: 1. .cnb.yml:补充门禁不可用的排查笔记(报错原文、对照数据、两个桶不 互通、5min 冻结粒度、唯一治本是提额)。不改任何流水线行为,避免 「为治红而降规格」反把 gradle-jvm-tests 拖进 OOM。 2. docs/BUILD_TROUBLESHOOTING.md:新增「CNB 门禁一直红:根组织配额 耗尽」一节,含确认方法 / 对照表 / 处理办法 / 不要做的事,供后续 排查直接复用。 3. lib/providers/timetable_provider.dart:修 CJK 棘轮回归。1d2e6848 (bokeh 壁纸) 把 21→22,基线未同步。审计脚本只跳过整行 //,不跳过 行尾 //,故把行尾中文注释提为独立整行注释并改写为英文键,计数回到 21 与基线一致——是「修代码对齐棘轮」而非「抬基线掩盖回归」。 验证: - CNB 流水线校验(YAML/语义/Schema)三项通过 - python3 tool/audit_cjk_hardcode.py --baseline ...:OK,70 文件 1074 行, 与基线一致,基线文件未被抬动 - python3 tool/hyperos_audit.py --strict:通过 - flutter analyze / flutter test 需配额恢复后才能跑(Prepare 阶段即失败) 注意:配额恢复前 PR 的红色检查项应按「基础设施故障」处理,不影响代码 评审;请勿反复重推触发 CI(每次会再冻 0.67 核时)。 | 13 天前 |
| feat: home page background, frosted blur tuning, and centralized logging - Add AppLogMessages/AppDebugLog and DiagnosticLogMessages for consistent diagnostics - Support home page background fill with scoped region blur and text color settings - Add managed image storage and third-party disclaimer card - Polish course statistics and HyperOS settings blocks; refresh l10n strings - Work around stale libapp.so in flavor APK builds (flutter#187553) Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 |
| 合并二维码传输与资源功能 | 1 个月前 |
| chore: 添加 .gitattributes 统一行尾符为 LF | 2 个月前 |
| chore(repo): 忽略审查产物与临时诊断用例 - _reviews/:本地审查输出目录(既有规则只覆盖 reviews/,带下划线的那份 漏在外面)。 - test/**/_debug_*_test.dart:下划线前缀的临时诊断用例(量尺寸 / 复现现场, 用完即删)。本仓此前没有任何 _debug_*_test.dart 入库,与现状一致。 | 2 天前 |
| chore(repo): add open-source governance and align CI/docs metadata Add SECURITY, CoC, issue/PR templates, Dependabot, and pubspec repository fields; pin Flutter 3.44.4 via .fvmrc; tighten CI analyze and verify action SHAs. Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 |
| 文档(审核): 收录 2026-08-30 全天代码审核报告——只读覆盖 80 个提交/342 文件,记录门禁状态与必修项(架构守卫棘轮失败、云同步恢复路径绕过仓储唯一写入口等)及建议项,供后续修复跟进 | 20 天前 |
| 合并二维码传输与资源功能 | 1 个月前 |
| fix: 修复 CNB 构建镜像因 PEP 668 导致 pip 安装 PyYAML 失败 Ubuntu noble 默认启用 externally-managed-environment,python3 -m pip install 直接报错。改用 apt 安装发行版自带的 python3-yaml,规避 PEP 668 限制,同时省去 pip 依赖。镜像层加入 import yaml 自检,确保 hyperos-audit 可用。 | 22 天前 |
| 更新: LICENSE | 5 个月前 |
| 测试与文档同步液态玻璃收口:改名跟随、底栏索引改读 SoftGlassTabBar、窄带封顶归位 - test/ 三处改名:refraction_glass_tuning_test → liquid_glass_tuning_test、 glass_surface_refraction_test → liquid_glass_surface_test、 course_glass_refraction_test → course_glass_liquid_test;类名与枚举名跟随 lib 侧(LiquidGlassTuning / LiquidGlassSurface / CourseCardSurfaceStyle.liquidGlass)。 - 删除 liquid_glass_tuning_official_test:它断言的是被并入前的旧旋钮集。 - 底栏相关测试的「指示器索引」从第三方包的 TabIndicator 改为 SoftGlassTabBar.selectedIndex(包已移除,旧写法只会读到 null); 顺带补上漏改的 glass_dock_rapid_tap_test。 - 周视图窄带:折射位移封顶恢复 8~14(与旧厚度档同源口径,默认折射 8 不被误压), 设置页预览封顶取同比例的 11。 - frosted_sheet_settings_preview_test / liquid_glass_consistency_test 重写为 不依赖第三方包:前者断言液态档 5 个 LiquidGlassSurface(1 面板 + 4 磁贴), 后者断言单一参数出口与模态采样口径。 - 文档:README 与站点架构页技术栈不再列 liquid_glass_widgets; hyperos-ui-kit 参考页类名改 LiquidGlassSurface;两篇 2026-09-13 快照加失效说明。 | 4 天前 |
| chore(repo): add open-source governance and align CI/docs metadata Add SECURITY, CoC, issue/PR templates, Dependabot, and pubspec repository fields; pin Flutter 3.44.4 via .fvmrc; tighten CI analyze and verify action SHAs. Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 |
| 收紧(工程化): lint 收紧至 strict-casts/strict-raw-types + 40 条扩展规则并全量清零,analyze --fatal-infos 门禁,CJK 硬编码审计棘轮接入 CI——analysis_options 启用 use_build_context_synchronously/cancel_subscriptions/avoid_print 等正确性规则与风格集(dart fix 批量修 1432 处 + 手工修 14 error/17 warning),两个高噪音规则 cascade_invocations(127)/discarded_futures(195) 注释保留待第二批;CI/安卓构建 analyze 收紧为 --fatal-infos 防劣化;audit_cjk_hardcode.py 新增 --baseline 棘轮模式(回归失败/改进自动下调),基线 68 文件 1070 行入库,CI 新增 CJK hardcode audit 步骤;附带 strict_raw_type 显式泛型、lan_edit_api_handlers ArgumentError.message 类型收窄、avoid_slow_async_io 24 处 exists()→existsSync()。flutter analyze 0 issues,services/providers/architecture/models/domain/utils/logging/data 测试全绿(壁纸 7 例失败为主分支既有,与本批无关)。 | 23 天前 |
| 1 | 6 个月前 |
| fix(build): complete statistics l10n and bump Android toolchain versions Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 |
| 补齐 ja/ko/zh_HK/zh_TW 缺失翻译并更新 HTTPS 说明文案 - ja/ko 补齐 141 个缺失 key(情侣课表、坚果云、课程备注、壁纸背景等),占位符与模板逐一校验一致 - zh_HK/zh_TW 补齐 144 个缺失 key(繁体术语本地化:汇入/叠加/桌布/唯读/字级 等) - l10n_untranslated.json 恢复为空,全部 6 语言翻译完整 - 更新 cloudSyncBaseUrlSecurityNote 文案:明文已恢复,改为「建议使用 HTTPS」中性表述 | 1 个月前 |
| 修复(依赖): flutter_miuix 从本机路径改回 fork + 固定 commit dependency_overrides 里那条曾写成 path: ../flutter_miuix_glassy(本机上跑通 再改回来),本机以外解析不到:CI 第一步 flutter pub get 直接失败,别人拉代码 也装不上依赖。test/architecture/dependency_guards_test.dart 正是盯这件事的。 先把 fork 上对应提交 574a234(面板布局级让位缩放;二级边缘高光与阴影随开合 渐显)推到 Mutx163/flutter_miuix 的 glassy-surface 分支(快进),再把这里改回 git + ref 固定 40 位 commit,并重跑 pub get 刷新 lock。 验证:dependency_guards_test + inspire_blur_patch_test 共 10 例全绿; pubspec.lock 里 flutter_miuix 为 source: git / url 指向 fork / resolved-ref 574a234;全仓已无 source: path 依赖。 | 1 天前 |
| chore: cut v2.1.3.1 prerelease - 新增 docs/releases/v2.1.3.1.md:收录 v2.1.2.3 之后 198 个提交里的用户可见改动, 归成 26 条(新增 10 / 优化 7 / 修复 9)。纯内部的(性能探针、CI 卡口修复、 注释整理、文档机器人数据提交、测试重构)不进用户可见日志。 - 官网更新日志补 v2.1.3.1 预发布段,同时移除已被它取代的 v2.1.2.3 预发布段 (该页自述「只放最近的版本」,完整历史在 Releases 页)。 - pubspec: 2.1.2-3+135 → 2.1.3-1+136(预发布需含 - 段)。 tool/verify_release_pubspec.sh pubspec.yaml prerelease 通过(version=2.1.3-1+136)。 tag v2.1.3.1 → VERSION_NAME=2.1.3.1 → 读 docs/releases/v2.1.3.1.md 作为发版说明, is_prerelease=true(pubspec 含 -)。 | 1 天前 |