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
50 changes: 50 additions & 0 deletions .github/workflows/python-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,47 @@ jobs:
- uses: astral-sh/setup-uv@v6
- run: uv run --quiet --frozen --no-dev --project plugins/orchestration/darrow-adaptive-delivery/backend python plugins/orchestration/darrow-adaptive-delivery/backend/tests/fresh_install.py

ticket-pipeline-windows:
name: Ticket pipeline Python ${{ matrix.python-version }} on windows-latest
needs: changes
if: contains(needs.changes.outputs.packages, 'plugins/orchestration/darrow-ticket-pipeline/backend')
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
runs-on: windows-latest
defaults:
run:
shell: bash
env:
UV_PYTHON: ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- run: scripts/check-python --package plugins/orchestration/darrow-ticket-pipeline/backend

ticket-pipeline-fresh-install:
name: Fresh install ticket pipeline on ${{ matrix.os }}
needs: changes
if: contains(needs.changes.outputs.packages, 'plugins/orchestration/darrow-ticket-pipeline/backend')
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@v6
- run: uv run --quiet --frozen --no-dev --project plugins/orchestration/darrow-ticket-pipeline/backend python plugins/orchestration/darrow-ticket-pipeline/backend/tests/fresh_install.py

inventory:
name: Python inventory guard
runs-on: ubuntu-latest
Expand Down Expand Up @@ -553,6 +594,8 @@ jobs:
- information-architecture-fresh-install
- adaptive-delivery-windows
- adaptive-delivery-fresh-install
- ticket-pipeline-windows
- ticket-pipeline-fresh-install
- inventory
- skill-authoring-fresh-install
- observability-fresh-install
Expand Down Expand Up @@ -598,6 +641,9 @@ jobs:
ADAPTIVE_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/orchestration/darrow-adaptive-delivery/backend') }}
ADAPTIVE_WINDOWS_RESULT: ${{ needs.adaptive-delivery-windows.result }}
ADAPTIVE_INSTALL_RESULT: ${{ needs.adaptive-delivery-fresh-install.result }}
PIPELINE_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/orchestration/darrow-ticket-pipeline/backend') }}
PIPELINE_WINDOWS_RESULT: ${{ needs.ticket-pipeline-windows.result }}
PIPELINE_INSTALL_RESULT: ${{ needs.ticket-pipeline-fresh-install.result }}
run: |
scripts/verify-python-quality-results \
"$CHANGES_RESULT" "$INVENTORY_RESULT" \
Expand Down Expand Up @@ -633,3 +679,7 @@ jobs:
if [ "$ADAPTIVE_SELECTED" = true ]; then expected=success; fi
test "$ADAPTIVE_WINDOWS_RESULT" = "$expected"
test "$ADAPTIVE_INSTALL_RESULT" = "$expected"
expected=skipped
if [ "$PIPELINE_SELECTED" = true ]; then expected=success; fi
test "$PIPELINE_WINDOWS_RESULT" = "$expected"
test "$PIPELINE_INSTALL_RESULT" = "$expected"
62 changes: 58 additions & 4 deletions docs/installing-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,59 @@ can differ; consult local `--help` and the linked official documentation if
a command is unavailable. Syntax checks alone do not verify your account,
network, installed state, or the desktop UI.

### UV and Python for plugin helpers

Plugins with bundled Python helpers require **UV** (the `uv` command) and
**Python 3.10–3.13** (`>=3.10,<3.14`). Check the selected plugin's
`Hosts and prerequisites` README section to see whether this setup applies,
which additional tools it requires, and which platforms it supports.

Install UV using the [official UV installation instructions](https://docs.astral.sh/uv/getting-started/installation/).
For macOS or Linux, run in your shell:

```sh
curl -LsSf https://astral.sh/uv/install.sh | sh
```

For Windows with WinGet, run in PowerShell:

```powershell
winget install --id=astral-sh.uv -e
```

Open a new terminal after installation. Provision a supported, UV-managed
Python version and check availability with these commands, which work in both
shells:

```sh
uv --version
uv python install 3.13
uv python find --managed-python 3.13
```

Expect a UV version and an absolute path to the managed Python interpreter.
Using `3.13` explicitly keeps the interpreter within Darrow's supported range;
a newer system Python alone may not satisfy it. UV can install Python itself,
so no separate Python installer is needed for this setup. See
[UV's Python management guide](https://docs.astral.sh/uv/guides/install-python/).

Make sure `uv --version` also succeeds in the command environment used by your
agent host. If it reports `uv: command not found`, check that UV's installation
directory is on that environment's `PATH`, then restart the host so it inherits
the updated environment.

Each plugin ships its own `pyproject.toml` and `uv.lock`. Its documented
`uv run --frozen --no-dev --project ...` helper commands prepare the plugin's
isolated environment from that lock on first use. Allow network access for
Python, build requirements, and runtime dependency downloads, plus write access
to the plugin environment and UV cache. Subsequent runs reuse that environment;
an update may require new downloads. See [UV's environment synchronization documentation](https://docs.astral.sh/uv/concepts/projects/sync/).

The marketplace install commands and bulk shortcut install plugins; they do
not install UV or provision Python. Complete this setup before using Python
helpers. Development tools and checks for contributing to Darrow are documented
separately in [Contributing](../CONTRIBUTING.md).

### Select the command target

The commands below use `darrow-readiness-gate@darrow` as the worked example for
Expand Down Expand Up @@ -156,10 +209,11 @@ The shortcut deliberately excludes two marketplace entries:
it does not enable tracing: configure credentials and explicitly opt in before
it exports anything. Read its local README before enabling it.

`darrow-skill-authoring` remains part of the shortcut, but its deterministic
authoring helpers require UV and a UV-managed Python `>=3.10,<3.14` when used.
Its plugin-local lock and package do not create a dependency on another Darrow
plugin.
For plugins with Python helpers, complete the
[UV and Python setup](#uv-and-python-for-plugin-helpers) before using them.
The shortcut does not check or install these runtime prerequisites;
its success message confirms host installation only. Each plugin's local lock
and package remain independent of other Darrow plugins.

## Verify the installation

Expand Down
17 changes: 13 additions & 4 deletions docs/specs/marketplace-installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,16 @@ installation scope is passed to every per-plugin command.

The installation documentation must identify both excluded entries: the
ticket-pipeline entry is deprecated, and the Langfuse plugin requires UV/Python,
hook trust, and separate opt-in configuration. It also names UV and the
supported Python range as runtime prerequisites for the included skill-authoring
plugin without presenting that self-contained package as a cross-plugin
dependency.
hook trust, and separate opt-in configuration. Before the host installation
commands, it documents UV, the supported Python range, platform-specific setup,
and runtime availability checks. Each plugin's README declares whether those
prerequisites apply; the shared guide does not duplicate a plugin inventory.
It distinguishes installing a plugin from preparing its helper environment:
the marketplace installer does not provision UV or Python. Each plugin uses its
own locked package without creating a dependency on another Darrow plugin.

Every plugin containing Python code links its README prerequisites to the
shared installation guide's UV and Python section using an absolute published
URL. Runtime version requirements and general setup instructions live in that
shared section; plugin-specific tools, host constraints, helper commands, and
development checks remain documented locally.
9 changes: 9 additions & 0 deletions docs/specs/ticket-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ This is a native, skill-driven orchestrator, not a daemon or workflow runtime.
- **TP-C1 — Comparable result.** The final record reports outcome, phases,
routes, files, gates, loop counts, child invocations, interruptions, risks,
and next action in a comparison-friendly shape.
- **TP-M1 — Contained Python mechanics.** The frozen UV entrypoint
`darrow-ticket-pipeline` uses a plugin-local locked Python package on macOS,
Linux, and native Windows. It preserves the deprecated reference's command
arguments, TSV records, ticket/artifact bytes, phase ordering, refusal exit
codes, recovery and iteration bounds. No Bash runtime facade remains.
Matched fixtures retain evidence from the pre-migration implementation;
native package gates and fresh copied-artifact checks cover the declared
platforms. The migration changes runtime portability, not orchestration
authority or deprecated status.

## Shared model

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "darrow-discovery",
"description": "Explicit grilling, feature discovery, and implementation planning",
"version": "0.2.1",
"version": "0.2.2",
"license": "BUSL-1.1",
"author": {
"name": "Björn Rochel",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-discovery",
"version": "0.2.1",
"version": "0.2.2",
"description": "Explicit grilling, feature discovery, and implementation planning",
"author": {
"name": "Björn Rochel",
Expand Down
5 changes: 2 additions & 3 deletions plugins/capability/darrow-discovery/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,8 @@ Clarify a feature or develop an implementation plan. Grilling alone is manual-on

## Hosts and prerequisites

Codex and Claude Code; repository read access, UV, and a UV-managed Python
3.10–3.13 runtime. The planning frontier renderer is installed from this
plugin's locked, dependency-free Python package.
Codex and Claude Code with repository read access. The planning frontier
renderer requires [UV and Python](https://github.com/BjRo/darrow/blob/main/docs/installing-plugins.md#uv-and-python-for-plugin-helpers).

## Installation

Expand Down
2 changes: 1 addition & 1 deletion plugins/capability/darrow-git/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "darrow-git",
"description": "Intent-triggered Git skills for branches, commits, PRs, and candidate-bound PR evidence",
"version": "0.8.1",
"version": "0.8.2",
"hooks": "./.claude-plugin/hooks.json",
"license": "BUSL-1.1"
}
2 changes: 1 addition & 1 deletion plugins/capability/darrow-git/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-git",
"version": "0.8.1",
"version": "0.8.2",
"description": "Intent-triggered Git skills for branches, commits, PRs, and candidate-bound PR evidence",
"author": {
"name": "Björn Rochel"
Expand Down
5 changes: 3 additions & 2 deletions plugins/capability/darrow-git/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,9 @@ workflows to rewrite history, merge, release, deploy, or post generic comments.

## Hosts and prerequisites

Codex and Claude Code on Linux, macOS, and Windows; Git, UV, and Python
3.10–3.13 (UV can provision Python). PR work also requires
Codex and Claude Code on Linux, macOS, and Windows; Git and
[UV and Python](https://github.com/BjRo/darrow/blob/main/docs/installing-plugins.md#uv-and-python-for-plugin-helpers).
PR work also requires
authenticated GitHub CLI access and a usable remote. Attachment publication
requires a GitHub host and a `gh pr comment` implementation that advertises
`--attach`.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "darrow-observability-langfuse",
"description": "Export Codex rollout turns to Langfuse with attribution epochs",
"version": "0.5.0",
"version": "0.5.1",
"license": "BUSL-1.1",
"author": {
"name": "Björn Rochel",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-observability-langfuse",
"version": "0.5.0",
"version": "0.5.1",
"description": "Export Codex rollout turns to Langfuse with attribution epochs",
"author": {
"name": "Björn Rochel",
Expand Down
20 changes: 9 additions & 11 deletions plugins/capability/darrow-observability-langfuse/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,15 @@ segments.
It adds Darrow-specific work-item attribution without depending on another
plugin. The hook never contacts or mutates a tracker.

## Runtime exception
## Runtime

Darrow plugin mechanics normally use portable Bash only. ADR-0008 records the
contained exception here: `hooks/stop.sh` is a portable launcher, while
`hooks/stop.sh` is a portable launcher, while
transcript reconstruction and Langfuse export run in Python managed by UV. The
plugin commits `backend/pyproject.toml` and `backend/uv.lock`; no sibling plugin
or repository runtime is required.

First execution may let UV download the locked Python runtime dependencies and
create `backend/.venv` inside the installed plugin. Pre-warm it from the plugin
root with:
To prepare the hook environment before its first execution, run from the plugin
root:

```sh
uv sync --frozen --project backend
Expand All @@ -40,9 +38,8 @@ codex plugin add darrow-observability-langfuse@darrow

Review and trust the plugin's hooks when Codex prompts you, then start a new
Codex session after installation. You can inspect the registered hooks with
`/hooks`. UV and a UV-managed Python
`>=3.10,<3.14` are required. The locked Langfuse Python SDK requires a
compatible Langfuse v4 server or Langfuse Cloud. Delivery uses the supported
`/hooks`. Check [hosts and prerequisites](#hosts-and-prerequisites) before
enabling export. Delivery uses the supported
OTLP traces endpoint and the v4 ingestion header. Codex must support native
asynchronous command hooks (verified with CLI 0.153.4).

Expand Down Expand Up @@ -277,8 +274,9 @@ Configure or explain Codex turn telemetry, privacy, and attribution. Do not use

## Hosts and prerequisites

Codex is the observed runtime. Export requires Codex async hooks, UV, managed
Python >=3.10,<3.14, and compatible Langfuse v4. Claude Code turns are not exported.
Codex is the observed runtime. Export requires Codex async hooks,
[UV and Python](https://github.com/BjRo/darrow/blob/main/docs/installing-plugins.md#uv-and-python-for-plugin-helpers),
and a compatible Langfuse v4 server or Langfuse Cloud. Claude Code turns are not exported.
Claude installation and guidance invocation are unverified: Claude Code 2.1.223
rejects this package's Codex-specific `Interrupt` hook during native validation.
The presence of a Claude manifest is not a compatibility guarantee.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "darrow-review",
"description": "Read-only comprehensive code review and fix-scoped repair verification",
"version": "0.5.1",
"version": "0.5.2",
"license": "BUSL-1.1",
"author": {
"name": "Björn Rochel",
Expand Down
2 changes: 1 addition & 1 deletion plugins/capability/darrow-review/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-review",
"version": "0.5.1",
"version": "0.5.2",
"description": "Read-only comprehensive code review and fix-scoped repair verification",
"author": {
"name": "Björn Rochel",
Expand Down
5 changes: 3 additions & 2 deletions plugins/capability/darrow-review/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,9 @@ Review a bounded change or verify authorized repairs against a closed finding se

## Hosts and prerequisites

Codex and Claude Code with native fresh-agent support; Git, UV, Python
3.10–3.13, target checks, and available reviewer routes. The package supports
Codex and Claude Code with native fresh-agent support; Git,
[UV and Python](https://github.com/BjRo/darrow/blob/main/docs/installing-plugins.md#uv-and-python-for-plugin-helpers),
target checks, and available reviewer routes. The package supports
Linux, macOS, and native Windows. Literal check commands use Bash on Unix and
PowerShell on Windows. PR retrieval needs authenticated forge access.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "darrow-tickets-github",
"description": "GitHub Issues ticket skills: create-ticket, read-ticket, update-ticket, list-tickets",
"version": "0.4.0",
"version": "0.4.1",
"hooks": "./.claude-plugin/hooks.json",
"license": "BUSL-1.1",
"author": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-tickets-github",
"version": "0.4.0",
"version": "0.4.1",
"description": "GitHub Issues ticket skills: create-ticket, read-ticket, update-ticket, list-tickets",
"author": {
"name": "Björn Rochel"
Expand Down
11 changes: 6 additions & 5 deletions plugins/capability/darrow-tickets-github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ between installed providers require clarification before tracker access.

## Prerequisites

Install `darrow-tickets-github` from the Darrow marketplace. It requires UV,
Python 3.10–3.13, Git, `gh` authenticated for the repository's GitHub host,
and a usable `origin` remote. Runtime dependencies are otherwise empty.
Install `darrow-tickets-github` from the Darrow marketplace after checking
[hosts and prerequisites](#hosts-and-prerequisites).

Claude's session-start hook supplies static discovery context so matching
requests activate the owning skill before repository inspection or prerequisite
Expand Down Expand Up @@ -125,8 +124,10 @@ Operate on current-project GitHub Issues. Use the matching provider for another

## Hosts and prerequisites

Codex and Claude Code on Linux, macOS, and native Windows; UV, Python 3.10–3.13,
Git, and authenticated `gh` for the origin repository's host.
Codex and Claude Code on Linux, macOS, and native Windows;
[UV and Python](https://github.com/BjRo/darrow/blob/main/docs/installing-plugins.md#uv-and-python-for-plugin-helpers),
Git, `gh` authenticated for the repository's GitHub host, and a usable `origin`
remote. Runtime dependencies are otherwise empty.

## Installation

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-verification",
"version": "0.2.2",
"version": "0.2.3",
"description": "Bounded acceptance verification through replaceable independent code review",
"license": "BUSL-1.1",
"author": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "darrow-verification",
"version": "0.2.2",
"version": "0.2.3",
"description": "Bounded acceptance verification through replaceable independent code review",
"author": {
"name": "Björn Rochel",
Expand Down
Loading
Loading