Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,13 @@ self-service API. Partner contract and qualification process:
[the Execute guide](https://docs.openadapt.ai/commercial/oem-brief/).

<!-- BEGIN PRODUCTION LIFECYCLE -->
Production is per qualified workflow.
A workflow is Production only with an active signed, expiring, revocable
admission for that exact compiled version, application, and environment.
The signed ledger has seven active target admissions. Their evidence class
is `remote-safe-synthetic`, not MockMed `production_acceptance`. They remain
valid until revoked; there's no expiry date. `pip install openadapt` is the
admitted runtime (launcher 1.16.0, Flow 1.34.0). Desktop's admitted artifact
is the 0.16.0 wheel. Native Mac DMGs stay ad-hoc signed 0.15.0; don't treat
those as admitted. A Production run still needs a workflow admission for the
exact compiled bundle, application, and environment.
[Check the live signed Production record](https://docs.openadapt.ai/production-lifecycle.json).
<!-- END PRODUCTION LIFECYCLE -->

Expand Down
36 changes: 18 additions & 18 deletions docs/platform-compatibility-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<!-- Generated by scripts/render_platform_versions.py. Do not edit. -->

- Generated: `2026-08-29T21:58:31+00:00`
- Generated: `2026-09-02T19:12:23+00:00`
- Selection: `latest-published`
- Compatibility: **dependency-incompatible**
- Signature: `unsigned (signing infrastructure pending)`
Expand All @@ -14,18 +14,18 @@
| launcher | `openadapt` | `1.16.0` | [`v1.16.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/v1.16.0)<br>commit `089c27c046f5cd972d299361f9d68285c1896c71`<br>tree `3779d8fceeb65d26bad440fa52d11ab7238eae70` | `openadapt-1.16.0-py3-none-any.whl` `371693e7607d1cdc1ea360ef5d657c1af791a0af39677fa2ce5933e7ba712719`<br>`openadapt-1.16.0.tar.gz` `39d01612417dff5981b536b324a63498df1ea6f0128c723276609ebbe18d9a18` |
| flow | `openadapt-flow` | `1.34.0` | [`v1.34.0`](https://github.com/OpenAdaptAI/openadapt-flow/tree/v1.34.0)<br>commit `30fc60e55778a0e0f92b9776117cafcfe2512249`<br>tree `7a0263eda60b23f685cbd8abb4174da2db88fd4b` | `openadapt_flow-1.34.0-py3-none-any.whl` `56d32818989cb3a92830080ead39e10b08718c55e00988117f22cbfeaac98854`<br>`openadapt_flow-1.34.0.tar.gz` `a941a70015fe91897e655bfc9bf83e6cf8fbcf8bd4e4c7206ffb133c505203f8` |
| capture | `openadapt-capture` | `1.2.2` | [`v1.2.2`](https://github.com/OpenAdaptAI/openadapt-capture/tree/v1.2.2)<br>commit `06ade22948c12dcc6608bd54b5cca5c9c306e77c`<br>tree `b0a3b5b53f23536e01314f36aa46fd5b2d8baba6` | `openadapt_capture-1.2.2-py3-none-any.whl` `550fffe50990fa8431d332bdd5fe4755976d83baa7ad62553f50ad9e4ddcd1ae`<br>`openadapt_capture-1.2.2.tar.gz` `6f4298d3daadf9cced8994207e34b3116a79209ef792e98f778a0770e2f3406c` |
| privacy | `openadapt-privacy` | `1.0.4` | [`v1.0.4`](https://github.com/OpenAdaptAI/openadapt-privacy/tree/v1.0.4)<br>commit `7252de4820451b069310a3ccaecf484ad0af8c18`<br>tree `4c7bc72aa5c5879c7a51a4d3586c4b7e1c1ed5ff` | `openadapt_privacy-1.0.4-py3-none-any.whl` `e10bd265aba5e54c97aeb80a9ac0509384d19eb46ce46656880b619fd06f542b`<br>`openadapt_privacy-1.0.4.tar.gz` `89670173890192ecea31eea832e6e1c9b612cb7f19969fe99cda082cd71f2cb3` |
| types | `openadapt-types` | `0.12.0` | [`v0.12.0`](https://github.com/OpenAdaptAI/openadapt-types/tree/v0.12.0)<br>commit `da5ccb34928e912ac0ae16e04d818b9be68fb85d`<br>tree `9b40da24707b0562db8bded8779699c5ed9a5013` | `openadapt_types-0.12.0-py3-none-any.whl` `f9d2ef67f7f82554881601484647d8f2f221896e382c9e586286e40164b125e5`<br>`openadapt_types-0.12.0.tar.gz` `24bc131babbd9a4940df1c9c25cf4a7d63c859aeae4fe11b25b6672e303612f3` |
| desktop | `openadapt-desktop` | `0.15.0` | [`desktop-v0.15.0`](https://github.com/OpenAdaptAI/openadapt-desktop/tree/desktop-v0.15.0)<br>commit `ac01e90f04e604f40e030046457f5b5167c88755`<br>tree `06a0c7c3fc61194149f821522939a08fadc18736` | `openadapt_desktop-0.15.0-py3-none-any.whl` `11dd8da225d660f23fc5e779d564ef34c5d85ad40b303951ec7697e94f488401`<br>`openadapt_desktop-0.15.0.tar.gz` `f45e35d53469fcb75710010d56a9d3f362130f1637a2f5fb50889553104a5670` |
| privacy | `openadapt-privacy` | `1.1.0` | [`v1.1.0`](https://github.com/OpenAdaptAI/openadapt-privacy/tree/v1.1.0)<br>commit `a7cdcbd872e6263305f53b6ea1b778d76718c1cc`<br>tree `9beb1a11e5f6bbe5d7a1509d681c92362a2de964` | `openadapt_privacy-1.1.0-py3-none-any.whl` `ca4533ff99e754d14e50de6f6be8d0ce308892f90935e3f59f5f521104a29d7f`<br>`openadapt_privacy-1.1.0.tar.gz` `9976c844e8b9b74c13e6f685030e7013e27bc7eb833d06884bfa5e018af74f65` |
| types | `openadapt-types` | `0.17.0` | [`v0.17.0`](https://github.com/OpenAdaptAI/openadapt-types/tree/v0.17.0)<br>commit `14eca2d13e398153524cb65edc12e87616f9dfa7`<br>tree `c7f736a2ad7084bc95e1910b3232650ada8acd51` | `openadapt_types-0.17.0-py3-none-any.whl` `79738ab529f71241963725c6a40603deae032ff60c61d66baf33d7a248b1afa9`<br>`openadapt_types-0.17.0.tar.gz` `43dc00d82d6d8feb2cfaa16960224a85933440d7dee3b5f3c60618873535287b` |
| desktop | `openadapt-desktop` | `0.16.0` | [`v0.16.0`](https://github.com/OpenAdaptAI/openadapt-desktop/tree/v0.16.0)<br>commit `7c59750d37be09a2871cd1bada8cb0bce946d363`<br>tree `9a1307794df6f2c77ee3dab90973845f3d08ee53` | `openadapt_desktop-0.16.0-py3-none-any.whl` `06e608a934deef56c93ee1ca8de511d6daba08459626e8245bd0db4c391e64e9`<br>`openadapt_desktop-0.16.0.tar.gz` `15f0c59a4d481328da76f3e5aa6a29ab8cdced8ab183c97346d69b4c14c996ff` |
| agent | `openadapt-agent` | `2.0.1` | [`v2.0.1`](https://github.com/OpenAdaptAI/openadapt-agent/tree/v2.0.1)<br>commit `d9f16b2946dfdd0228eeb2660047347df9dce8d8`<br>tree `26606c89b4294603b628f1b3aaa8283c45765326` | `openadapt_agent-2.0.1-py3-none-any.whl` `5c5f6e3eca4c127d87b3affb8944223c0836916e0df57d0c6b8ba737b3bc8b5a`<br>`openadapt_agent-2.0.1.tar.gz` `67e05b299a4f035a0482b3032decc151fafc22de9a12bb3d8f884f37ea4cc937` |

## Runtime selections

| Unit | Version | Selected or locked OpenAdapt packages |
|---|---:|---|
| launcher_environment | `1.16.0` | `openadapt==1.16.0`<br>`openadapt-flow==1.34.0` |
| customer_runner | `1.34.0` | `openadapt-flow==1.34.0`<br>`openadapt-types==0.12.0` |
| desktop_sidecar | `0.15.0` | `openadapt-capture==1.2.1`<br>`openadapt-flow==1.27.1`<br>`openadapt-privacy==1.0.0`<br>`openadapt-types==0.7.0` |
| customer_runner | `1.34.0` | `openadapt-flow==1.34.0`<br>`openadapt-types==0.17.0` |
| desktop_sidecar | `0.16.0` | `openadapt-capture==1.2.1`<br>`openadapt-flow==1.34.0`<br>`openadapt-privacy==1.0.0`<br>`openadapt-types==0.10.0` |
| agent_bridge | `2.0.1` | `openadapt-agent==2.0.1`<br>`openadapt-flow==1.34.0` |

## Selected-platform dependency compatibility
Expand All @@ -34,32 +34,32 @@ These edges show whether each selected integration version satisfies its publish

| Scope | Source | Target | Constraint | Selected | Activation |
|---|---|---|---|---:|---|
| desktop-sidecar-lock | `openadapt-desktop==0.15.0` | `openadapt-capture` | `>=1.2.1` | `1.2.1` | `always` |
| desktop-sidecar-lock | `openadapt-desktop==0.15.0` | `openadapt-flow` | `==1.27.1` | `1.27.1` | `extra == "build"` |
| desktop-sidecar-lock | `openadapt-desktop==0.15.0` | `openadapt-privacy` | `>=1.0.0` | `1.0.0` | `always` |
| desktop-sidecar-lock | `openadapt-desktop==0.15.0` | `openadapt-types` | `==0.7.0` | `0.7.0` | `always` |
| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-capture` | `>=1.2.1` | `1.2.1` | `always` |
| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-flow` | `==1.34.0` | `1.34.0` | `extra == "build"` |
| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-privacy` | `>=1.0.0` | `1.0.0` | `always` |
| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-types` | `==0.10.0` | `0.10.0` | `always` |
| selected-platform | `openadapt-agent==2.0.1` | `openadapt-flow` | `<2,>=1.18.1` | `1.34.0` | `always` |
| selected-platform | `openadapt-capture==1.2.2` | `openadapt-privacy` | `>=0.1.0` | `1.0.4` | `extra == "all"`<br>`extra == "privacy"` |
| selected-platform | `openadapt-capture==1.2.2` | `openadapt-privacy` | `>=0.1.0` | `1.1.0` | `extra == "all"`<br>`extra == "privacy"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-capture` | `>=1.2.0` | `1.2.2` | `extra == "capture"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-privacy` | `>=1.0.0` | `1.0.4` | `extra == "privacy"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-types` | `<0.11.0,>=0.10.0` | `0.12.0` | `extra == "console"`<br>`extra == "dev"`<br>`extra == "interop"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-privacy` | `>=1.0.0` | `1.1.0` | `extra == "privacy"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-types` | `<0.11.0,>=0.10.0` | `0.17.0` | `extra == "console"`<br>`extra == "dev"`<br>`extra == "interop"` |
| selected-platform | `openadapt==1.16.0` | `openadapt-capture` | `<2.0.0,>=1.2.0` | `1.2.2` | `extra == "all"`<br>`extra == "capture"`<br>`extra == "core"` |
| selected-platform | `openadapt==1.16.0` | `openadapt-flow` | `<2.0.0,>=1.29.0` | `1.34.0` | `always`<br>`extra == "all"`<br>`extra == "browser"`<br>`extra == "capture"`<br>`extra == "core"`<br>`extra == "flow"`<br>`extra == "privacy"`<br>`extra == "rdp"`<br>`extra == "windows"`<br>`sys_platform == "darwin" and extra == "all"`<br>`sys_platform == "darwin" and extra == "macos"`<br>`sys_platform == "linux" and extra == "all"`<br>`sys_platform == "linux" and extra == "linux"` |

### Compatibility failures

- `flow` -> `openadapt-types` requires `<0.11.0,>=0.10.0`; the resolved version is `0.12.0`.
- `flow` -> `openadapt-types` requires `<0.11.0,>=0.10.0`; the resolved version is `0.17.0`.

## Cross-component schemas

| Contract | Owner | Accepted versions | Exact source |
|---|---|---|---|
| `workflow_bundle` | `flow` | `schema_version` [1, 2] | [`openadapt_flow/bundle_validation.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/bundle_validation.py) `fe1e5ec441183adf1aa2209f1669f779043fb4ad1f41a651ca0f96123778240f`<br>[`openadapt_flow/ir.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/ir.py) `e1e5345dd173b694587dde515b59cd60de0cf6028c1f35d589706b84ad792598` |
| `capture_structural_observation` | `capture` | `openadapt.capture.structural-observation/v` [1] | [`openadapt_capture/structural.py`](https://github.com/OpenAdaptAI/openadapt-capture/blob/06ade22948c12dcc6608bd54b5cca5c9c306e77c/openadapt_capture/structural.py) `8f8bce37148a3357ace147c46a7c45e6d5501b70622b24b1ac2490f2def304fc` |
| `control_overlay_frame` | `types` | `openadapt.control-overlay-frame/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `control_overlay_timeline` | `types` | `openadapt.control-overlay-timeline/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `human_decision_task` | `types` | `openadapt.human-decision-task/v` [1, 2] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_receipt` | `types` | `openadapt.human-decision-receipt/v` [1] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `control_overlay_frame` | `types` | `openadapt.control-overlay-frame/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `control_overlay_timeline` | `types` | `openadapt.control-overlay-timeline/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `human_decision_task` | `types` | `openadapt.human-decision-task/v` [1, 2] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_receipt` | `types` | `openadapt.human-decision-receipt/v` [1] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/14eca2d13e398153524cb65edc12e87616f9dfa7/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_relay` | `flow` | `openadapt.human-decision-relay/v` [2] | [`openadapt_flow/console/decision_relay.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/console/decision_relay.py) `d5320404d4342dbb52be1f2ead1cdb5cf0e22877feaaa1e47974b301df697292` |
| `remote_decision_projection` | `flow` | `openadapt.remote-decision-projection/v` [1] | [`openadapt_flow/console/human_decisions.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/console/human_decisions.py) `02651ad8888a5c17bfff6fb47165ba861193243dc0f7c951f8b94f544ca19477` |
| `runtime_validation` | `flow` | `openadapt.runtime-validation/v` [1, 2, 3] | [`openadapt_flow/runtime_validation.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/runtime_validation.py) `18675d6b4c40458394febb36cbe28e99f410cb65b4cab138b68df3cacc6f7dd4` |
Expand Down
6 changes: 4 additions & 2 deletions docs/platform-manifest.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ it must agree with. Other repositories contribute source data only:
- PyPI is the authority for published versions, artifact URLs, and digests.
- Each exact public release tag is the authority for its release source commit
and tree. This reference is not, by itself, a build-provenance attestation.
- The exact `desktop-vX.Y.Z` tag and its `uv.lock` are the authority for the
- The exact published Desktop release tag (`desktop-vX.Y.Z` when that native
tag exists, otherwise `vX.Y.Z`) and its `uv.lock` are the authority for the
package versions frozen into `openadapt-engine`.
- `https://openadapt.ai/status.json` (maintained in `openadapt-web`,
`public/status.json`) is the authority for substrate availability, release
Expand Down Expand Up @@ -185,7 +186,8 @@ Validated today:
`public/status.json` and `data/published-version-claims.json` in
`openadapt-web`.
- Native sidecar agreement: the Desktop sidecar's resolved OpenAdapt package
versions and lock digest match the exact `desktop-vX.Y.Z` tag's `uv.lock`.
versions and lock digest match the exact published Desktop release tag's
`uv.lock` (`desktop-vX.Y.Z` when present, otherwise `vX.Y.Z`).
- Compatibility honesty: the validator recomputes every dependency edge among
the seven selected components. Optional-extra markers remain visible. The
Desktop edges resolve against its exact sidecar lock; other edges resolve
Expand Down
Loading