robson-core 0.1.0

Rust async agent orchestrator for automated development workflows
Documentation
# robson

Rust async agent orchestrator that automates the full lifecycle from Jira task to code review:

```
Jira task → SQLite → branch → Claude Code → PR → Jira comment → Slack notification
```

## System Dependencies

The `git2` crate requires libgit2 and libssh2 C libraries at build time.

### Debian / Ubuntu

```bash
sudo apt-get install -y pkg-config libssl-dev cmake libssh2-1-dev libgit2-dev
```

### Alpine

```bash
apk add --no-cache pkgconf openssl-dev cmake libssh2-dev libgit2-dev musl-dev gcc
```

### Fedora / RHEL

```bash
sudo dnf install -y pkgconfig openssl-devel cmake libssh2-devel libgit2-devel
```

## Build

```bash
cargo build --release
```

## Usage

```bash
# Create a task
cargo robson task create --key PROJ-123 --summary "Fix bug" --description "Details" --repo-url "git://github.com/org/repo"

# Process pending tasks
cargo robson run

# Run a single task
cargo robson run-task PROJ-123

# Start webhook server
cargo robson server
```

## Configuration

```bash
cp robson.example.toml robson.toml
```

See `docs/spec.md` for the full specification.

## Tests

```bash
cargo test
```

## Publishing to crates.io

All workspace crates share a single version in `[workspace.package]` at the root `Cargo.toml`. Internal `robson-*` dependency versions are kept in sync via `make sync-workspace-versions` (also run automatically by `make bump-version` and before publish).

Set your API token (create one at https://crates.io/settings/tokens):

```bash
export CARGO_REGISTRY_TOKEN=...
```

Validate packaging without uploading (`cargo publish --dry-run` per crate; crates that depend on unpublished workspace members are skipped with a warning):

```bash
make publish-dry-run
```

### Manual release (bump + publish)

```bash
make publish VERSION=0.2.0
```

### Tag-driven release

```bash
make bump-version VERSION=0.2.0
git commit -am "chore: release v0.2.0"
git tag v0.2.0
make publish-tag
```

`publish-tag` requires HEAD to be tagged and the tag version (without `v` prefix) to match the workspace version in `Cargo.toml`.

To publish the current workspace version without bumping (e.g. retry after a failed publish):

```bash
make publish
```

### Rate limits (first-time publish)

crates.io allows a **burst of 5 new crates**, then **1 new crate every 10 minutes**. Publishing all 17 crates the first time takes about **2 hours**.

If you hit `429 Too Many Requests`, **do not run `make publish` again** (it re-runs clippy/tests). Wait until the time in the error message, then:

```bash
make publish-resume
```

This skips crates already on crates.io, retries on 429 automatically, and waits 10 minutes between each remaining crate.