-
Notifications
You must be signed in to change notification settings - Fork 30
Add contributor onboarding docs: roadmap, CI ladder, no-build path #124
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,45 @@ | ||
| # OpenPhone Roadmap | ||
|
|
||
| Work is organized into five milestone tracks. Each links to a GitHub | ||
| milestone with the full issue list. If you want to contribute, pick an issue | ||
| from a track that matches your interests — `good first issue` labels mark | ||
| entry-level work, and the [no-build contribution | ||
| path](docs/contributing/no-build.md) covers what you can do without an | ||
| Android build host. | ||
|
|
||
| Tracking issue: [#97](https://github.com/secondly-com/OpenPhone/issues/97). | ||
|
|
||
| ## [M1: Safety & Policy Hardening](https://github.com/secondly-com/OpenPhone/milestone/1) | ||
|
|
||
| Fix policy-bypass and confirmation gaps across the assistant, watchers, and | ||
| the ADB/MCP surface. In progress — capability inference now fails closed and | ||
| the external ADB/MCP transport refuses state-changing tools by default. | ||
|
Comment on lines
+15
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This line says the safety fixes have already landed, but the current code paths still do not enforce those guarantees: Useful? React with 👍 / 👎. |
||
| Must land before wider distribution. | ||
|
|
||
| ## [M2: Testability & Decomposition](https://github.com/secondly-com/OpenPhone/milestone/2) | ||
|
|
||
| Break up the assistant god classes, add a JUnit harness, and cover | ||
| pure-logic classes with tests. Started — thread-safety fixes are under | ||
| review; decomposition has not begun. | ||
|
|
||
| ## [M3: Upstream Durability](https://github.com/secondly-com/OpenPhone/milestone/3) | ||
|
|
||
| Fork `frameworks_base`, add patch-apply canary CI against LineageOS | ||
| upstream, and write a LineageOS-bump runbook so upstream bumps stop being | ||
| high-risk events. Not started; post-0.1. | ||
|
|
||
| ## [M4: Provider & Runtime Maturity](https://github.com/secondly-com/OpenPhone/milestone/4) | ||
|
|
||
| Broker streaming, rate limiting, and provider dispatch; MCP spec | ||
| compliance; runtime protocol versioning; a shared runtime-protocol package. | ||
| In progress — MCP stdio framing and broker rate-limiter fixes have landed. | ||
|
|
||
| ## [M5: Contributor Experience & Community](https://github.com/secondly-com/OpenPhone/milestone/5) | ||
|
|
||
| Prebuilt emulator images, a documented no-build contribution path, and | ||
| community infrastructure (Discussions, roadmap, contribution docs). In | ||
| progress. | ||
|
|
||
| --- | ||
|
|
||
| Updated quarterly. Horizons are directional, not commitments. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| { | ||
| "title": "Contributing", | ||
| "pages": [ | ||
| "no-build" | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| # Contributing Without an Android Build Host | ||
|
|
||
| A full OpenPhone Android build needs 64 GB RAM, ~700 GB fast disk, and an | ||
| x86_64 Linux host. Most of the repository does not. Everything below is | ||
| plain JSON, JavaScript, Python, shell, and markdown, validated end-to-end by | ||
| `./scripts/check.sh` on an ordinary laptop. | ||
|
|
||
| ## What you can work on | ||
|
|
||
| - [`schemas/`](https://github.com/secondly-com/OpenPhone/tree/main/schemas) | ||
| — JSON Schema contracts for action requests, tools, screen context, audit | ||
| events, trajectories, OTA feeds, and eval reports. `check.sh` loads | ||
| several of them for cross-consistency checks. | ||
| - [`runtime/protocol/`](https://github.com/secondly-com/OpenPhone/tree/main/runtime/protocol) | ||
| — the Runtime Agent Protocol manifests (commands, events, capabilities) | ||
| and their validator. | ||
| - [`integrations/cli`](https://github.com/secondly-com/OpenPhone/tree/main/integrations/cli), | ||
| [`integrations/mcp-server`](https://github.com/secondly-com/OpenPhone/tree/main/integrations/mcp-server), | ||
| [`integrations/adb`](https://github.com/secondly-com/OpenPhone/tree/main/integrations/adb) | ||
| — Node CLI, MCP server, and ADB transport. Pure `.mjs`, no build step. | ||
| - [`services/model-broker/`](https://github.com/secondly-com/OpenPhone/tree/main/services/model-broker) | ||
| — the dependency-free Python model broker and its deploy files. | ||
| - [`tests/integrations/`](https://github.com/secondly-com/OpenPhone/tree/main/tests/integrations) | ||
| — Node contract tests for the CLI, MCP server, and OpenClaw plugin policy | ||
| buckets. | ||
| - `docs/` — everything on the docs site. | ||
| - [`scripts/`](https://github.com/secondly-com/OpenPhone/tree/main/scripts) | ||
| — sync, validation, and release helpers. | ||
|
|
||
| ## Setup | ||
|
|
||
| ```bash | ||
| git clone https://github.com/secondly-com/OpenPhone.git | ||
| cd OpenPhone | ||
| node --version # CI uses Node 24 | ||
| python3 --version # any recent Python 3 | ||
| ./scripts/check.sh | ||
| git diff --check | ||
| ``` | ||
|
|
||
| `check.sh` skips the standalone Java compile check when no Android SDK is | ||
| present (or set `OPENPHONE_SKIP_JAVA_CHECK=1`). Everything else — required | ||
|
Comment on lines
+41
to
+42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
In a no-SDK environment, this setup path still fails: Useful? React with 👍 / 👎. |
||
| files, JSON validity, schema cross-consistency, protocol validation, broker | ||
| smoke test, and the Node contract tests — runs locally in a few minutes. | ||
|
|
||
| To build the docs site locally, run `./scripts/build-docs.sh` (needs `npm`). | ||
|
|
||
| ## Example tasks | ||
|
|
||
| ### Add a schema field | ||
|
|
||
| Contracts live in `schemas/*.schema.json`. To document a new payload field, | ||
| edit the schema (for example a new optional property in | ||
| `screen-context.schema.json`), keep `required` accurate, and run | ||
| `./scripts/check.sh`. Note which schemas drive validator behavior directly — | ||
| read | ||
| [schemas/README.md](https://github.com/secondly-com/OpenPhone/blob/main/schemas/README.md) | ||
| before changing enums, `required` keys, or `const` markers. | ||
|
|
||
| ### Add or change a runtime command | ||
|
|
||
| Runtime commands are declared in | ||
| `runtime/protocol/openphone-commands.json`. Each entry needs a name, | ||
| `android_tool`, capability, risk, exposure, and input/output schemas. | ||
| `runtime/protocol/validate-runtime-protocol.mjs` (run by `check.sh`) | ||
| cross-checks the manifest against the Android action registry, the OpenClaw | ||
| plugin command buckets, and the Android adapter mapping — so a new command | ||
| also touches those files, but all of them are text edits validated without | ||
| a build. Start by reading an existing entry like `openphone.apps.search`. | ||
|
|
||
| ### Fix or improve docs | ||
|
|
||
| Edit the markdown under `docs/`, keep relative links valid, and run | ||
| `./scripts/check.sh` plus `./scripts/build-docs.sh` if you can. New pages | ||
| need an entry in the directory's `meta.json` to appear in the docs-site nav. | ||
|
|
||
| ### Extend a broker or integration test | ||
|
|
||
| The broker's behavior contract is exercised by | ||
| `scripts/smoke-test-model-broker.sh` (started against a fake provider, no | ||
| API key needed). The Node surfaces are covered by | ||
| `tests/integrations/*.mjs`, which run the CLI and MCP server in dry-run mode | ||
| with no device attached. Adding an assertion for an uncovered behavior is a | ||
| small, high-value PR. | ||
|
|
||
| ## Before opening a PR | ||
|
|
||
| Read the contributor terms in | ||
| [.github/CONTRIBUTING.md](https://github.com/secondly-com/OpenPhone/blob/main/.github/CONTRIBUTING.md), | ||
| keep the PR focused, and make sure `./scripts/check.sh` and | ||
| `git diff --check` pass. The CI ladder that runs on fork PRs is documented | ||
| there too. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For docs changes, this instruction is not equivalent to tier 1:
.github/workflows/ci.ymlruns./scripts/build-docs.shas a separate step before./scripts/check.sh, andcheck.shitself does not build the Fumadocs site. Contributors following this line can push Markdown/nav changes that pass locally but fail the automatic PR job, so the CI ladder should tell them to run the docs build too when relevant.Useful? React with 👍 / 👎.