# 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.