Skip to content

fix(android): CI, exponential reconnect, explicit role (#339) - #362

Closed
sun-970 wants to merge 13 commits into
bytefolk:mainfrom
sun-970:feat/339-android-ci
Closed

sun-970 wants to merge 13 commits into
bytefolk:mainfrom
sun-970:feat/339-android-ci

Conversation

@sun-970

@sun-970 sun-970 commented Sep 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

Follow-up to #342 for #339. Does not close #342; this head contains #342 plus the three remaining merge blockers.

Fixes

  1. Android CI actually exists. .github/workflows/android-client.yml runs gradle test (JDK 17 + Android SDK, Gradle 8.9) on mobile/android/**.
  2. Exponential reconnect. PhoneLinkCodec.reconnectDelayMs is 1s/2s/4s/8s/16s (not 1000 * attempt). Unit-tested.
  3. No implicit first role. loadOrg() keeps selectedRoleId only if that id is still in the snapshot. It never assigns roles.firstOrNull(). send() still refuses an empty selection.

Also splits network security config: src/main cleartext=false, src/debug cleartext=true (AAPT-valid, no nested <network-security-config> inside debug-overrides).

AC (#339)

Turns still run on the desktop. No Play Store / on-device Agent.

Validation ledger

ID Criterion Command Status
Codec tests snapshot / hello / command / backoff gradle test in mobile/android NOT VERIFIED locally (no Android SDK here). CI android-client.yml is the evidence path.
Node verify desktop suite existing verify.yml N/A to Kotlin sources; still runs on this PR

Refs #339

@waterbro-8

Copy link
Copy Markdown
Collaborator

gradle test 在 head 40fab92 红了:android-actions/setup-android@v3 调用 sdkmanager tools,日志是 Warning: Failed to find package 'tools'(cmdline-tools 16 已不再提供名为 tools 的包)。

这发生在 gradle test 之前,所以还不能当 Android 编译证据。请把 workflow 改成不装已下线的 tools 包(只装 cmdline-tools / platform-tools / 需要的 platform+build-tools),再推一版让 job 真正跑到 ./gradlew test。

#362
https://github.com/bytefolk/roleweave/actions/runs/35357411189

asteam-worker added 2 commits September 18, 2026 15:08
)

android-actions/setup-android@v3 defaulted to sdkmanager tools,
which Google removed. Install platform-tools, android-35, and
build-tools only so gradle test can run.
…folk#339)

Drop android-actions/setup-android. It still invokes sdkmanager tools
(removed by Google) and multiline packages were parsed as one name.
Use the runner cmdline-tools to install platform-tools, android-35,
and build-tools only.
@waterbro-8

Copy link
Copy Markdown
Collaborator

head e5f6c11 仍没跑到 gradle test。tools 包是去掉了,但 packages: | 块标量被当成一个 sdkmanager 参数:

Warning: Failed to find package 'platform-tools
platforms;android-35
build-tools;35.0.0'

android-actions/setup-android@v3 要的是空格分隔的一行,分号包名需加引号,例如:

packages: platform-tools 'platforms;android-35' 'build-tools;35.0.0'

不要用 | 多行。改完再推,job 必须出现真正的 ./gradlew test / gradle test 日志才算 Android 证据。

@waterbro-8 waterbro-8 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — Approve

Head 5d65d0c8。先前三个 blocker 都在:

  1. Android CI 真跑了。 不再用 android-actions/setup-android(默认 sdkmanager tools)。sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0" 之后 gradle test 在本 head pass(约 1m54s)。
  2. 指数退避。 PhoneLinkCodec.reconnectDelayMs 为 1s/2s/4s/8s/16s,单测覆盖。
  3. 不隐式选第一角色。 loadOrg() 只保留仍存在的 selectedRoleId;send() 空选拒绝。

debug/main 的 network security config 拆开了。非 CODEOWNER,不能当合并闸门。

@waterbro-8 waterbro-8 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent re-review — APPROVED

复核 head 5d65d0c,#342 记录的三个 blocker 均已闭环:

  1. .github/workflows/android-client.yml 已进入该分支;runner 使用自带 cmdline-tools,明确只安装 platform-tools、platforms;android-35、build-tools;35.0.0,不再调用已下线的 SDK tools 包。
  2. PhoneLinkCodec.reconnectDelayMs 为 1/2/4/8/16 秒,并有单测覆盖。
  3. loadOrg() 不再选择 roles.firstOrNull();刷新时只保留仍存在的已选 role,send() 在没有显式选择时拒绝发送,UI 通过组织页点击建立选择。

Network security config 已拆为 main cleartext=false、debug cleartext=true,当前 manifest 未再全局允许明文。

Fresh CI evidence:gradle test job 成功,日志包含 SDK package 安装、testDebugUnitTest / testReleaseUnitTest,最终 BUILD SUCCESSFUL(45 actionable tasks)。桌面 Node、依赖审查、Scorecard、staging/installer/layout jobs 也通过。

Non-blocking follow-up:后续可补 PhoneViewModel 的行为级单测;不影响本次 #342 三个 merge blocker 的验收。

@PeterGuy326

Copy link
Copy Markdown
Contributor

Content merged to main via #382 (in-repo recreation, rebase merge, commit authored as @sun-970). Closing because fork pull requests cannot satisfy the required CodeQL check name in branch protection on this repository. Original review history preserved here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants