From 67e45971db52a0d8fda93b78d1eca6aac54c53ef Mon Sep 17 00:00:00 2001 From: abrichr Date: Mon, 27 Jul 2026 13:11:43 -0400 Subject: [PATCH] docs: reconcile public repository lifecycles --- README.md | 15 ++++++--------- REPOSITORY_LIFECYCLE.md | 8 ++++---- profile/README.md | 2 +- repository-lifecycle.yml | 17 ++++++++++------- scripts/check_profile.py | 23 ++++++++++++++++++++++- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 6a7e0c7..1ad7191 100644 --- a/README.md +++ b/README.md @@ -14,15 +14,12 @@ Organization owners should apply these settings after this branch is merged: 1. Set the organization description to the `organization_description` value in [`repository-lifecycle.yml`](repository-lifecycle.yml). -2. Apply the `repository_descriptions` values from that file. In particular, - the live `openadapt-desktop` description still advertises the superseded - screen-recording/training-data direction. The live `openadapt-agent` - description was already aligned when this file was reviewed. -3. Replace the currently observed pins (`OpenAdapt`, `openadapt-retrieval`, - `openadapt-evals`, `openadapt-grounding`, `openadapt-capture`, and - `openadapt-privacy`) with the exact `pinned_repositories` list. It keeps the - 1.6k+ stars correctly attached to the overall `OpenAdapt` project while - putting the canonical engine and Desktop cockpit beside it. +2. Apply the exact `repository_descriptions` values from that file. They keep + the Desktop, native Capture, and agent-bridge descriptions aligned with the + lifecycle registry. +3. Pin the exact `pinned_repositories` list. It keeps the 1.6k+ stars correctly + attached to the overall `OpenAdapt` project while putting the canonical + engine and Desktop cockpit beside it. 4. The Cloud implementation repository is private and cannot be a public organization pin. The documentation implementation is Internal and remains reachable through the public docs link instead of occupying a product pin. diff --git a/REPOSITORY_LIFECYCLE.md b/REPOSITORY_LIFECYCLE.md index c39c45c..f68bec1 100644 --- a/REPOSITORY_LIFECYCLE.md +++ b/REPOSITORY_LIFECYCLE.md @@ -33,7 +33,7 @@ The machine-readable source is [`repository-lifecycle.yml`](repository-lifecycle | `openadapt-desktop` | **Beta** | Desktop cockpit for local recording, qualification, execution, evidence review, and governed repair | | `openadapt-cloud` | **Beta** | Proprietary control plane for managed browser and customer-controlled execution, attended operations, evidence, usage, and billing | | `openadapt-capture` | **Experimental** | Optional native recorder | -| `openadapt-agent` | **Experimental** | Local MCP and Agent Skills bridge for compiled, governed Flow workflows | +| `openadapt-agent` | **Beta** | Local MCP and Agent Skills bridge for compiled, governed Flow workflows | | `openadapt-privacy` | **Experimental** | Optional scrubbing component | | `openadapt-types` | **Experimental** | Interoperability schemas | | `openadapt-web` | **Internal** | Marketing website implementation | @@ -46,7 +46,7 @@ The machine-readable source is [`repository-lifecycle.yml`](repository-lifecycle | **Internal** | `openadapt-ops`, `openadapt-wright`, `openadapt-herald`, `openadapt-crier`, `openadapt-consilium`, `openadapt-presenter`, `openadapt-bootstrap`, `openadapt-telemetry`, `openadapt-viewer`, `openadapt-blog`, `openadapt-internal`, `openadapt-yc` | | **Experimental UI/support** | `openadapt-console`, `openadapt-tray` | | **Labs/forks** | `OmniMCP` (`omnimcp` locally), `SoM`, `PydanticPrompt` | -| **Historical directions** | `OpenAdapter`, `OpenReflector` | +| **Archived historical directions** | `OpenAdapter`, `OpenReflector` | | **Superseded** | `OpenSanitizer` (successor: `openadapt-privacy`) | ## Retirement Queue @@ -56,8 +56,8 @@ The machine-readable source is [`repository-lifecycle.yml`](repository-lifecycle | `openadapt-gitbook` | **Archived** | Keep an archive notice and route documentation traffic to `docs.openadapt.ai`. | | `openadapt-new` | **Archived** | Keep read-only historical context and route product traffic to `OpenAdapt` and `openadapt-flow`. | | `OpenSanitizer` | **Superseded** | Add a successor notice for `openadapt-privacy`, then decide whether to archive. | -| `OpenReflector` | **Historical** | Decide Archive versus Labs before changing organization state. | -| `OpenAdapter` | **Historical** | Decide Archive versus Labs before changing organization state. | +| `OpenReflector` | **Archived** | Retain its read-only history and route product traffic to `OpenAdapt` and `openadapt-flow`. | +| `OpenAdapter` | **Archived** | Retain its read-only history and route product traffic to `OpenAdapt` and `openadapt-flow`. | Experimental, Research, Labs, and Internal repositories are not deprecated by default. Moving local checkouts is a separate operational decision that must diff --git a/profile/README.md b/profile/README.md index 5a33369..a32495c 100644 --- a/profile/README.md +++ b/profile/README.md @@ -80,7 +80,7 @@ before extrapolating either result. | **Desktop cockpit** | **Beta** | [`openadapt-desktop`](https://github.com/OpenAdaptAI/openadapt-desktop) provides local recording, qualification, execution, evidence review, and governed repair. Native installers are published from its releases page. | | **Cloud control plane** | **Beta** | [`app.openadapt.ai`](https://app.openadapt.ai/) provides managed browser execution plus workflow, evidence, attended-operation, usage, and billing surfaces for customer-controlled execution. Its implementation repository is private. | | **Native capture** | **Experimental** | [`openadapt-capture`](https://github.com/OpenAdaptAI/openadapt-capture) is the canonical native screen, input, timing, and window-scoped recording component used by Desktop and Flow. | -| **Agent bridge** | **Experimental** | [`openadapt-agent`](https://github.com/OpenAdaptAI/openadapt-agent) exposes compiled Flow workflows as local MCP tools and Agent Skills without becoming a second runtime. | +| **Agent bridge** | **Beta** | [`openadapt-agent`](https://github.com/OpenAdaptAI/openadapt-agent) exposes compiled Flow workflows as local MCP tools and Agent Skills without becoming a second runtime. | | **Documentation** | **Beta** | [`docs.openadapt.ai`](https://docs.openadapt.ai) is the canonical journey-led site; [`openadapt-ops`](https://github.com/OpenAdaptAI/openadapt-ops) is its **Internal** publishing source. | | **Evidence and evaluation** | **Research** | [`openadapt-evals`](https://github.com/OpenAdaptAI/openadapt-evals) contains evaluation infrastructure. Runnable references live in [`openadapt-flow/docs/showcase`](https://github.com/OpenAdaptAI/openadapt-flow/tree/main/docs/showcase), with methods and evidence under [`benchmark`](https://github.com/OpenAdaptAI/openadapt-flow/tree/main/benchmark). | diff --git a/repository-lifecycle.yml b/repository-lifecycle.yml index 0578352..55731c9 100644 --- a/repository-lifecycle.yml +++ b/repository-lifecycle.yml @@ -18,17 +18,20 @@ public_metadata: openadapt-desktop: >- Beta Desktop cockpit for recording, qualification, local execution, evidence, and governed repair across OpenAdapt workflows. + openadapt-capture: >- + Native screen, input, timing, and window-scoped recording for OpenAdapt + Desktop and Flow. Experimental component. openadapt-agent: >- - Experimental local bridge exposing governed OpenAdapt workflows as MCP - tools and Agent Skills; halts remain halts. + Beta local bridge exposing governed OpenAdapt workflows as MCP tools and + Agent Skills; halts remain halts. lifecycle: beta: - OpenAdapt - openadapt-flow - openadapt-cloud - openadapt-desktop - experimental: - openadapt-agent + experimental: - openadapt-capture - openadapt-privacy - openadapt-types @@ -58,12 +61,12 @@ lifecycle: - OmniMCP - SoM - PydanticPrompt - historical: - - OpenReflector - - OpenAdapter + historical: [] superseded: - OpenSanitizer - deprecated: + deprecated: [] archived: - openadapt-new - openadapt-gitbook + - OpenReflector + - OpenAdapter diff --git a/scripts/check_profile.py b/scripts/check_profile.py index 264c0f7..7fffedd 100644 --- a/scripts/check_profile.py +++ b/scripts/check_profile.py @@ -49,7 +49,7 @@ "openadapt-evals", ) LINK_RE = re.compile(r"!?\[[^\]]+\]\(([^\s)]+)(?:\s+[^)]*)?\)") -LIFECYCLE_GROUP_RE = re.compile(r"^ ([a-z_]+):$") +LIFECYCLE_GROUP_RE = re.compile(r"^ ([a-z_]+):(?: \[\])?$") LIFECYCLE_REPOSITORY_RE = re.compile(r"^ - (\S+)$") EXPECTED_LIFECYCLE_GROUPS = { "beta", @@ -62,6 +62,15 @@ "deprecated", "archived", } +EXPECTED_CRITICAL_LIFECYCLES = { + "OpenAdapt": "beta", + "openadapt-flow": "beta", + "openadapt-desktop": "beta", + "openadapt-agent": "beta", + "openadapt-capture": "experimental", + "OpenAdapter": "archived", + "OpenReflector": "archived", +} FORBIDDEN_PUBLIC_OPERATIONS_MARKERS = ( "/Users/", "~/", @@ -163,6 +172,18 @@ def main() -> int: errors.append( f"repository-lifecycle.yml assigns multiple lifecycles: {duplicates}" ) + actual_lifecycles = { + repository: group + for group, group_repositories in groups.items() + for repository in group_repositories + } + for repository, expected_group in EXPECTED_CRITICAL_LIFECYCLES.items(): + if actual_lifecycles.get(repository) != expected_group: + errors.append( + "repository-lifecycle.yml assigns " + f"{repository} to {actual_lifecycles.get(repository)!r}; " + f"expected {expected_group!r}" + ) public_operations_text = lifecycle_text + LIFECYCLE_DOC.read_text(encoding="utf-8") leaked_markers = sorted(