Skip to content

feat(mobile): 复用电脑订阅授权并新增额度小组件(iOS优先) - #5252

Open
FicoHub wants to merge 39 commits into
makecindy:mainfrom
FicoHub:cindy/sweet-bohr
Open

FicoHub wants to merge 39 commits into
makecindy:mainfrom
FicoHub:cindy/sweet-bohr

Conversation

@FicoHub

@FicoHub FicoHub commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

手机选择已连接的电脑后,复用 Cindy 已有 Claude / Codex / Grok 授权,将脱敏订阅额度快照交给桌面小组件。Widget 不另配供应商授权,不保存 token、邮箱、providerId 或账号指纹。

正式待审。当前 head 9436de8d4725e0008ed7fa10c50e51bc88ec52a6 已合入 main a9a1ebc1a262e05e90912fed7a68d47279a55ba6。唯一台账生成区冲突按脚本重建、人工区不变。970项定向测试、Mobile类型检查、台账/资源/diff/DCO通过。小组件源码未改;新head完整CI待结果,#5401及最新原生验收门仍待,未合并发布。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • docs / test 验收与契约验证

范围

  • 关联需求:用户原创双端订阅额度桌面小组件。
  • 设置入口、既有 device-link 只读同步、v2 脱敏快照、逐窗口源观测时间,以及账号/设备切换的迟到响应隔离。
  • iOS AppGroup / WidgetKit / config plugin:三张独立 small 卡和最多两家 medium 组合卡。
  • Android RemoteViews:共享圆环/真实品牌图标/计划/额度/Extra resets,宽布局两列,窄布局纵向排列;空间不足提示放大,支持系统字体缩放。
  • Claude 主动读取与 SDK 增量保持逐窗口 observedAt;Codex 正式 control 响应观测时间与旧缓存源时间分开。模型专属桶不冒充总额度。
  • 前台事件触发、60秒兜底;后台及 Widget 不主动请求供应商。系统 timeline / Android 30分钟调度只是缓存重绘,不保证源数据或系统准时刷新。
  • 停止共享/退出清理缓存并刷新全部 widget kinds;无新 OAuth、服务器、后台保活或付费模型探测。
  • 不包含历史宿主模拟器补丁、海量旧设计、生产签名或发布。Grok 无真实账号实测。
  • Breaking change:旧 v2 快照保持可读;原生模块新增需要冷更,不向旧原生包推不兼容 OTA。

UI 变化

  • 引用的设计规范:docs/design-rules/DESIGN.md §2 Color Palette & Roles、§3 Typography Rules、§4 Cards & Containers / Usage data graphics;apps/mobile/docs/mobile-design-guide.md §3。生成资源复用 feature-local quotaWidgetTokens 与既有翻译源,不增加平行主题系统;Light/Dark 均实现并有原生截图。
  • 用户确认 Extra resets 版为基线。共享环42pt/dp、线宽4.5;品牌/计划12;medium 周百分比32,次级及倒计时14,三行共用左边缘/基线。Codex Weekly 复用 Claude 5h 的 quotaSession 色,第三行 Extra resets,不再重复 Reset。时长 d/h/m、5h 小写。
  • Android 原生文本层补齐共享外观与响应式布局;本轮 iOS SwiftUI/确认视觉文件无改动。字体放大时按实际空间调整显示数量,仅有足够余量时提示 Enlarge for all,不缩字或省略号伪装通过。
  • 计划只展示可靠返回;仅返回 Pro 不推断 Pro $100/$200/$500,unknown 隐藏。
  • 正式 account/rateLimits/read 的 rateLimitResetCredits.availableCount 映射为剩余次数。未知/非法/过期显示—,确证0显示0;不从credits余额、明细数组或reset倒计时推断,不调用消耗reset接口。

Android紧凑横卡白天,模拟器合成数据
Android紧凑横卡深夜,模拟器合成数据

以上为真实 AOSP Launcher AppWidget 完整桌面截图,数据为隔离fixture,非浏览器渲染、非物理真机或真实账号。正式Cindy包另从系统选择器添加并验证空态同尺寸。旧近景不再代表本轮布局。

既有 iOS 合成数据证据(确认布局未改):Air Light / Air Dark。18 Pro 真实账号图片仅在任务本地交付,未公开上传。

怎么验证的

2026-10-12 06时主干同步(9436de8d4)

  • 普通merge最新main a9a1ebc1a262e05e90912fed7a68d47279a55ba6(比交接时8fae70274更新);仅台账GENERATED区冲突,用生成器重建,人工区逐字不变。
  • Mobile小组件四套、传输、消息分页/图库/会话恢复等16套测试793 passed;上游ensure-deps/restart-desktop-remote/test-workspaces脚本测试177 passed,合计970项。
  • Mobile typecheck、53个surface台账、widget生成资源、diff及DCO通过。Desktop/maker-core/shared生产源码无本轮变化,未重复其上一head已通过的类型检查;完整回归交远端CI。
  • 未修改确认视觉/原生widget源码,未操作登录与设备,未重做原生构建/实机验收;历史证据不冒充当前head。新CI待结果,由既有巡检接续。

2026-10-12 主干同步(00c41f0e5)

  • 普通merge main 28978ce117b6297e6aba68722b47ed17ab20dd50,唯一台账GENERATED区冲突以生成器重建,人工区逐字不变。
  • Codex index/translator/token-speed:1115 passed,既有11 skipped;Mobile widget四套及历史预取/恢复相关:375 passed,合计1490 passed。未新增skip或弱化断言。
  • Desktop/Mobile typecheck、maker-core/maker-shared build(tsc --noEmit)、53个surface台账、widget生成资源、术语及DCO检查通过。术语检查有18处既有proposed告警,不阻断。
  • 自动合并的_layout同时保留QuotaWidgetBridge和上游RemoteHistoryPrefetchBridge;Codex套餐读取/账号隔离逻辑保持。未修改widget原生源码/确认视觉。
  • 合并相对旧head的diff检查发现上游usageFormat.ts:75末尾空行;已在旧head→origin/main差异中同样复现,PR相对main检查通过,未改无关文件。
  • 本轮未重新构建原生App或执行设备验收,历史截图不替代当前head验收;新CI结果待远端,继续由既有巡检跟进。

2026-10-11 主干同步(8cbebc473)

  • 普通 merge main 74e2559899050f6adc72d4718ccbbe947ff25e59;唯一冲突 docs/design-rules/design-inventory.md 的 GENERATED 区用 pnpm design:inventory 重建,人工区逐字比对一致。
  • Mobile 176项(其中widget四套79项)、maker-core能力路由/审批策略161项、Desktop能力路由9项:合计346项通过。
  • Desktop/Mobile typecheck、maker-core tsc --noEmit、53个surface台账检查、widget生成资源检查、diff检查及DCO通过。
  • 本次没有修改widget原生实现或重新运行原生设备验收;历史截图/构建不代表当前head已原生验收。新head完整CI待远端结果。
  • 上一head d0eaf5746 的CI run38141767482仅Linux第二片groupRelay ENOTEMPTY失败,归因见既有PR评论(test(remote-agent): groupRelay 用例清理临时目录时重试,避免与后台写入竞态 #5776);本轮通过真实主干同步产生新head,未重复评论或空提交重跑。

主干台账同步:2026-10-11 21:00轮(head d0eaf5746a7adf0c35d0b58414aa3d463d1565f6)

  • 普通merge合入main 1551413ef637db991389b461cf06a3b891624309。唯一冲突为design-inventory GENERATED区,用脚本重建53个surface并check通过,人工区逐字未变,未改合并配置。
  • Mobile小组件四套79项、messageScroll65项、remoteSessionStore284项,共428项通过。Desktop/Mobile typecheck、台账check、原生生成资源check、diff及DCO通过。
  • 本次保留主干手机消息缓存/滚动及其他生产改动,确认小组件视图/控制器未改;.build/和旧品牌素材目录未处理。新head CI单次核对由原巡检接续,不空提交重跑。
  • #5401五类批准、最新原生构建和真机验收仍待;本轮未原生构建或设备操作,未合并发布。

主干手机入口同步:2026-10-11 19:00轮(head 7a01279f724d9792cf13d5cafdcf959678a1e700)

  • 普通merge合入main b021dc4b62a58f686664eb8b86dee08c87ee403c。唯一冲突为design-inventory GENERATED区,由pnpm design:inventory重建53个surface并check通过,人工区逐字不变;未修改.gitattributes或合并配置。
  • mobileMakerTransport测试与deviceLinkContract自动合并后验证:小组件四套79项、mobileMakerTransport50项、composerPluginTransport37项、deviceLinkContract9项,共175项通过。上游ghosts:composer-list与既有只读额度通道同时保留,没有新增本PR产品范围。
  • Desktop/Mobile typecheck、maker-shared/device-link build(tsc --noEmit)、台账check、生成资源check、diff及DCO通过。小组件生产视图/控制器未改;.build/与旧品牌素材目录未处理。
  • 新head完整CI单次核对交现有巡检;没有空提交重跑。#5401五类批准及最新原生构建/真机验收仍待,本轮未原生构建或设备操作、未合并发布。

主干契约同步:2026-10-11 18:00轮(head 2d7e95b2b2c8cc984a07727c1da3df023944dc36)

  • 普通merge合入main 9b200f938deaadf81d3c4a7e6d4f3bb60b610ab0。唯一冲突为design-inventory生成区,脚本重建53个surface并check通过,人工区逐字未变。
  • deviceLinkContract自动合入上游可选MobileCodexRateLimitResetCredit.resetOffer与MobileCodexRateLimitResetOffer.retryOnly,不改变小组件剩余次数映射。保留本PR既有只读usage通道增量,没有新增授权或实际消费reset。
  • 契约测试9项、Codex重置服务23项、Mobile小组件四套79项共111项通过。Desktop/Mobile typecheck、maker-shared/device-link build(tsc --noEmit)、台账check、原生生成资源check、diff/DCO检查通过。
  • 小组件确认稿、原生视图及控制器未改;.build/和旧品牌素材目录未处理。新head完整CI单次核对交原巡检,不空提交重跑。groupRelay/githubSetup线索本轮未验证,不提前作为CI归因。
  • 未原生构建或设备操作;#5401五类批准与最新原生构建/真机验收仍待。未合并发布或部署。

#5781落地后同步:2026-10-11 14:00轮(head c6c0385e06d5b47549870aaaf7f2ca6f3b1f1246)

  • 普通merge无冲突合入main 9e361df6da5478753282eef53bc854af8b39a1ce,包含9fb768f19的#5781及更新的手机消息展示修正。台账check通过、无需重生成。旧目录改道断言失败现已修复,不再等待test(remote-agent): 修复 main 单测——换位置守卫跟上组那一项留在当前电脑的分支 #5781。
  • remoteAgentRelocationWiring.test.ts 14项全部通过(上一head本地13通过/1失败)。Mobile小组件四套与上游六套消息展示测试共346项通过;Desktop/Mobile typecheck、台账/生成资源/diff/DCO检查通过。本次没有放宽断言或重复实现修复。
  • groupRelay清理与Windows githubSetup仅为协调方提示,本轮未复现,不能预先用作新CI失败归因。新headCI由正常push触发,单次核验交现有巡检,不空提交、不重跑旧job。
  • .build/及旧品牌素材目录未处理;确认小组件视图/控制器未改。#5401五类批准、最新原生构建/真机验收仍待,未构建或操作原生设备、未合并发布。

主干同步:2026-10-11 13:00轮(head b57f46bd18637506f977d61ba4f470f7d41a8874)

  • 普通merge合入main f3c263a36651dd900cc4c4dbd4130d4f77f7af13,唯一冲突为design-inventory GENERATED区,脚本生成53个surface并check通过,人工区逐字不变。Codex源码/测试自动合并后额度与套餐行为回归通过,小组件确认稿未改。
  • Mobile小组件四套79项、Codex额度/套餐26项通过;Desktop/Mobile typecheck、maker-core build(tsc --noEmit)、台账check、生成资源check、diff check、DCO通过。
  • 额外复现remoteAgentRelocationWiring.test.ts:13通过、1失败,旧断言期待relocate!({ ...row, agentDevice: remoteBrowseDevice }),实际main已采用分支调用。测试及ModelSelector.tsx与main完全一致,PR无该两文件增量。修复#5781仍OPEN(head5382a8fa),仅改该测试的断言;本PR不重复实现、不放宽测试、不空提交重跑。
  • Windows githubSetup仅为协调方提供的已知线索,本轮未复现,不能提前据此解释新CI。新head结果待既有巡检核验。.build/与历史品牌素材目录未处理;本轮日志另存临时任务目录。
  • #5401五类批准、最新原生构建及真机验收仍待。本轮无原生构建/设备操作、合并或发布。

主干同步:2026-10-11 07:00轮(head 0c90ed706a3207b84580f131217df881e4ea7196)

  • 普通merge合入main 6393978d0f7f059f4414820441de0b7aeda86b3c,唯一内容冲突为design-inventory GENERATED区。pnpm design:inventory重建53个surface,check通过,人工区逐字不变。Codex源码/测试及术语文件自动合并,小组件确认稿与原生视图未改。
  • Mobile小组件四套79项、Codex account/rateLimits/account/read套餐相关26项(另1002按名称未选)、术语规则71项通过;Desktop typecheck使用主干12GB配置,Mobile typecheck、maker-core build(tsc --noEmit)均通过。
  • 台账、生成资源、术语及diff检查通过;术语18条proposed告警保留,无新增违规。DCO通过,旧未跟踪材料完整保留。
  • 未重复原生构建或设备验收,历史证据不冒充新head;完整CI结果由既有巡检接续,#5401五类批准及原生/真机门仍待。无合并发布、账号或设备状态操作。

主干同步:2026-10-10 15:00轮(head f74984bd867b8d6b2b4c9c502062410bcb6183dc)

  • 普通merge合入main f78ba734d534012046387e3b47667012cf35d068。唯一冲突为design-inventory GENERATED区,用pnpm design:inventory生成并check通过(53 surfaces),人工区逐字不变。小组件生产视图、控制器、已确认排版未改,历史未跟踪材料核对保留。
  • Desktop codexRateLimitReset/claudeSubscriptionUsageRefresh/xaiSubscriptionUsageRefresh/dispatchMakerEventBatch/dispatchSendSafety五套182项、Mobile quotaWidgetNativePlugin/Bridge/Snapshot/Controller四套79项通过。Desktop/Mobile typecheck、原生资源check、设计台账check、diff check及DCO通过。
  • 本次追加device-link回归覆盖主干连接链路更新,不重跑无变化原生构建或设备流程。新head CI由push触发,单次核验后交既有巡检,不循环poll。#5401五类批准、最新原生构建/真机验收边界不变。

主干同步:2026-10-10 05:00轮(head 7940ae4b67f3e14410837f20a117618d5de921cb)

  • 普通merge合入60a04e48de1ea1c7a37cdabcd267d2ca64aa03bb(fix(mobile): 移除回复下方重复的生成中提示 #5700),未重写分支。仅design-inventory GENERATED区冲突,由pnpm design:inventory生成53个surface,人工区逐字核对未变。保留上游移除重复生成提示的行为,小组件确认稿及生产视图不变。
  • Mobile小组件四套79项 + messageActions 11项、maker-shared messagePresentation 14项,共104项通过;Desktop/Mobile typecheck、maker-shared build(tsc --noEmit)、台账check、原生生成资源check、diff check、DCO通过。
  • 未重复上轮不变的Desktop业务测试、原生构建或设备验收;旧未跟踪素材保留。新head完整CI待结果,由既有巡检接续;#5401五类批准与最新原生构建/真机验收门不变。

主干同步:2026-10-10(head a728574df494dc992e47ca68df26db75bc25238d)

  • 普通merge合入main bb1b1dc13bfcf23d4ef6945ad83f068e0224168b,唯一内容冲突为docs/design-rules/design-inventory.md的GENERATED区;用pnpm design:inventory生成53个surface,人工区逐字核对未变。agent-island测试、GLOSSARY及glossary.json自动合并后通过针对验证;小组件控制器/原生视图未改。
  • 上游锁文件新增两项依赖补丁,执行pnpm install --frozen-lockfile --prefer-offline --ignore-scripts成功(仅本工作树;不运行安装脚本或升级runtime)。此准备不代表原生App重建。
  • Desktop PI runner/Orca/agent-island三套172项、Mobile小组件四套79项、台账生成器52项、术语规则71项通过;Desktop/Mobile typecheck、设计台账、原生生成资源、术语检查及DCO通过。术语检查保留18条proposed告警,无新增违规。
  • 本PR相对main的diff --check通过;整个合并相对旧HEAD的检查发现上游sessionMenu尾部空行和依赖patch空白,核实这些文件与main完全一致,保留上游内容,不改无关patch。
  • 新head完整CI待结果,由既有巡检接续。本轮未原生构建或设备测试;#5401五类批准、最新原生构建及真机验收门保留。旧未跟踪素材均保留,未公开真实账号材料、未操作登录/网络、未合并发布。

主干隔离修正已同步:2026-10-09(head 351a9ca0259daacd7db2e1e59f0c3ea5698dec88)

  • 普通merge合入main ebf0c1604eb3ff91b747e5c17edcd625eadec74b,无冲突。主干 861831267904e3e054e0e072e46128164224690c(fix(media): 修复 Mermaid 图表复制与聊天图片菜单 #5643)已mock PI runner测试里的spawnSync/process.kill,覆盖Windows taskkill成功、失败回退及其他平台。旧run37909405755对应隔离缺陷已同步修正,不再以#4635尚未合入作为等待项,未复制另一PR或空提交触发重跑。
  • pnpm --filter desktop exec vitest run src/main/cindy-brain/__tests__/piSubagentRunnerHost.test.ts src/renderer/__tests__/newMakerOrcaCreateOrder.test.ts:30通过。
  • Mobile quotaWidgetNativePlugin/Bridge/Snapshot/Controller四套:79通过。Codex index.test.ts按额度/套餐读取名称定向:26通过、995未选,不冒充全量。
  • Desktop/Mobile typecheck、maker-core build(tsc --noEmit)、check:design-inventory(53 surfaces)、generate-quota-widget-resources --check、diff检查与DCO通过。小组件生产视图/确认设计未改,历史未跟踪材料保留。
  • 新head完整CI由正常push触发,结果单次核对后由既有监控跟进。本轮没有运行原生构建或设备测试;历史原生证据不冒充本head。#5401五类批准与最新原生/实体机验收仍待。

CI结果补充:2026-10-09,head 4511a0e22

run 37909405755已结束:Linux两片、Windows第2片、Git integration、DCO通过;Windows第1片唯一测试失败为 piSubagentRunnerHost.test.ts:121,SIGTERM断言期望process.kill(2468),调用数为0。Windows汇总随之失败;其他verify检查虽通过,不能据此声称全部CI通过。

核对源码可确认测试未mock spawnSync:win32先执行真实taskkill,成功时直接返回true,不经过process.kill。PR三点diff未改此实现与测试。这是已由 #4632 / #4635 处理的测试隔离缺陷;日志没有记录PID对应进程,不声称查明它的身份。#4635 head 2732540b93955b4f733886b710ee328bff10e53f 仅改该测试并隔离taskkill/process.kill,读回11项检查均成功,尚OPEN并受#4636批准门约束。当时由原执行会话继续,本PR没有重复修复或重跑;现主干已通过861831267落地等效修正,本PR已同步,见上方最新记录。

前一head的maker-core malformed-mailbox返回0/EBUSY在本run未复现,仍未归因,不能算被此次修复。#5401五类批准、最新原生构建与设备验收边界不变。

主干同步与 Windows 失败核验:2026-10-09(head 4511a0e22bdc31c3d96fc352200f602a91cd8b3c)

  • 合入 main a152497ac24d155dd46142b73dda4fa10ad08ad0,仅两处冲突:newMakerOrcaCreateOrder.test.ts 采用上游 c4fe94bee 更严格的 agentCatalogProviders 来源断言;design-inventory.md 用 pnpm design:inventory 重新生成,53个surface、人工区保留。上游 iOS action sheet 修正原样保留,小组件确认稿未改。
  • 定向验证:Desktop Orca 21项、Mobile iosChromeActionMenu/showActionMenu 13项通过;Desktop/Mobile typecheck、check:design-inventory、DCO与diff检查通过。PI mailbox目标用例macOS 1项通过(其余41项按名称过滤),不代表Windows通过或证明flake。此次未重跑历史全量及原生构建。
  • 旧head 68ac3a2f5 的 CI 37904242538 唯一失败在 Windows unit tests (1/2):PI malformed-mailbox用例投递返回0(期望1),随后临时目录清理EBUSY。PR与main该PI目录无差异;返回0有多种路径,日志未给出具体分支,故不归因flake、也不改PI或放宽测试。日志中的 termination unconfirmed 来自另两个Maker负向测试,不属于该失败用例。新合并提交正常触发完整CI,不空提交、不重跑旧job。
  • 旧审查要求已在 ed43411b217abc5e1a9e53c0e5fdb128cf9c0661 修复:三条审查修复与验证。包含修复前清理失败2例/Android容量失败证据、修复后Mobile79项/Android JVM11项/隔离原生43项及Android构建。356×164边界为契约测试,Launcher截图另为5×2实际分配382×289dp,不混称;均为该历史head证据,不冒充本head原生验收。
  • #5401现仍OPEN,维护者明确“有条件继续审阅,不直接批准合并”。security/coldUpdate/arch/product/rules五类批准未完成;作者还需最新head原生构建与设备证据、发布签名准备,实体机/OEM、第二真实账号、Duo与Grok未验证边界保留。真实账号材料不公开上传,无重复催审评论。

CI确定性断言修复:2026-10-09 / 68ac3a2

  • 原run37900201707 attempt1,Linux2/Windows2同一失败:newMakerOrcaCreateOrder.test.ts:229,预期匹配2处实际0。verify/Windows汇总仅聚合失败。Mobile及其他片通过;本PR台账检查通过。
  • main run37881554189同样失败;main fa2ea01b6尚无后续修复。上游9fb59bb93把执行端目录改为agentCatalogProviders,旧测试仍匹配deviceProviders。不是flake,不靠重跑或超时修饰解决。
  • 只更新测试的正式目录参数并增加目录来源过滤断言,保留远程两条/本机SSH三条/普通一条的数量约束;未改协同或widget生产行为。
  • 本地修复前21项中1失败;修复后Orca创建顺序21、远程接线12、项目选择91、远程模型rail运行测试4,共128通过。Desktop typecheck、diff和DCO通过。未重复刚通过的widget原生验证/2829项。
  • 新CI由push触发,仅查询一次,后续沿既有监控;未发重复审查评论。3个Greptile线程已解决,现有reviews无维护者Approve。

#5401放行责任(当前仍待)

确认门 已提交依据 下一步
product 用户确认布局、每供应商当前单账号、复用已有授权 维护者明确首版范围与未验收项接受标准
security snapshot字段白名单、epoch隔离、清理重试及回归 维护者审阅实际数据流;旧“13处”扫描需精确定位,不能视为13个已证漏洞或自动通过
rules 台账正规生成、人工区保留与幂等测试 维护者确认没有更改判据/豁免
coldUpdate 原生模块与WidgetKit目录已进入fingerprint 指定把关人批准冷更;实施/发布方补最新原生重建、指纹和扩展签名/安装证据
arch 已有device-link只读投影、凭据留宿主、OS脱敏缓存 维护者批准此跨端增量与数据流

合并需新head required CI与上述明确Approve;发布另需完整原生重建/渠道签名和安装验收,quota plugin目前没有EAS appExtensions签名元数据。Duo/Grok真实账号/实体Android OEM/第二真实Cindy身份等边界由维护者裁定首版范围,实施方在批准范围内补测。历史原生证据不冒称当前head重建。

主干同步:2026-10-09 / 5f985e5

  • 固定main fa2ea01b6c77053fc8b78f2edd94337916e8a0f9;merge commit 5f985e5ab47e7b4525a0ab011c623a917f8c384c。
  • 两处真实冲突:AgentIsland测试采用上游mock初始化后的beforeEach预加载,保留5000ms行为预算,去除已冗余的20秒例外;design-inventory按合并后源码正规生成,人工区双方行均保留、重复生成字节一致。
  • 自动合并后的Claude/xAI额度通道各重复一次;唯一性断言先复现122项/120唯一,去重后通过。允许的通道集合不变,上游路由与Codex reset能力保留。
  • 定向验证:maker-shared 1461、Mobile小组件/transport 129、Codex agent 977(11条件跳过)、AgentIsland 139、设计台账52、术语契约71,合计2829通过。4包typecheck、生成资源--check、台账--check、PR diff whitespace及DCO通过。
  • related计划对合并暂存区上游package/lock变化保守扩大至整仓;本机采用上述等效影响面验证,未宣称本地整仓。旧9b75dce90 CI全绿不是新head结果;新CI由push触发,仅单次查询。
  • 小组件原生视图/tokens/同步实现相对原head无变化,未运行或重登设备;不把历史设备截图作为本轮新构建证据。原untracked素材/宿主备份未提交。[维护者确认] PR #5252 feat(mobile): 复用电脑订阅授权并新增额度小组件(iOS优先) #5401 product/security/rules/coldUpdate/arch五类确认门及原验收边界保持。

CI超时修复:2026-10-06 / 9b75dce

  • 原run 37417350792 attempt 1:Linux第二片 service.test.ts 的 headless publishing 用例在5000ms超时;verify仅跟随 LINUX_UNIT_SHARDS_RESULT=failure。其余Linux/Windows及Git integration通过。
  • 唯一await是首次动态import,后续广播断言同步。改为静态value import,使依赖冷加载发生在collection;未改生产实现、超时配置或断言。该模块修复前与所取main一致。
  • 受控实验临时给模块加载增加5500ms:修复前同样timeout,修复后collection约7.42s、行为测试5ms通过;诊断mock已删除。CI未记录import独立耗时,不能据此声称复现相同runner负载或将失败简单归为flake。
  • 无诊断mock的完整定向测试139/139通过,目标约3.14ms;Desktop typecheck、diff与DCO检查通过。本轮未重跑设备验收/整仓测试,不把前一head的1221项当作本轮结果。
  • 正常push触发新CI;不盲重跑旧run或循环poll。原生确认稿、真实登录与缓存、未跟踪备份均保持。

主干同步与冲突处理:2026-10-06(head 27f807cd9692c7baa846658edb8fbb8d3bcf1751)

  • base 84ab23f699c05969299f4ad042db727068c0287a。唯一文本冲突 docs/design-rules/design-inventory.md 位于 GENERATED 区,按合并源码重新生成53个surface;人工区逐字保留,不整份ours/theirs。
  • 自动合并检查覆盖根布局Widget Bridge、Device Link只读频道、Codex正式额度/套餐读取与相关测试;上游修改保留。小组件原生模块、32/14、Weekly色、Extra resets和账号数据规则均无本轮修改。
  • Mobile128、Desktop57、Codex975(另11条件跳过)、共享协议9、设计台账52项通过;Mobile/Desktop/maker-core/maker-shared类型检查通过;原生资源check、台账check、术语门禁及DCO通过。术语门禁仅有18处既有proposed告警;相对最新main的PR diff check通过。上游四处EOF空行未夹带无关整理。
  • 上游已删除旧内嵌模拟器入口;两份本地历史补丁完整原文与unified patch在本任务未跟踪备份中保留,SHA-256核验一致,未把旧宿主补丁提交。本轮不操作模拟器、登录或真实缓存,不将旧设备证据称为新head原生复测。
  • 只处理feat(mobile): 复用电脑订阅授权并新增额度小组件(iOS优先) #5252,不改fix(bots): 接通电脑端远程伙伴设置入口 #4937。#5401及已有未验收项继续保留;新head CI待GitHub执行结果。

三条审查修复:2026-10-03(head ed43411b217abc5e1a9e53c0e5fdb128cf9c0661)

  • 合入 main 635a56a3974df6b6b5dfdcf5d8e14c2ff06f676b,没有覆盖历史宿主补丁或用户材料。
  • 停止共享失败保留重试入口;临时供应商失败只保留同owner/device/provider原观测;Android提示不再使356×164dp两列归零。用户确认32/14、Weekly颜色、Extra resets与iOS布局未改。
  • Mobile四套79通过、Android JVM11通过、壁纸16通过;Mobile/Desktop类型检查、生成资源check、DCO通过。完整Android debug arm64构建成功;隔离测试包Android native43项通过,Launcher三来源显示两列已目检。没有注入真实App缓存,未退出真实登录。
  • 旧run37093104897的Linux静态切换失败由main的a91d073f3测试修正覆盖;Windows档位切换断言也只等了新DOM,没有等旧资源被passive effect清理。本轮将旧src=null纳入waitFor,保留全部资源释放断言,不改墙纸生产实现、不延长超时,未盲重跑旧CI。
  • 原生截图含旧真实卡,仅本地保留、不公开上传。最新完整APK未替换已登录App,本轮不宣称真实端到端或iOS重新验收。
  • 本轮修复与验收记录。实体机/OEM、第二真实身份、Duo、新宿主套餐联调和#5401批准仍待;正式待审不是自动获准合并。

最新CI回归修复与主干同步:2026-10-03(head 4d065b299d79d14e280113bfe70c118145eba328)

  • 已合入实时取回的main 88e224475a6183f7b31218a7499be956a4bf2667。唯一冲突为生成设计台账,按合并后源码生成并校验;人工区与小组件入口保留。推送后读回PR为 OPEN / draft / MERGEABLE,不合并发布。
  • 本地修复前复现54312dc的CI报错:控制面租约测试响应为{},新增代码访问rateLimits.planType导致TypeError。生产路径新增必需额度结构校验,异常null/缺失/错误桶明确失败,不伪造成功额度;租约测试换成合法最小响应,原租约断言保留,另测异常路径释放租约。
  • 可选account/read缺失/null/未知/读取失败时保留此前成功额度;非法/未知套餐只能由同账号明确套餐补齐。额度RPC失败直接传播,不猜套餐、不触发登录或reset。
  • Codex整文件1020通过、11条件跳过;Mobile小组件四套66通过;Desktop额度相关与壁纸四套56通过。 maker-core build(tsc)、Mobile/Desktop typecheck、原生资源--check、设计台账--check、diff check及DCO通过。新增回归包含正常Plus/Pro、缺失/null/畸形额度与账号元数据、quota错误传播及租约释放。
  • 54312dc远端日志显示Windows2只失败Codex;Linux2还独立失败WallpaperVideo.test.tsx:61。壁纸组件/测试与main一致,本地16通过,未修改或弱化无关测试;不能认定远端壁纸问题已修复。
  • 新head只读一次CI快照:Actions run 37093104897,Linux/Windows四片、verify-checks、Desktop Git integration均QUEUED,DCO SUCCESS;未把旧head失败或旧全绿冒充新head结果,不循环poll。
  • 本轮未操作模拟器、登录、缓存或凭据。宿主套餐修复未部署到用户正在运行的Cindy,真实Plus/Pro显示仍待新宿主联调。上游合并含远程桌面iOS模块变化,未重建完整原生App,不把历史设备截图当当前head原生证据。
  • 历史未授权宿主补丁与旧设计保留且未纳入提交,真实账户截图仍不公开。PR继续等待CI、真实新宿主套餐验收及维护者设计/冷更把关。

Codex 套餐缺失与CI修正:2026-10-03(head 54312dc2d1c33d42343a00704f5ca46e9be9ae7c)

  • 真实正式额度响应中选中桶及账号 planType 均为unknown,UI按规则隐藏;没有把套餐裁掉,也没有猜Pro/Plus或美元档位。
  • 新增同一已选OAuth control host的只读 account/read {refreshToken:false} 回退:只补缺失/unknown套餐,保留明确桶套餐;2秒可选超时/失败不影响额度。只投影套餐,不读取认证文件、不向手机传额外身份、不消耗reset。手机层逐个识别后回退,修复字面unknown挡住有效账号套餐的问题。
  • 官方依据:https://learn.chatgpt.com/docs/app-server#authentication 。额度桶计划是可选,account/read另提供计划。
  • maker-core相关10项、mobile快照41项、原生plugin10项通过;maker-core tsc和Mobile typecheck、生成资源--check、diff check通过。此为61项针对回归,不冒充当前全量或真实套餐端到端。
  • 441466587的完整CI已返回:Linux2/Windows2均失败于五语言生成资源过期(quotaWidgetNativePlugin.test.ts),不是WallpaperVideo。现已从翻译正本同步Swift/Android生成资源并回归通过;未改壁纸实现或降低门禁。新head CI由本次push触发,未循环poll。
  • Android真实登录保留、诊断代码/弹窗移除、恢复原电脑live缓存。新增宿主读取尚未部署到运行中的Desktop,真实Plus/Pro显示仍待含本修复的宿主构建验收;不替换运行中的Cindy,不以fixture充当修复后的真实截图。
  • 本次无布局、型号或签名变更;生成文案属于原生资源输入。仍保留draft与原有冷更/设计把关要求。账户截图只本地保存。

Android断网/省电补充:2026-10-03 00:27 +0800

  • 仍为head 441466587a9f9ab1bcc14944d7e5bfc874e877f6,无新增生产代码或布局变化。专用API36 ARM64模拟器 com.xd.cindy,真实账号/生产缓存/Launcher,非fixture。
  • 已执行模拟器真实网络断开及恢复:仅专用AVD飞行模式+关闭Wi-Fi,默认网络为none;前后台离线缓存rows(包括源时间、reset、剩余值)完全保留。恢复默认网络和前台后正式control读数更新,源时间前进;没有断Mac/路由器或复制凭据。
  • 强制Doze+省电:实测deep IDLE/light OVERRIDE、省电开启,20秒观察窗口缓存逐字不变;退出后前台恢复online读取。测试后飞行0、Wi-Fi开启、蜂窝1、省电0、deep/light disabled(原值)、forceIdle=false/ACTIVE全部恢复。不是实体机/OEM或长时电量验收。
  • adb devices -l只有此AVD,无实体Android。正式Switch account列表仅有1个当前身份,无可切换第二身份;没有退出或添加账号。旧账号缓存/迟到响应/断链时间/后台隔离4项定向通过(另9项未选,不冒充全量)。两个不同真实账号测试仍未执行,前次来源电脑切换不算账号切换。
  • 已保存本地脱敏矩阵及离线/恢复完整桌面截图并目检,不公开真实账号材料。5×2宿主约382×289dp,可见卡约382×163dp。当前恢复原电脑live在线数据、保留登录。
  • 本轮开始一次性CI检查,新head单测仍执行中,DCO和Git integration已通过;未循环poll。维护者设计/冷更、签名准备和未验收设备/账号边界继续保留,PR仍draft。

Android添加说明与CI收尾:2026-10-03

  • 当前head 441466587a9f9ab1bcc14944d7e5bfc874e877f6。本次仅修正五语言 quotaWidget.addHintAndroid(settings.json):宽卡两列并排,窄卡按空间纵向排列或减少显示数量,可调整尺寸查看更多。没有改布局、原生模块、认证、源数据或iOS确认稿。
  • i18nCatalogParity.test.ts 20项、Mobile typecheck、check:i18n、check:i18n-glossary、本次diff whitespace检查均通过。保留既有i18n警告,未新增术语违规。DCO读回通过。
  • 推送后一次性检查:新head的Linux/Windows单测、verify-checks和Git integration正在执行;不沿用旧head结论,不循环poll。新运行自动由正常push触发,没有为旧head重复重跑。
  • 旧head 1af3a1a4a Linux第2片唯一失败在 WallpaperVideo.test.tsx:61:从DOM移除视频后立即断言src清空,实际仍为 /cindy-window.mp4。对应组件在被动effect cleanup中移除src,存在异步时序疑点,但未复现证明。实现和测试与实时main 949e08060 Git blob完全相同,且PR三点diff无这两文件改动;此前同head本地该套16/16通过。故记录为PR外共同代码的CI失败线索,不认定已证明主干CI失败或已修好,不修改/弱化无关墙纸测试。
  • 本轮未触碰模拟器或重做登录,真实Android数据仍是上一轮已验证的链路;所有真实截图仍仅本地交付。5×2宿主分配约382×289dp,可见卡片382×163dp,两者不可混称。
  • 仍保持draft:新head CI待结果、维护者冷更/设计批准及发布签名配置尚未完成;不同真实账号/设备断网/OEM省电/Duo/Grok边界不变。

Android真实账号续验:2026-10-03 00:00 +0800

代码head仍为 1af3a1a4a6173dc576221d950447ae797dce411e,本轮仅运行现有生产App和记录证据,未改布局/供应商认证、未重跑未变化的构建和单测。

  • 用户完成飞书扫码后已正式登录,沿正常登录UI恢复过期SSO浏览器事务;没有复制token/cookie或再次扫码。保留当前登录。
  • 完整 com.xd.cindy 选择已有电脑,正式 Claude/Codex control 投影→手机设置页→生产 noBackup 脱敏快照→AOSP Launcher AppWidget 验证完成。真实来源标为 live-source,不是fixture注入。
  • 正式来源数据与桌面数值/重置一致;Claude可靠计划展示,Codex计划未知则隐藏,Extra resets使用正式availableCount。回前台观察到真实额度改变和源观测时间推进;后台前后快照完全相同,未用重绘时间冒充源时间。
  • 两台已有来源电脑切换→恢复成功,保留各自源观测时间;停止共享删除生产快照,桌面旧值/品牌/计划清除;重新选择原电脑恢复online真实数据。没有退出Cindy账号或影响其他设备会话。
  • 原生紧凑5×2昼夜完整桌面逐张目检、三行基线核对、点击进入正式订阅设置页完成。主题经回前台同步;不声称后台主题即时更新。真实账号截图及脱敏阶段JSON仅任务本地交付,不公开上传账号材料。源码无改动,因此无新commit/构建号。
  • 这证明正式device-link投影/手机生产缓存/Launcher一致,未独立登录供应商官网再次取证。不同Cindy账号、物理断网、真实退出、OEM/实体机和长期省电未验;Grok无账号。
  • 本head最近一次CI:Linux第二片 WallpaperVideo.test.tsx 失败,Windows两片等通过。该文件不在PR改动中,本地定向16项通过但不能视作远端通过;未重复poll或改无关墙纸。

本轮尺寸修复:1af3a1a4a6173dc576221d950447ae797dce411e

  • 旧 minResizeHeight=184dp 令实际实例占三行,加上根布局 match_parent/center_vertical,卡片背景被拉到439dp。现在背景随内容,默认5×2;没有缩字体、裁截图或调整设备density。
  • 实测分配382.095×288.762dp(5×2),可见卡片382×163dp。透明宿主空间仍占桌面格子,不声称已释放。4×2仅303dp宽,不足以保持32/14sp双列;最小3×2显示一家并提示放大。
  • 长套餐与普通套餐共用46dp品牌区最小高度,三行基线一致。iOS确认UI未改。
  • 完整 :app:assembleDebug :cindy-quota-widget:testDebugUnitTest 成功(734 tasks;9 JVM tests),正式APK已安装且实际默认添加;隔离包38条设备内检查通过;Mobile native plugin 10项及Mobile typecheck通过;生成资源和diff检查通过。未重跑上轮63项或更早全量,下面均标为历史结果。
  • 额外dev-docs为9/10通过,唯一失败为未跟踪历史 docs/assets/quota-widget-art-study/references/widgets.md 引用缺失文件,未纳入PR、未删除旧稿或弱化检查。
  • 原生逐图目检默认日夜100%最长、0、unknown、长套餐、最小拖拽尺寸;字体尺寸未变。源文件哈希、截图哈希及布局量化见本轮记录。HTML仅作本地一页证据容器,不算原生运行证明。

上轮 Android 功能验证:25d443de351819700357a3b9522b29da8fcefcc9(历史结果)

./gradlew :app:assembleDebug :cindy-quota-widget:testDebugUnitTest \
  -PreactNativeArchitectures=arm64-v8a --no-daemon --max-workers=2
结果:BUILD SUCCESSFUL;734 tasks;7 JVM tests / 0 failures。

pnpm --filter mobile exec vitest run src/__tests__/quotaWidgetSnapshot.test.ts \
 src/__tests__/quotaWidgetController.test.ts src/__tests__/quotaWidgetNativePlugin.test.ts \
 src/__tests__/quotaWidgetBridge.test.ts
结果:63 passed。

pnpm --filter mobile run typecheck
node scripts/generate-quota-widget-resources.mjs --check
git diff --check
结果:通过。设计台账与术语检查通过。
  • 专用 AVD cindy-quota-api36 / emulator-5580,Pixel9 profile,API36 / Android16 ARM64,1080×2424px、420dpi,未 root。
  • 完整 com.xd.cindy debug APK 已安装启动真实登录页;系统 Widget picker 添加空态,点击返回真实 App 登录页。使用本 worktree 的 localhost:8088 Metro(专用 AVD reverse 8081→8088)。未登录,不称为真实数据链路验收。
  • 独立 org.cindy.quota.validation:38 条设备内契约检查通过,含三品牌 VectorDrawable 真加载、次数未知/0/整数、源时间、存储清空。日夜、100%最长、部分额度、0/unknown/stale/offline/unauthorized、缺计划/窗口、长套餐、横向缩放、字体1.3/2.0截图目检。实际代码与测试包复制文件逐字节一致。
  • 本轮发现并修复旧 Kotlin sanitizer 右括号缺失的真实编译错误;Android 对 SVG 相邻 arc flags 解析失败导致 Grok 空卡的问题以生成转换解决并设备回归;未授权隐藏旧窗口并显示 Reconnect。
  • 可复现测试包源码:tools/quota-widget-android-fixture/,仅 demo,不在生产 App 注入测试入口。完整构建、哈希与边界记录。

既有 iOS / 共享层证据(精确版本,不冒充本轮重跑)

  • 代码head 779bf7134:完整 Global iOS App+WidgetKit 强制重建退出0,当时指纹 5f8904917a99d0b4daf9a4c301dc18f35982e309;两台任务模拟器覆盖安装。18 Pro保留登录,通过深链/立即同步再次验证真实Claude/Codex源→手机→AppGroup→WidgetKit,small/medium日夜目检。Air没有账号,完整App登录/Widget空态/深链验证。
  • Xcode27.0/27A266a、iOS27.0,Air420×912pt、18 Pro402×874pt;均模拟器。停止共享/退出清理、源设备切换、SSO恢复有既有证据;本轮没有重复登出。
  • 合主干 a9eb56b95 后190项定向与Mobile/Desktop类型检查属于 779bf7134;179项复测与Swift契约属于文档head 03fa6b1d5。历史7745项属于eba687,不称为当前全量。
  • 本轮Android原生资源改变fingerprint输入,不能把此前iOS指纹数值当成本head的发布证明。

未执行的验证

  • Android真实账号登录/源同步/来源电脑切换/停止共享清空已跑;不同Cindy账号及真实退出本轮未跑。停止共享不等于登出,Offline fixture不等于物理断网。
  • 不同真实账号、实体手机/OEM Launcher/省电策略、长期系统刷新预算未完成。专用Android模拟器断网恢复及短时强制Doze已完成(见上方记录),不等于实体机通过。本轮已确认纵向三行缩至两行、两行下限及横向5列至3列再恢复;横屏和其他Launcher未验证。
  • Duo需27.1beta但本机没有对应runtime;Grok无真实账号。未购买账号或转移凭据。
  • 最新CI以本head检查为准;不循环poll,不把历史head全绿当成当前结论。

风险

风险分类

  • 协议兼容:既有只读投影;v2新增可选字段,旧快照可读,无新wire RPC。
  • 权限 / 用户数据:仅脱敏快照,源账号/设备响应隔离,撤权清理。
  • 原生层 / fingerprint / OTA:AppGroup、WidgetKit、原生模块/Android资源必须冷更;旧包不获得新原生能力。
  • 跨平台差异:Android按Launcher尺寸和系统字体响应;不声称全部厂商布局/后台行为等同iOS。

影响与回滚

回滚通过后续冷更移除入口/模块,不回退供应商认证或其他用户数据。已有用户需安装含原生扩展的新包;不单独推送不兼容OTA。本轮无生产签名、buildNumber变更、TestFlight上传或商店发布。

合并与发布门槛:本 PR 按用户要求提交正式评审。用户视觉确认和 Ready for review 均不替代仓库指定维护者的设计/冷更批准。CODEOWNERS 为 @makecindy/maintainers,具体放行人由维护者指派;目前尚无该批准,仍需必需 CI 通过和维护者审核后才能合并。发布负责人还需补齐选定通道的Widget扩展签名archive/export:当前quota plugin缺EAS appExtensions签名元数据,本地ExportOptions只列主App profile。eas.json存在testflight-global不等于已经能分发。实现者负责剩余账号/设备回归,维护者决定未验收范围是否阻断首版。

提交前检查

  • 已 review 完整本轮 diff,仅明确文件清单stage;历史宿主补丁和旧稿保留未提交。
  • 每个提交带匹配 author 的 DCO 签名。
  • UI规范与两主题证据已说明。
  • 未提交凭证、token、真实账号截图、SDK、APK或大批历史设计。
  • 已同步Android旧“未编译/文本兼容”结论,测试与未验收边界如实记录。

@FicoHub
FicoHub marked this pull request as ready for review October 3, 2026 03:33
@FicoHub
FicoHub requested a review from a team as a code owner October 3, 2026 03:33
@greptile-apps

greptile-apps Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 2/5

[High risk] Adds native widget modules and modifies subscription usage tracking.

暂不宜合并:停止共享后的快照清理及 Android 卡片容量计算需要先修正。

Findings

  1. P1 Security 停止共享后无法重试清理 ▶
  2. P1 空间提示挤掉额度卡片 ▶
  3. P2 暂时读取失败清空额度 ▶
Fix with agent prompt
### Issue 1
apps/mobile/src/widgets/quotaWidgetController.ts:72-75
如果用户停止共享时原生快照删除失败,这里仍会清除所选电脑并保存该状态。用户再次操作时,因为电脑已经是 `null`,代码会直接返回,无法重试删除;旧账号的额度可能继续显示在桌面小组件上。

**How this was verified:** 原生删除失败会报错,但控制器仍清除设备选择,之后的同值选择会直接返回。

### Issue 2
apps/mobile/modules/cindy-quota-widget/android/src/main/java/expo/modules/cindyquotawidget/QuotaWidgetPresentation.kt:24-28
三家供应商都有数据、宽卡尺寸为 356×164dp 时,原本能并排显示两张卡。第三张卡放不下会触发 20dp 的提示预留,重新计算后却连一张卡也放不下,结果只显示放大提示,两家本可显示的额度也消失了。

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

### Issue 3
apps/mobile/src/widgets/readWidgetQuota.ts:102
一家供应商的读取暂时失败时,这里会用空行代替其结果,随后整份新快照会覆盖此前保存的数据。即使其他供应商同步成功,失败那家尚未过期的额度也会立刻从设置页和小组件消失,而不是按原观测时间自然过期。暂时故障因此造成不必要的信息丢失。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary

此 PR 将电脑端现有订阅额度投影到手机,再写入 iOS WidgetKit 与 Android 桌面小组件,并增加设置入口、逐窗口观测时间和 Codex 套餐补充读取。

  • 需要处理停止共享时原生清理失败后的重试路径。
  • Android 部分尺寸下,第三家供应商的空间提示会挤掉本可显示的两家。
  • 单家供应商暂时读取失败会覆盖其仍有效的已保存额度。
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  D[已选电脑的订阅授权] --> L[设备链路只读额度]
  L --> P[手机脱敏快照]
  P --> I[iOS App Group 与 WidgetKit]
  P --> A[Android 本地快照与 RemoteViews]
  U[停止共享或切换账号] --> C[清除原生快照]
Loading

Reviews (1) · Last reviewed commit: "merge: 同步最新主干并修复 Codex 套餐空响应回归"

Comment thread apps/mobile/src/widgets/quotaWidgetController.ts
Comment thread apps/mobile/src/widgets/readWidgetQuota.ts
@MagicLizi

Copy link
Copy Markdown
Contributor

@FicoHub 👋 这个 PR 现在在等维护者确认,确认之前自动流程不会合并它。

  • 本次改动:feat(mobile) 复用电脑订阅授权并新增额度小组件(iOS 优先),head 4d065b299。
  • 为什么需要确认:同时命中 product / security / rules / coldUpdate / arch 五类确认门;其中安全敏感(危险写法 13 处,dynamic-eval / shell-string-exec)与 mobile 冷更(runtime fingerprint 输入改动、无 guard 结论)两类不接受语义豁免,必须由维护者明确确认。
  • 讨论 issue:[维护者确认] PR #5252 feat(mobile): 复用电脑订阅授权并新增额度小组件(iOS优先) #5401
  • 通过方式只有一个:维护者在本 PR 上 Approve;需要修改时维护者会直接 Request Changes,那时球才回到你手里。
  • 这期间照常处理 review 意见和 CI,不影响这条等待。

(本条为流程自动发出的维护者确认请求,不用重复回复。)

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:cold-update 改动影响移动端冷更新(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) labels Oct 3, 2026
@MagicLizi MagicLizi added touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示) labels Oct 3, 2026
FicoHub added a commit to FicoHub/cindy that referenced this pull request Oct 6, 2026
复用 makecindy#5252 源提交 ed43411 的 WallpaperVideo.test.tsx 单文件补丁。同时等待新 DOM 与旧 src 清理,保留最终释放断言;生产代码不变。

Signed-off-by: ficowang <fico@xd.com>
MagicLizi pushed a commit that referenced this pull request Oct 7, 2026
* fix(desktop): 释放失败清单与更新说明的原生响应资源

Signed-off-by: ficowang <fico@xd.com>

* test(desktop): 等待壁纸旧视频完成资源清理

复用 #5252 源提交 ed43411 的 WallpaperVideo.test.tsx 单文件补丁。同时等待新 DOM 与旧 src 清理,保留最终释放断言;生产代码不变。

Signed-off-by: ficowang <fico@xd.com>

---------

Signed-off-by: ficowang <fico@xd.com>
FicoHub added 13 commits October 9, 2026 15:37
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
@FicoHub

FicoHub commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

CI 归因(head d0eaf57):唯一失败在 Linux unit tests (2/2),失败用例是 src/main/remote-agent/__tests__/groupRelay.test.ts › tries every computer in the group before giving up,报错为 ENOTEMPTY: directory not empty, rmdir '/tmp/cindy-group-relay-uAMmoU';verify 是随该分片一起失败的汇总检查。

这是供应商组中转测试在清理临时目录时与后台写入的竞态,与本 PR 无关。此前已在 #4264、#4263 和 main 自身的 client-ci 上出现过,测试侧修复在 #5776(未合入)。不做空提交重跑。

Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Signed-off-by: ficowang <fico@xd.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:cold-update 改动影响移动端冷更新(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants