RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium launch-contract reference: start routes and permission/service/data presets. Use when a test launches to the wrong screen or a new automation route is added. General flakiness: appium-test-debug.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
The automation contract launches the app directly to a specific screen with controlled state, bypassing normal navigation. It is the foundation for every Appium test.
Source of truth: Kotlin AutomationLaunchContract.kt in app/src/main/kotlin/com/poyka/ripdpi/automation/.
Python mirror: appium/lib/launch_contract.py.
conftest.py::launch_app (autouse fixture)
1. Read @pytest.mark.automation(...) kwargs from test
2. adb am force-stop com.poyka.ripdpi
3. sleep 0.5s (process teardown settle)
4. adb am start -n com.poyka.ripdpi/.activities.MainActivity \
--ez com.poyka.ripdpi.automation.ENABLED true \
--es com.poyka.ripdpi.automation.START_ROUTE {route} \
... (remaining extras)
5. wait_for_element(driver, "{route}-screen", timeout=15)
6. yield (test runs)
7. Screenshot on failure -> screenshots/{test_name}.png
| Python Constant | Extra Key | Type | Default | Purpose |
|---|---|---|---|---|
ENABLED | ...automation.ENABLED | bool | true | Activate automation mode |
RESET_STATE | ...automation.RESET_STATE | bool | true | Clear persisted state before launch |
DISABLE_MOTION | ...automation.DISABLE_MOTION | bool | true | Disable Compose animations |
START_ROUTE | ...automation.START_ROUTE | string | "home" | Target screen |
PERMISSION_PRESET | ...automation.PERMISSION_PRESET | string | "granted" | Simulated permission state |
SERVICE_PRESET | ...automation.SERVICE_PRESET | string | "idle" | Simulated service state |
DATA_PRESET | ...automation.DATA_PRESET | string | "clean_home" | Pre-populated data fixtures |
All extras are prefixed with com.poyka.ripdpi.automation..
| Route | Screen Resource ID | Typical data_preset |
|---|---|---|
home | home-screen | clean_home |
onboarding | onboarding-screen | clean_home |
config | config-screen | settings_ready |
diagnostics | diagnostics-screen | diagnostics_demo |
history | history-screen | settings_ready |
logs | logs-screen | settings_ready |
settings | settings-screen | settings_ready |
mode_editor | mode_editor-screen | settings_ready |
dns_settings | dns_settings-screen | settings_ready |
advanced_settings | advanced_settings-screen | settings_ready |
about | about-screen | settings_ready |
data_transparency | data_transparency-screen | settings_ready |
app_customization | app_customization-screen | settings_ready |
| Value | Simulates |
|---|---|
granted | All permissions granted (default) |
vpn_missing | VPN permission not granted |
notifications_missing | Notification permission not granted |
battery_review | Battery optimization not disabled |
| Value | Simulates |
|---|---|
idle | Service not running (default) |
connected_proxy | Proxy service connected |
connected_vpn | VPN service connected |
live | Live connection with real service |
| Value | Simulates |
|---|---|
clean_home | Fresh install state (default) |
settings_ready | Settings populated, configs available |
diagnostics_demo | Demo diagnostic data pre-loaded |
# Minimal -- all defaults (home screen, granted, idle, clean_home)
@pytest.mark.automation()
def test_home_loads(driver): ...
# Deep-link to sub-screen with populated data
@pytest.mark.automation(
start_route="dns_settings",
data_preset="settings_ready",
)
def test_dns_plain_save(driver): ...
# Permission-denied scenario
@pytest.mark.automation(
start_route="home",
permission_preset="vpn_missing",
)
def test_vpn_permission_banner(driver): ...
# Connected state testing
@pytest.mark.automation(
start_route="home",
service_preset="connected_vpn",
data_preset="clean_home",
)
def test_connected_vpn_stats(driver): ...
All parameters are keyword-only. Omitted params use defaults shown in the Intent Extras table.
Route sealed classAutomationLaunchContract.kt to navigate to the new screenModifier.testTag("{route}-screen") on the screen's root composable@pytest.mark.automation(start_route="{route}") in the Python testconftest.py wait (wait_for_element(driver, f"{route}-screen", timeout=15)) works automatically| Mistake | Fix |
|---|---|
Forgetting reset_state=True | Previous test's data leaks in. Default is True -- only set False if intentionally preserving state. |
Wrong data_preset for the screen | Screen renders empty or missing elements. Match route to its typical preset (see table above). |
Omitting disable_motion=True | Animations cause timing issues, especially in CI. Default is True -- only set False to test animations. |
start_route value not in Kotlin Route | App silently falls back to home screen. Verify the route exists in Route.kt. |
Screen resource-id doesn't match {route}-screen | wait_for_element times out on launch. The convention is {route}-screen. |
Testing connected state with service_preset="idle" | Stats/metrics cards won't be visible. Use connected_vpn or connected_proxy. |
.agents/skills/appium-test-authoring/SKILL.md -- How to write tests using the automation marker.agents/skills/appium-test-debug/SKILL.md -- Troubleshooting when launch fails.agents/skills/android-device-debug/SKILL.md -- Raw ADB commands for device interactionまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
日本語の概要は準備中です。原文の説明を表示しています。
ADB-based RIPDPI device/emulator debugging: build/install/launch, logcat filtering, fixture port-forwarding, instrumented tests, crash/ANR triage. Use when debugging on a real device or emulator.
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium test authoring: page objects, resource-id locators, assertions, wait tiers. Use when writing a new Appium test or page object, or adding coverage for a new screen.
日本語の概要は準備中です。原文の説明を表示しています。
RIPDPI Appium failure triage: flaky tests, locator/session/wait issues, screenshot and element-tree debugging. Use when an Appium test fails or is flaky.
日本語の概要は準備中です。原文の説明を表示しています。
Add or modify a GitHub Actions job. Use when editing a file under .github/workflows/. Not for running a workflow locally (local-ci-act) or release signing (release-signing).
日本語の概要は準備中です。原文の説明を表示しています。
Conservative review of end-user legal exposure from diagnostics targets and probe hosts, by jurisdiction. Use when shipping or editing diagnostics target lists, probe hosts, or bootstrap endpoints.
日本語の概要は準備中です。原文の説明を表示しています。