Silent1566
5682f2b054
剔除 PR #353 主题系统改动
...
保留 TMDB 外链浏览器、追更、动作卡和后续修复;移除主题运行时、编辑器、目录与相关测试。
Verification: git diff --check passed; mobile and leanback Arm64 Debug Java compilation passed; Gradle daemon stopped.
Task-Guard: remove-pr353-theme-changes
2026-09-24 19:36:09 +08:00
Silent1566
9801f2b31f
Merge pull request #360 from Silent1566/dev4
...
dev4:同步 beta 并修复详情页焦点回归
2026-09-24 18:40:39 +08:00
Silent1566
d3e87170c3
fix: reconcile beta focus correction with immediate detail focus
...
Verification: 双 flavor Java 编译 BUILD SUCCESSFUL in 2m16s;移动端全量 JVM 单测修复后 BUILD SUCCESSFUL in 40s(4908 tests, 0 failed, 2 skipped);git diff --check 与 --cached --check 通过;两轮组合复评通过
Task-Guard: C19-beta-sync-review-dev4-20260924
2026-09-24 18:37:48 +08:00
Silent1566
00bc40e1f7
merge: sync latest remote beta
2026-09-24 18:26:52 +08:00
Silent1566
21ebe9612b
fix: make super parse work on legacy WebView
...
Verification: compileMobileArm64_v8aDebugJavaWithJavac BUILD SUCCESSFUL; scripts/build_arm64_debug_install.sh --serial 192.168.50.3:5561 BUILD SUCCESSFUL and coverage install; clean 5561 run with parse-super start json=0 web=10, wh-wasm JS HMAC shim, webview-sniff m3u8, parse-super web success 虾米, parse-job success, VideoActivity READY firstFrameMs=12310 rebufferCount=0; generated build artifacts and temporary logs cleaned, Gradle daemon stopped
Task-Guard: PLAYBACK-PARSE-SUPER-20260923
2026-09-24 18:07:35 +08:00
Silent1566
4eafca8539
Merge pull request #359 from Silent1566/dev1
...
修复 TMDB 路由选择的电视遥控操作
2026-09-24 16:36:13 +08:00
Silent1566
940ae26b7f
fix: keep TMDB route activation after focus navigation
...
Verification: 契约测试通过::app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.dialog.TmdbSourceDialogInflationContractTest(2 tests)。mobile/arm64-v8a Debug APK 通过 scripts/build_arm64_debug_install.sh 覆盖安装到 192.168.50.3:5555。实机验证通过:语言输入 Down 自动打开 API 选择器,Back 后 Enter 可重新打开,API Down 可进入图片选择器。二次评审、task_guard check、git diff --check 通过;验证临时 XML 已清理。
Task-Guard: C19-beta-sync-review-dev1-20260924-fix
2026-09-24 16:29:26 +08:00
Silent1566
d5065df980
merge: sync latest remote beta
...
Verification: Beta merge from origin/beta (4b8e6bb80 ) completed without conflicts; merge content retained in index after resetting only the accidental task-guard baseline commit. No runtime validation run for this reconciliation commit; task review and risk-based verification continue before release.
Task-Guard: C19-beta-sync-review-dev1-20260924
2026-09-24 16:17:13 +08:00
Silent1566
643f0618c5
fix: open TMDB route picker on focus
...
Verification: Focused contract test passed: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.dialog.TmdbSourceDialogInflationContractTest. Runtime TV verification on 192.168.50.3:5555: scrolling to API route opened picker automatically; DPAD_DOWN+ENTER selected official API; focused API input then reopened its picker by ENTER. Leanback arm64 debug APK built and overwritten via scripts/build_arm64_debug_install.sh. Device preference backup restored byte-for-byte (SHA-256 1c8d9b5e39c28f88d39e72af5bfe6f55c31df07981a0c6849c9554f15b5b2da0).
Task-Guard: FIX-TV-TMDB-ROUTE-AUTO-SWITCH
2026-09-24 15:57:19 +08:00
Silent1566
4b8e6bb803
Merge pull request #358 from Silent1566/dev2
...
合并上游测试兼容更新并通过 beta 评审
2026-09-24 15:45:52 +08:00
Silent1566
9446ea0caf
fix(guard): recover committed and finished task state
...
Verification: bash -n passed; real repository start/check/finish/tag/archive lifecycle exercised; a separate fresh start succeeded after archive.
Task-Guard: task-guard-recovery-archive
2026-09-24 15:44:02 +08:00
Silent1566
ebf10f99bf
merge upstream/main test compatibility update
...
Verification: :app:compileLeanbackArm64_v8aDebugUnitTestJavaWithJavac --no-daemon BUILD SUCCESSFUL (34s)
Task-Guard: beta-upstream-sync-20260924
2026-09-24 15:32:51 +08:00
Silent1566
7a8b7c8962
Merge pull request #356 from Silent1566/dev2
...
修复电视首页切换站点后的旧分类残留
2026-09-24 14:10:50 +08:00
Silent1566
2559082e3d
test(leanback): cover stale home type clearing chain
...
Verification: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.HomeSiteSwitchClearsTypesTest; task_guard check; git diff --check
Task-Guard: beta-merge-review-20260924
2026-09-24 14:06:17 +08:00
Silent1566
438c455330
fix(leanback): clear stale home types on site switch
...
Verification: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.HomeSiteSwitchClearsTypesTest
Task-Guard: home-site-clear-types
2026-09-24 13:35:09 +08:00
Silent1566
90e16653b2
fix: use TV pickers for TMDB route selection
...
Verification: Runtime TV remote verification on 192.168.50.3:5555: API route opened picker, DPAD_DOWN+ENTER selected official API and input text changed to 官方 API(直连); image route opened picker, three DPAD_DOWN+ENTER selected wsrv.nl 图片代理 and input text changed to wsrv.nl 图片代理. Unit contract test passed: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.dialog.TmdbSourceDialogInflationContractTest. Leanback arm64 debug APK built and overwritten via scripts/build_arm64_debug_install.sh.
Task-Guard: FIX-TV-TMDB-ROUTE-REMOTE-PICKER
2026-09-24 13:29:33 +08:00
Silent1566
3f8ad880de
Merge pull request #355 from Silent1566/dev2
...
修复电视详情页焦点裁切与滚动留白
2026-09-24 13:25:05 +08:00
Silent1566
6d62c593c6
评审远端 beta 合并后的电视详情页焦点修复并补齐相关视频导航
...
Verification: Leanback arm64-v8a Debug 单元测试通过;leanback/arm64-v8a Debug APK 通过 scripts/build_arm64_debug_install.sh 构建并覆盖安装到 192.168.50.3:5557,安装校验通过;应用启动无本次新增崩溃;最终复评通过:焦点监听安装/移除各一次、相关视频裁切与内边距各一次、相关视频行已纳入 first/last 程序化导航且顺序正确。
Task-Guard: BETA-SYNC-REVIEW-DEV2-20260924
2026-09-24 13:01:26 +08:00
www.xueximeng.com
d187f6ae8b
test(exo): avoid package-private recoverable access
...
Verification: bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests 'com.fongmi.android.tv.player.danmaku.*' --no-daemon (BUILD SUCCESSFUL in 44s)
Task-Guard: fix-exo-recoverable-test-compile
2026-09-24 12:45:28 +08:00
Silent1566
b297c7fc93
Merge remote-tracking branch 'origin/beta' into dev2
2026-09-24 12:27:30 +08:00
Silent1566
2cdd60fc55
fix: make TMDB route dropdowns TV remote operable
...
Verification: Unit contract test passed: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.dialog.TmdbSourceDialogInflationContractTest; Leanback arm64 debug APK built with scripts/build_arm64_debug_install.sh and overwritten to 192.168.50.3:5555
Task-Guard: FIX-TV-TMDB-ROUTE-REMOTE
2026-09-24 12:17:37 +08:00
Silent1566
005efaf637
按钮/控件焦点也保留上下间距,消除贴屏顶部的拥挤
...
Verification: leanback/arm64-v8a Debug 构建通过并覆盖安装到 192.168.50.3:5557;实测焦点按钮不再贴屏幕顶端:play [32,24]-[1068,116](原为 y=0)、changeSourceDetail [32,24]-[226,108]、线路芯片 [32,24]-[208,86]、episodeTitle [120,24]-[290,96],均为 12dp 上间距;焦点头部按钮金色描边完整(上 y32-37、下 y102-107),屏幕 0-3 行无金色像素;下方外部链接行 bottom 间距 16dp(y912-992);向下遍历 22 步无元素 y1<0 或 y2>1080;回归验证卡片行标题锚定仍生效(猜你喜欢[24,67]、个性推荐·TMDB[24,67]、主创[24,67] 均完整,无标题残缺)。
Task-Guard: TV-BUTTON-ROW-FOCUS-MARGIN
2026-09-24 11:52:06 +08:00
Silent1566
36d2c1faad
Merge pull request #354 from Silent1566/dev1
...
修复全局历史显式关闭的持久化
2026-09-24 11:36:47 +08:00
Silent1566
0f4401b57f
卡片行聚焦改为按分区标题锚定,消除标题被切与下一个标题残缺
...
Verification: leanback/arm64-v8a Debug 构建通过并覆盖安装到 192.168.50.3:5557;在 TmdbDetailActivity(墨雨云间)逐行上下导航实测:聚焦任意卡片行时其分区标题完整可见(如 personalTmdbTitle y24-67、relatedVideoTitle y24-67,均留 12dp 顶部间距),且底部不再出现残缺的下一个标题(DOWN #2 时 personalDoubanList 行底 y1040、下一标题完全移出可视区;其余各步均无标题跨底边);相关视频行焦点卡片四边金色描边完整(上 y710-713、下 y1030-1033、左 x37-40、右 x607-610),上一轮修复无回归。
Task-Guard: TV-CARD-ROW-TITLE-ANCHOR
2026-09-24 11:28:51 +08:00
Silent1566
73c4a7d7d5
Fix explicit global history off persistence
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.history.GlobalHistorySettingSourceTest BUILD SUCCESSFUL
Task-Guard: global-history-off-persistence
2026-09-24 11:06:50 +08:00
Silent1566
ac95866199
Merge pull request #353 from Silent1566/dev1
...
merge: 同步 dev1 最新修复并合入 beta
2026-09-24 10:57:01 +08:00
Silent1566
6aabb5b23a
merge: 同步远端 dev1 主题与详情修复
...
合并 origin/dev1 的主题系统、TMDB 详情模式与播放修复,保留 beta 合并后的外链浏览器与追更/动作卡改动。
Verification: 定向主题/详情/追更/动作卡测试通过;mobile 与 leanback Arm64 Java 编译通过。
Task-Guard: beta-sync-review-dev1-remote-20260924
2026-09-24 10:45:25 +08:00
Silent1566
891c1f4dd4
卡片行焦点留白,避免放大描边被可视区裁切
...
Verification: leanback/arm64-v8a Debug 构建通过并覆盖安装到 192.168.50.3:5557;复现'从下方行向上选到相关视频'场景,relatedVideoList 行顶保留 24dp 留白(y=48px),焦点卡片 [37,54]-[611,378] 四边金色描边完整(上 y54-57、下 y374-377、左 x37-40、右 x607-610);向下进入该行亦完整(行 y631-967、卡片 y637-961);上下往返多次稳定无抖动。
Task-Guard: TV-CARD-ROW-FOCUS-MARGIN
2026-09-24 10:12:53 +08:00
Silent1566
1c53bf14fe
fix: 清理 TMDB 详情页重复导入
...
Verification: 合并 origin/beta=87c147af5b49e7447a41a0a2267155d3dbef85a0;评审 beta 与 dev1 已提交未推送改动并清理 TmdbDetailActivity 重复导入;bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.web.CatWebWiringTest --tests com.fongmi.android.tv.content.ActionCardHelperTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest :app:compileMobileArm64_v8aDebugJavaWithJavac :app:compileLeanbackArm64_v8aDebugJavaWithJavac --console=plain:BUILD SUCCESSFUL;bash scripts/build_arm64_debug_install.sh --flavor leanback --serial 192.168.50.3:5555:Debug 构建成功并 install -r 覆盖安装;启动首页无崩溃;git diff --check 与重复导入静态检查通过
Task-Guard: beta-sync-review-dev1-20260924
2026-09-24 09:42:17 +08:00
Silent1566
45eb9b620b
Merge remote-tracking branch 'origin/beta' into dev1
2026-09-24 08:53:37 +08:00
Silent1566
49b9b4c3e6
修复电视 TMDB 详情页相关视频焦点放大裁切
...
Verification: leanback/arm64-v8a Debug 构建通过并覆盖安装到 192.168.50.3:5557;在 TmdbDetailActivity(墨雨云间·剧幕)聚焦相关视频首卡,实测四边金色描边完整:顶边 y184-187、底边 y504-507、左边 x37-40、右边 x607-610,均落在 relatedVideoList 容器边界内。
Task-Guard: TV-RELATED-VIDEO-FOCUS-CLIP-2
2026-09-24 01:58:46 +08:00
Silent1566
f54d4de2d6
fix(tv): guard WebView anti-darkening by capability
...
Verification: bash ./gradlew :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.web.CatWebWiringTest :app:compileLeanbackArm64_v8aDebugJavaWithJavac --console=plain: BUILD SUCCESSFUL; bash scripts/build_arm64_debug_install.sh --flavor leanback --serial 192.168.50.3:5555: BUILD SUCCESSFUL and install -r success; runtime check on 192.168.50.3:5555 confirmed builtin browser opens CatWebActivity without UnsupportedOperationException on Android 9 WebView.
Task-Guard: catwebbrowser-disable-auto-darkening
2026-09-24 00:40:44 +08:00
Silent1566
87c147af5b
Merge pull request #352 from Silent1566/dev4
...
修复动作卡片空回传误报并同步 beta
2026-09-23 20:36:16 +08:00
Silent1566
1f42fa6927
fix: preserve action success and error semantics
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.content.ActionCardHelperTest and :app:compileMobileArm64_v8aDebugJavaWithJavac passed (BUILD SUCCESSFUL)
Task-Guard: ACTION-CARD-EMPTY-SUCCESS-20260923
2026-09-23 20:23:06 +08:00
Silent1566
090918863c
修复电视详情页相关视频焦点放大裁切
...
Verification: 资源编译通过;192.168.50.3:5557 上聚焦《墨雨云间》相关视频卡片,焦点四边、标题及底部标签均完整显示,无裁切。
Task-Guard: TV-RELATED-VIDEO-FOCUS-CLIP
2026-09-23 20:14:29 +08:00
Silent1566
fdf31d00d1
Merge remote-tracking branch 'origin/beta' into dev4
2026-09-23 19:39:46 +08:00
Silent1566
a993531170
feat(tv): choose browser for TMDB external links
...
Verification: bash ./gradlew :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.web.CatWebWiringTest :app:compileLeanbackArm64_v8aDebugJavaWithJavac :app:compileMobileArm64_v8aDebugJavaWithJavac --console=plain: BUILD SUCCESSFUL; bash scripts/build_arm64_debug_install.sh --flavor leanback --serial 192.168.50.3:5555: BUILD SUCCESSFUL and install -r success; runtime check on 192.168.50.3:5555 confirmed external link click shows choice dialog and builtin choice opens CatWebActivity.
Task-Guard: tmdb-external-link-choice-browser
2026-09-23 19:28:39 +08:00
Silent1566
55a8412d2a
fix: treat empty action response as success
...
Verification: ActionCardHelperTest 2/2 passed; mobile arm64 debug assembled and installed to 192.168.50.3:5561; APK sha256 35f754ba09ab18ca146e0e2c05cfefb47651cfadc33573aa4d52e484abc3005d
Task-Guard: ACTION-CARD-EMPTY-SUCCESS-20260923
2026-09-23 18:43:27 +08:00
Silent1566
61ddddec4b
Merge pull request #351 from Silent1566/dev2
...
dev2 同步 beta:追更播放与 TV 布局修复
2026-09-23 15:12:26 +08:00
Silent1566
ca0456c30b
Merge remote-tracking branch 'origin/beta' into dev2
2026-09-23 14:50:48 +08:00
Silent1566
223060c18f
feat(tv): open TMDB external links in app browser
...
Verification: bash ./gradlew :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.web.CatWebWiringTest :app:compileLeanbackArm64_v8aDebugJavaWithJavac :app:compileMobileArm64_v8aDebugJavaWithJavac --console=plain: BUILD SUCCESSFUL; bash scripts/build_arm64_debug_install.sh --flavor leanback --serial 192.168.50.3:5555: BUILD SUCCESSFUL and install -r success; aapt2/aapt APK inspection confirms detail_external_opening string and CatWebActivity/TmdbDetailActivity manifest entries.
Task-Guard: tmdb-external-link-in-app-browser
2026-09-23 14:43:23 +08:00
Silent1566
1366f2dba6
Merge pull request #350 from Silent1566/dev4
...
合并 dev4:完善 TMDB 自动线路与追更页适配
2026-09-23 14:41:51 +08:00
Silent1566
587c4d51f6
调整去广告实验性设置提示
...
Verification: bash ./gradlew :app:processMobileArm64_v8aDebugResources --offline --console=plain: BUILD SUCCESSFUL
Task-Guard: AD-SETTINGS-EXPERIMENTAL-WARNING
2026-09-23 13:29:04 +08:00
Silent1566
e6634543ee
Merge remote-tracking branch 'origin/beta' into dev4
2026-09-23 13:04:12 +08:00
Silent1566
0f110b3115
fix(following): scroll TV header with content
...
Verification: git diff --check passed; XML parsing passed for main and leanback layouts; FollowingUiSourceTest BUILD SUCCESSFUL; leanback arm64-v8a Debug build and overwrite installation to 192.168.50.3:5561 succeeded; runtime reproduction verified the TV header scrolls with content, FollowingActivity remained resumed, screenshots captured, and no FATAL EXCEPTION occurred; Gradle daemons stopped
Task-Guard: FOLLOWING-TV-FOCUS-VISIBILITY-20260923
2026-09-23 12:49:15 +08:00
Silent1566
c575029dc5
Merge pull request #349 from Silent1566/dev1-following-resume-fix-20260923
...
修复追更页继续播放的来源绑定与详情模式路由
2026-09-23 11:02:06 +08:00
Silent1566
6b1d8652a8
Merge remote-tracking branch 'origin/beta' into dev1
2026-09-23 10:55:17 +08:00
Silent1566
90faa2bada
fix(following): respect configured detail mode on continue playback
...
Verification: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest BUILD SUCCESSFUL; :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest BUILD SUCCESSFUL; git diff --check passed; Gradle daemons stopped
Task-Guard: tv-following-respect-tmdb-mode
2026-09-23 10:36:29 +08:00
Silent1566
5559baa86d
fix(following): force TV continue playback to direct history route
...
Verification: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest BUILD SUCCESSFUL; :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest BUILD SUCCESSFUL; scripts/build_arm64_debug_install.sh --flavor leanback --abi arm64-v8a --serial 192.168.50.3:5555 BUILD SUCCESSFUL and adb install -r Success; FollowingContinueDeviceTest OK (1 test); git diff --check passed
Task-Guard: tv-following-direct-resume-route
2026-09-23 04:22:33 +08:00
Silent1566
d1ef28cf97
fix(following): keep TV content below top edge
...
Verification: git diff --check passed; FollowingUiSourceTest BUILD SUCCESSFUL; leanback arm64-v8a Debug build and overwrite install to 192.168.50.3:5561 succeeded; runtime UI verified top controls at y=56, recycler at y=152, first item title at y=192, FollowingActivity resumed, no FATAL EXCEPTION
Task-Guard: FOLLOWING-TV-TOP-INSET-20260923
2026-09-23 01:53:15 +08:00
Silent1566
4b18b8266a
fix(following): preserve source binding on continue playback
...
Verification: :app:testLeanbackArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.FollowingUiSourceTest BUILD SUCCESSFUL; git diff --check passed
Task-Guard: tv-following-continue-source
2026-09-23 00:03:55 +08:00
Silent1566
99e96c9218
Merge pull request #348 from Silent1566/dev2
...
feat: 增强 TMDB 自动线路与故障切换
2026-09-22 17:46:52 +08:00
Silent1566
bec5a5c098
Merge remote-tracking branch 'origin/beta' into dev2
2026-09-22 17:38:47 +08:00
Silent1566
ae1c334080
fix(tmdb): migrate legacy default routes to auto
...
Verification: 历史官方默认配置(无 routeMode)在 Android 9 UI dump 中 API/图片均显示自动;新增 routeMode 保证新用户明确选择官方直连后仍保持直连、历史自定义不改变;相关配置测试通过;Debug 包覆盖安装到 192.168.50.3:5557
Task-Guard: tmdb-route-mode-legacy
2026-09-22 17:27:19 +08:00
Silent1566
ae67e809a1
fix(tmdb): put auto route first and align failover labels
...
Verification: API 与图片两个自动选项文案统一为低延迟优先/失败切换,并均已放到各自下拉第一项;TmdbProxyTest 与 UI 聚焦测试通过,BUILD SUCCESSFUL;git diff --check 通过
Task-Guard: tmdb-api-auto-order-fix
2026-09-22 17:13:22 +08:00
Silent1566
70674c7fc4
fix(tmdb): put auto route first and align labels
...
Verification: API 与图片自动选项文案统一为低延迟优先/失败切换;两类下拉列表均将自动置于第一项;TmdbProxyTest 与 UI 资源/Java 聚焦测试通过,BUILD SUCCESSFUL;git diff --check 通过
Task-Guard: tmdb-auto-label-order
2026-09-22 16:48:37 +08:00
Silent1566
f72b4ec260
fix(tmdb): default legacy official routes to auto
...
Verification: 历史官方默认配置 UI dump 现显示 API/图片自动选项;显式 routeConfigured 自定义/直连保留测试通过;Mobile ARM64 Debug 聚焦测试 BUILD SUCCESSFUL;Debug 包已覆盖安装到 192.168.50.3:5557,未卸载已有包
Task-Guard: tmdb-auto-default-legacy
2026-09-22 16:28:02 +08:00
Silent1566
e2bce36ed5
feat(tmdb): add automatic route failover and wsrv image proxy
...
Verification: 研究记录已写入 docs/tmdb-proxy-design.md;自定义 API/图片配置、wsrv.nl URL 包装、API/图片自动候选、低延迟排序与失败冷却单测通过;Mobile ARM64 Debug 聚焦测试 BUILD SUCCESSFUL;scripts/build_arm64_debug_install.sh 已构建并覆盖安装到 192.168.50.3:5557,运行时 UI dump 确认 API/图片线路下拉控件;未卸载已有包
Task-Guard: tmdb-auto-failover
2026-09-22 15:43:27 +08:00
Silent1566
975708fe6b
Merge pull request #347 from Silent1566/dev4
...
合并 dev4:稳定接口身份与多地址支持
2026-09-22 15:29:25 +08:00
Silent1566
1f008c0da9
fix: preserve remote config identity during upsert
...
Verification: 已完成全量改动复评并修复远端配置稳定身份缺口;StableInterfaceIdentityAcceptanceTest 定向测试 BUILD SUCCESSFUL;git diff --check 通过;task_guard check 通过;Gradle daemon 已停止并回收资源
Task-Guard: dev4-beta-sync-20260922
2026-09-22 15:24:24 +08:00
Silent1566
d2ea042db7
Merge remote-tracking branch 'origin/beta' into dev4
2026-09-22 15:06:58 +08:00
Silent1566
5394255511
fix: wait for TV interface target before focusing
...
Verification: Fixed the remaining runtime gap where one DPAD move could leave focus on the previous row: Leanback ConfigAdapter now waits for the target RecyclerView child to attach, requests focus once, and removes the attach listener after success; no smooth scrolling or repeated delayed focus callbacks; InterfaceEntryInteractionTest and ConfigHistoryCurrentSourceGuardTest passed (10 tests total); Leanback arm64-v8a Debug APK compiled and was covered-installed with install -r to 192.168.50.3:5561; runtime UI dump verified consecutive DPAD_DOWN sequence across all six interface rows and add button, then DPAD_UP back across all six rows; Gradle daemon stopped and temporary UI dumps cleaned; git diff --check passed
Task-Guard: leanback-interface-focus-attach
2026-09-22 14:51:24 +08:00
Silent1566
85ebd3bcfa
fix: remove TV interface focus flicker
...
Verification: InterfaceEntryInteractionTest passed with 8 tests, 0 failures, and 0 errors; ConfigHistoryCurrentSourceGuardTest passed with 2 tests; leanback arm64-v8a debug Java compilation passed; latest Debug APK built and covered-installed to 192.168.50.3:5561; removed smooth scrolling and repeated delayed focus callbacks, now stopping scroll and using one post-on-animation focus after direct layout-manager positioning to eliminate focus flicker; current interface remains focusable but cannot be reused; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-focus-no-flash
2026-09-22 13:56:15 +08:00
Silent1566
da20a189f6
fix(tmdb): remove invalid routes and split api image
...
Verification: 真实线路探测:itv666 API /3/configuration 返回 200 有效 JSON、/t/p/w342 图片返回 200 image/png;Worker 池各地址 TLS connect EOF,NAStool API 返回 HTML且图片404,已移除;布局检查通过(ScrollView单子节点,apiHostInput/imageHostInput各一次);聚焦 Mobile ARM64 Debug 单测全部通过;Debug APK 构建成功并使用 adb install -r 覆盖安装到 192.168.50.3:5557,运行时确认 API/图片双线路下拉控件
Task-Guard: tmdb-route-validity-split
2026-09-22 13:37:27 +08:00
Silent1566
29b2f0fd2b
fix: align TV dialog sizing and focus
...
Verification: InterfaceEntryInteractionTest passed with 8 tests, 0 failures, and 0 errors; ConfigHistoryCurrentSourceGuardTest passed with 2 tests; leanback arm64-v8a debug Java compilation passed; latest Debug APK built and covered-installed to 192.168.50.3:5561; ConfigDialog now uses the LightDialog full-size overload so its on-show sizing is not overwritten by the compact default; dialog margins are 24dp (48dp total); DPAD row focus gets delayed retries after scroll; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-current-focus-and-config-fill
2026-09-22 13:28:18 +08:00
Silent1566
c808cfecd6
Merge pull request #345 from Silent1566/dev5
...
合并 beta 并同步手机版触屏设置测试
2026-09-22 12:58:56 +08:00
Silent1566
2985605626
refactor(tmdb): unify route selector input
...
Verification: 布局结构检查通过:ScrollView 仅一个直接子节点、仅保留 apiHostInput;聚焦 Mobile ARM64 Debug 单测通过(TmdbProxyTest、TmdbConfigImageHostTest、TmdbConfigEffectiveTest、TmdbConfigTestServiceTest、TmdbSourceDialogInflationContractTest);:app:processMobileArm64_v8aDebugResources/Java 编译通过;scripts/build_arm64_debug_install.sh 覆盖安装到 192.168.50.3:5557,运行时 UI dump 确认默认 https://api.tmdb.org、单一线路输入框,并实际打开下拉检查内置线路
Task-Guard: tmdb-unified-route
2026-09-22 12:27:22 +08:00
Silent1566
c6002dca3b
fix: keep current interface focusable on TV
...
Verification: InterfaceEntryInteractionTest passed with 8 tests, 0 failures, and 0 errors; ConfigHistoryCurrentSourceGuardTest passed with 2 tests; leanback arm64-v8a debug Java compilation passed; Debug APK built and covered-installed to 192.168.50.3:5561; ConfigDialog content hierarchy now expands to the full screen-sized window; current interface row remains focusable while click reuse and delete protection remain; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-current-focus-and-config-fill
2026-09-22 12:19:01 +08:00
Silent1566
838167adde
feat(tmdb): add built-in proxy route selector
...
Verification: Layout XML/ScrollView structural check passed; focused Mobile ARM64 Debug unit tests passed (TmdbProxyTest, TmdbConfigImageHostTest, TmdbConfigEffectiveTest, TmdbConfigTestServiceTest, TmdbSourceDialogInflationContractTest); :app:processMobileArm64_v8aDebugResources passed; scripts/build_arm64_debug_install.sh mobile arm64-v8a installed over existing package on 192.168.50.3:5557 and runtime UI dump confirmed proxy selector/label without overlap
Task-Guard: tmdb-proxy-selector
2026-09-22 12:09:54 +08:00
Silent1566
6a01d426d8
修复手机版触屏优化移除后的测试断言
...
Verification: 聚焦 :app:testMobileArm64_v8aDebugUnitTest 通过 PushParserTest 与 TouchOptimizationHelperSourceTest;git diff --check 通过;第二轮改动复评通过
Task-Guard: dev5-beta-merge-review-20260922
2026-09-22 12:09:00 +08:00
Silent1566
be7dad1b7d
Merge remote-tracking branch 'origin/beta' into dev5
2026-09-22 11:34:54 +08:00
Silent1566
1b42d66244
移除手机版个性设置中的触屏优化入口
...
Verification: :app:compileMobileArm64_v8aDebugJavaWithJavac BUILD SUCCESSFUL; mobile sources contain no touchOptimization references; leanback entry/runtime retained
Task-Guard: remove-mobile-touch-optimization
2026-09-22 11:06:40 +08:00
Silent1566
ca0e3dc2aa
fix(tmdb): keep proxy input inside scroll content
...
Verification: layout structure passed: ScrollView has exactly one direct child and proxyHostInput is present once; git diff --check passed; :app:processMobileArm64_v8aDebugResources passed with BUILD SUCCESSFUL
Task-Guard: tmdb-proxy-layout-crash
2026-09-22 09:44:07 +08:00
Silent1566
f50897455c
fix: expand TV interface dialogs
...
Verification: InterfaceEntryInteractionTest passed with 7 tests, 0 failures, and 0 errors; leanback arm64-v8a debug Java compilation passed; TV interface list and edit dialogs now use screen-sized windows with 32dp margins on every edge, transparent window backgrounds, and zero decor padding; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-dialog-fullscreen-margins
2026-09-22 01:52:57 +08:00
Silent1566
f128caa286
feat(tmdb): add configurable proxy base
...
Verification: git diff --check passed; XML parse passed; :app:testMobileArm64_v8aDebugUnitTest focused TMDB tests passed with BUILD SUCCESSFUL
Task-Guard: tmdb-proxy
2026-09-22 01:31:23 +08:00
Silent1566
fb4fd00438
fix: improve TV interface dialog focus navigation
...
Verification: InterfaceEntryInteractionTest passed with 7 tests, 0 failures, and 0 errors; leanback arm64-v8a debug Java compilation passed; BUILD SUCCESSFUL in 32s with 98 actionable tasks; TV interface dialog now focuses the editable name field initially and provides an explicit D-pad focus chain through URL, backup addresses, file actions, confirm, and cancel; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-dialog-focus-chain
2026-09-22 01:14:10 +08:00
Silent1566
673bc67ec5
fix: use existing TV interface name hint
...
Verification: leanback arm64-v8a debug Java compilation passed after correcting the interface-name hint resource and cleaning regenerable build caches; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-name-hint-fix
2026-09-21 23:56:29 +08:00
Silent1566
5f043081ca
fix: adapt TV interface dialogs
...
Verification: InterfaceEntryInteractionTest passed with 7 tests, 0 failures, and 0 errors; leanback arm64-v8a debug Java compilation passed; BUILD SUCCESSFUL in 45s with 98 actionable tasks; TV interface list and edit dialogs now adapt to screen width and height; the list exposes the add button; the edit dialog supports modifying and saving the interface name; git diff --check passed; task_guard check passed
Task-Guard: leanback-interface-dialog-adaptive-layout
2026-09-21 23:35:57 +08:00
Silent1566
65b27e395f
fix: persist history line binding immediately
...
Verification: VideoActivityLayoutTest passed; mobile and leanback arm64-v8a debug Java compilation passed; BUILD SUCCESSFUL in 58s with 98 actionable tasks; both players now persist sourceBindingKey immediately through syncHistory after selecting a playback line; git diff --check passed; task_guard check passed
Task-Guard: history-flag-binding-save
2026-09-21 22:28:34 +08:00
Silent1566
5bdd9372e3
fix: persist history interface binding
...
Verification: StableInterfaceIdentityAcceptanceTest, PlaybackProgressWriterEpisodeTest, and HistoryResumePayloadTest passed; mobile and leanback arm64-v8a debug Java compilation passed; BUILD SUCCESSFUL in 1m 39s with 98 actionable tasks; History.sourceBindingKey is persisted through Room migration 46 to 47; generated Room schema 47 is included; git diff --check passed; task_guard check passed
Task-Guard: history-source-binding-persistence
2026-09-21 21:23:16 +08:00
Silent1566
04e996e50c
fix: explain protected current interface deletion
...
Verification: InterfaceEntryInteractionTest and ConfigHistoryCurrentSourceGuardTest passed with 0 failures; mobile and leanback arm64-v8a debug Java compilation passed; mobile arm64-v8a Debug APK built successfully and installed with overlay installation on 192.168.50.3:5561; clean relaunch verified app remains responsive; runtime UI verified current source 嗷呜 remains visible, its use action is disabled, edit remains available, delete remains visible with protected-current feedback behavior, and add remains available; git diff --check passed; task_guard check passed
Task-Guard: interface-current-delete-feedback
2026-09-21 20:33:15 +08:00
Silent1566
44ac882d6a
fix: protect current interface actions
...
Verification: InterfaceEntryInteractionTest and ConfigHistoryCurrentSourceGuardTest passed; mobile and leanback arm64-v8a debug Java compilation passed; mobile arm64-v8a Debug APK built and installed with adb install -r on 192.168.50.3:5561; runtime UI verified current source 嗷呜 remains visible with disabled use text and hidden delete action while edit remains available; git diff --check; task_guard check
Task-Guard: interface-current-source-actions
2026-09-21 18:51:59 +08:00
Silent1566
73b046cc07
fix: persist backup addresses for new interfaces
...
Verification: InterfaceEntryInteractionTest passed; mobile and leanback arm64-v8a debug Java compilation passed; mobile arm64-v8a Debug APK built and installed with adb install -r on 192.168.50.3:5561; new interface test autobackup persisted urlsJson=["http://primary.test.invalid ","backup.test.invalid"] and reopened with backup address visible; temporary test configs removed; git diff --check; task_guard check
Task-Guard: interface-new-backup-persistence
2026-09-21 18:28:55 +08:00
Silent1566
46d3e74898
feat: separate interface list add and edit actions
...
Verification: InterfaceEntryInteractionTest passed; mobile and leanback arm64-v8a debug Java compilation passed; mobile arm64-v8a Debug APK built successfully; APK installed with adb install -r on 192.168.50.3:5561; runtime UI verified that the VOD interface manager lists all configs and exposes explicit edit, delete, and add actions; git diff --check passed; task_guard check passed
Task-Guard: interface-config-list-interaction
2026-09-21 16:15:18 +08:00
Silent1566
327ac86f86
fix: retain saved backup addresses for dialog reopen
...
Verification: ConfigDialogNamePersistenceTest passed; mobile and leanback arm64 debug Java compilation passed; BUILD SUCCESSFUL in 33s, 98 actionable tasks; git diff --check; task_guard check
Task-Guard: interface-address-reopen-prefill
2026-09-21 13:16:14 +08:00
Silent1566
a8e6949e9c
fix: localize interface backup address hint
...
Verification: 简体中文和繁体中文均已补充 dialog_config_addresses;mobile/leanback arm64 debug 资源处理成功;BUILD SUCCESSFUL in 27s;git diff --check;task_guard check
Task-Guard: interface-address-localization
2026-09-21 12:03:21 +08:00
Silent1566
6064be078b
test: cover stable interface identity acceptance
...
Verification: StableInterfaceIdentityAcceptanceTest passed for mobile and leanback arm64 debug variants; BUILD SUCCESSFUL in 42s, 114 actionable tasks; git diff --check; task_guard check
Task-Guard: interface-stable-identity-acceptance-tests
2026-09-21 11:29:11 +08:00
Silent1566
4d211e6188
feat: add interface backup address editor
...
Verification: ConfigDialogNamePersistenceTest passed; mobile and leanback arm64 debug Java compilation passed; BUILD SUCCESSFUL in 58s, 98 actionable tasks; git diff --check; task_guard check
Task-Guard: interface-stable-address-ui
2026-09-21 11:13:42 +08:00
Silent1566
bc2ce54d2f
fix: preserve config identity during backup restore
...
Verification: git diff --check; task_guard check; mobile and leanback arm64 debug Java compilation => BUILD SUCCESSFUL in 39s, 58 actionable tasks
Task-Guard: interface-stable-identity-completion
2026-09-21 10:28:25 +08:00
Silent1566
eb76ab8a82
feat: add stable interface identity and failover addresses
...
Verification: git diff --check; task_guard check; ./gradlew --no-daemon :app:compileMobileArm64_v8aDebugJavaWithJavac :app:compileLeanbackArm64_v8aDebugJavaWithJavac :app:testMobileArm64_v8aDebugUnitTest :app:testLeanbackArm64_v8aDebugUnitTest --stacktrace => BUILD SUCCESSFUL in 1m 34s, 114 actionable tasks
Task-Guard: interface-stable-identity
2026-09-21 09:55:39 +08:00
Silent1566
c5593731c1
docs: assess stable interface identity design
...
Verification: 文档共351行;git diff --check通过;章节结构和最终建议已核验;task_guard check通过
Task-Guard: INTERFACE-IDENTITY-1
2026-09-20 23:45:01 +08:00
Silent1566
1edbc9b9c9
Merge latest origin/beta into dev1
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --offline --tests com.fongmi.android.tv.ui.activity.TmdbDetailActivityLayoutTest --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 38s)
Task-Guard: beta-sync-review-dev1-20260917
2026-09-17 19:26:33 +08:00
Silent1566
adaff1abee
Merge origin/beta into dev1
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --offline --rerun-tasks --tests com.fongmi.android.tv.ui.detail.* --tests com.fongmi.android.tv.ui.activity.TmdbDetailActivityLayoutTest --tests com.fongmi.android.tv.ui.activity.VideoActivityHistoryTitleTest --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 1m 14s)
Task-Guard: beta-sync-review-dev1-20260917
2026-09-17 19:12:55 +08:00
Silent1566
24f97cbaa1
fix(detail): initialize mode controller before view setup
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.detail.* --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 42s)
Task-Guard: tmdb-detail-controller-init-order-null
2026-09-17 16:32:24 +08:00
Silent1566
9f51d9ab9c
fix(detail): guard early lifecycle theme mode
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 35s)
Task-Guard: tmdb-detail-controller-early-lifecycle-null
2026-09-17 16:14:52 +08:00
Silent1566
02f6377afc
test(detail): update controller regression assertions
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 1m 16s; 4425 tests, 1 skipped)
Task-Guard: tmdb-detail-controller-regression-tests
2026-09-17 15:29:04 +08:00
Silent1566
ba91aca4d8
refactor(detail): centralize TMDB mode decisions
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.detail.* --no-daemon --max-workers=1 --console=plain (BUILD SUCCESSFUL in 49s)
Task-Guard: tmdb-detail-mode-controller-phase4
2026-09-17 15:15:59 +08:00
Silent1566
48942fb4d0
test(detail): cover TMDB mode controllers
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.detail.* (BUILD SUCCESSFUL)
Task-Guard: tmdb-detail-mode-controller-tests
2026-09-17 14:43:59 +08:00
Silent1566
37eab07288
fix(player): preserve video-owned colors
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest --no-daemon --max-workers=1 (BUILD SUCCESSFUL in 39s)
Task-Guard: preserve-video-player-theme
2026-09-17 13:51:39 +08:00
Silent1566
85af02f1fc
fix(theme): scope custom highlight colors
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest --no-daemon --max-workers=1 (BUILD SUCCESSFUL in 47s)
Task-Guard: theme-highlight-scope
2026-09-17 13:28:31 +08:00
Silent1566
6504b98729
fix(player): use black shutter across mobile layouts
2026-09-16 19:12:43 +08:00
Silent1566
934c9669cf
fix(player): use black shutter for tmdb inline playback
...
Verification: ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest --no-daemon (BUILD SUCCESSFUL in 36s); git diff --check; task_guard check PASS
Task-Guard: fix-tmdb-player-white-shutter
2026-09-16 14:31:23 +08:00
Silent1566
86b46e5117
fix(theme): preserve colorful detail theme state
...
Verification: ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest --no-daemon (BUILD SUCCESSFUL); git diff --cached --check
Task-Guard: theme-highlight-player-overlay-scope
2026-09-16 13:24:16 +08:00
Silent1566
bd280278d8
Merge remote-tracking branch 'origin/beta' into dev1
2026-09-16 00:05:08 +08:00
Silent1566
297ece432a
fix(theme): preserve navigation default unchecked style
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest (BUILD SUCCESSFUL, 8 tests, 0 failures)
Task-Guard: nav-highlight-default-style
2026-09-15 23:49:08 +08:00
Silent1566
fe6d302918
fix(theme): restore default preset to reset semantics
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeResolverTest (BUILD SUCCESSFUL, 5 tests, 0 failures)
Task-Guard: theme-default-preset-reset
2026-09-15 23:20:13 +08:00
Silent1566
76882b51d0
test(theme): align episode highlight contract
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.ui.activity.VideoActivityLayoutTest(153 个测试,0 failures,0 errors,BUILD SUCCESSFUL);git diff --check 通过
Task-Guard: beta-sync-review-20260915
2026-09-15 20:27:48 +08:00
Silent1566
33b3dc1cbf
Merge remote-tracking branch 'origin/beta' into dev1
...
# Conflicts:
# app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java
# app/src/testMobile/java/com/fongmi/android/tv/ui/dialog/SiteDialogThemeSourceTest.java
2026-09-15 19:48:40 +08:00
Silent1566
7e4e4f887b
fix(theme): limit highlight selection to primary role
...
Verification: :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeResolverTest (BUILD SUCCESSFUL); git diff --check; task_guard check PASS
Task-Guard: theme-highlight-scope-consistency
2026-09-15 19:28:42 +08:00
Silent1566
b7a93d3094
fix(theme): guarantee bottom navigation contrast
...
Verification: ThemeControllerSourceTest BUILD SUCCESSFUL; assembleMobileArm64_v8aDebug BUILD SUCCESSFUL; APK installed on 192.168.50.3:5555; screenshot verified clearer unchecked navigation icons
Task-Guard: theme-bottom-nav-contrast-followup
2026-09-15 16:09:34 +08:00
Silent1566
8a6b331f5f
fix(theme): improve bottom navigation contrast
...
Verification: bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest passed; git diff --check passed
Task-Guard: theme-bottom-nav-contrast
2026-09-15 13:40:25 +08:00
Silent1566
353d187825
fix(theme): limit accent fill to primary buttons
...
Verification: bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest passed; git diff --check passed
Task-Guard: theme-button-accent-contrast
2026-09-15 13:33:07 +08:00
Silent1566
a158c8c732
fix(theme): keep reset theme switch enabled
...
Verification: bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest passed; git diff --check passed
Task-Guard: theme-reset-native-default
2026-09-15 12:48:02 +08:00
Silent1566
c872cee68c
fix(theme): reset colors and add picker presets
...
Verification: bash ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests com.fongmi.android.tv.theme.ThemeControllerSourceTest passed; git diff --check passed
Task-Guard: theme-editor-reset-color-picker
2026-09-15 12:36:17 +08:00
Silent1566
a27f164aa3
fix(theme): expose master switch in mobile editor
...
Verification: ThemeControllerSourceTest passed; mobile Java/resource compilation passed; Gradle daemons stopped; available memory 3.5 GiB
Task-Guard: theme-color-switch-ui-20260915
2026-09-15 11:49:38 +08:00
Silent1566
3c3885256a
fix(theme): fall back to current theme when master switch is off
...
Verification: ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests 'com.fongmi.android.tv.ui.dialog.SiteDialogThemeSourceTest' --no-daemon --console=plain; ./gradlew :app:compileMobileArm64_v8aDebugJavaWithJavac --no-daemon --console=plain
Task-Guard: site-dialog-off-fallback-20260915
2026-09-15 11:09:35 +08:00
Silent1566
8523d049e2
feat(theme): add master switch for theme colors, default off
...
Verification: ./gradlew :app:testMobileArm64_v8aDebugUnitTest --tests 'com.fongmi.android.tv.theme.*' --no-daemon --console=plain
Task-Guard: theme-color-switch-off-20260914
2026-09-15 00:10:43 +08:00
Silent1566
0503f8e3cf
feat(theme): restore dynamic theme color system from validated history
...
Verification: Mobile/Leanback Arm64 Java compilation passed; Mobile theme-related JVM tests passed (13 classes, 59 tests, 0 failures); Leanback theme-related JVM tests passed (4 classes, 13 tests, 0 failures); git diff --check and task_guard check passed
Task-Guard: theme-revival-20260914
2026-09-14 21:44:22 +08:00