diff --git a/.agents/skills/release-prep/SKILL.md b/.agents/skills/release-prep/SKILL.md index e28ebb7..945c002 100644 --- a/.agents/skills/release-prep/SKILL.md +++ b/.agents/skills/release-prep/SKILL.md @@ -82,12 +82,21 @@ If any row is missing, add it before committing. ## Step 5 — Commit and push +Stay on the **current branch** — do not switch to or push directly to `main`. Stage all changed files and create one commit: ``` +CURRENT_BRANCH=$(git branch --show-current) git add CHANGELOG.md README.md docs/ .subagents/ git commit -m "chore(release): prepare NEXT_VERSION" -git push origin main +git push origin "$CURRENT_BRANCH" +``` + +If the current branch already has an open PR, the commit is added to it +automatically. If not, open a new PR targeting `main`: + +``` +gh pr create --title "chore(release): prepare NEXT_VERSION" --body "..." ``` Do not tag in this step. Tagging is the job of `leather-release-tag`. @@ -100,5 +109,6 @@ Do not tag in this step. Tagging is the job of `leather-release-tag`. - [ ] CHANGELOG has the new section with at least one bullet - [ ] No stale version string remains in docs (grep clean) - [ ] Subcommand tables are in sync -- [ ] Commit is on origin/main +- [ ] Commit is pushed to current branch (not directly to main) +- [ ] PR is open targeting main (create one if it doesn't exist) - [ ] Working tree is clean (`git status` shows nothing) diff --git a/CHANGELOG.md b/CHANGELOG.md index 693e438..7b363a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0. ## [Unreleased] +## [0.2.0] — 2026-06-05 "weathered" + ### Added - **Shared stdlib leaf utilities** (`internal/fileutil`, `internal/jsonstore`, @@ -351,7 +353,8 @@ Intentionally out of scope for v0.1.0; tracked for v0.2: See [ROADMAP.md](ROADMAP.md) for the full deferred-item list with rationales and proposed shapes. -[Unreleased]: https://github.com/tgpski/leather/compare/v0.1.3...HEAD +[Unreleased]: https://github.com/tgpski/leather/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/tgpski/leather/compare/v0.1.3...v0.2.0 [0.1.3]: https://github.com/tgpski/leather/compare/v0.1.2...v0.1.3 [0.1.2]: https://github.com/tgpski/leather/compare/v0.1.1...v0.1.2 [0.1.1]: https://github.com/tgpski/leather/compare/v0.1.0...v0.1.1 diff --git a/README.md b/README.md index e6cecf5..9a27416 100644 --- a/README.md +++ b/README.md @@ -295,6 +295,8 @@ make example-01 # runs a mock-LLM example end-to-end | `leather validate` | Validate config, agents, lifecycles, skills, workers, and MCP servers. | | `leather test-agent` | Run an agent against `MockLLM` and print the transcript. | | `leather status` | Print scheduler state and current token‑budget settings. | +| `leather snapshot` | Save or restore a point-in-time `tar.gz` archive of runtime state. | +| `leather attach` | Join a running `serve` instance and stream pretty-printed runtime events. | | `leather replay` | Replay a snapshot or live session. | | `leather version` / `leather help` | The obvious. | diff --git a/docs/GUIDE.md b/docs/GUIDE.md index 4128bfe..a3ea2e6 100644 --- a/docs/GUIDE.md +++ b/docs/GUIDE.md @@ -1187,5 +1187,7 @@ my-project/ | `leather ingest` | Write a file as a hide and optionally enqueue it. | | `leather status` | Print job history, token usage, scheduler state. | | `leather test-agent` | Run an agent against `MockLLM` and print the transcript. | +| `leather snapshot` | Save or restore a point-in-time `tar.gz` archive of runtime state. | +| `leather attach` | Join a running `serve` instance and stream pretty-printed runtime events. | | `leather replay` | Replay a snapshot or live session. | | `leather version` / `leather help` | The obvious. | diff --git a/docs/OPERATIONS.md b/docs/OPERATIONS.md index 3ba8e19..c174a9f 100644 --- a/docs/OPERATIONS.md +++ b/docs/OPERATIONS.md @@ -7,7 +7,7 @@ discipline, queue and dead-letter recovery, DevTools authentication, upgrades, and troubleshooting. If you are looking for *how to write an agent*, see [README.md](../README.md) -and [GUIDE.md](GUIDE.md). For trust boundaries and the v0.1 security +and [GUIDE.md](GUIDE.md). For trust boundaries and the v0.2 security posture, see [SECURITY.md](../SECURITY.md). For architecture context, see [ARCHITECTURE.md](ARCHITECTURE.md). For the day-2 ops roadmap, see [ROADMAP.md](../ROADMAP.md). @@ -149,7 +149,7 @@ Returns a JSON object — **not** Prometheus exposition format. The shape is: ``` If you need Prometheus, scrape this endpoint and adapt it externally. A -native Prometheus exporter is not in v0.1. +native Prometheus exporter is not in v0.2. ### `GET /cache/stats` @@ -359,7 +359,7 @@ in. ## Upgrading -leather is a single static binary with no runtime data migrations in v0.1. +leather is a single static binary with no runtime data migrations in v0.2. 1. Stop the service: `systemctl stop leather` (releases `leather.lock`). 2. Replace the binary: `install -m 0755 leather /usr/local/bin/leather`. @@ -393,13 +393,11 @@ For deeper debugging, `--log-level debug` increases verbosity across the runtime. Logs identify components and agent names but never include token content, API keys, or hide payloads. -## What is NOT in v0.1 +## What is NOT in v0.2 The following commonly-requested operational features are explicitly deferred. See [ROADMAP.md](../ROADMAP.md) for the full deferral list. -- **`leather snapshot save/restore`** — built-in backup tooling. - Use the stop-then-tar procedure documented above. - **Prometheus exposition** — `/metrics` returns JSON. Adapt externally. - **Hot config reload** — `SIGHUP` reloads the worker supervisor but not every config field. For substantive changes, restart the process. diff --git a/docs/modules/cli.md b/docs/modules/cli.md index 4b582aa..710510f 100644 --- a/docs/modules/cli.md +++ b/docs/modules/cli.md @@ -25,6 +25,10 @@ HTTP API and replay endpoints, and provides testable command handlers for | `RunValidate` | `func RunValidate(args []string, stdout, stderr io.Writer) int` | Validate config, agents, lifecycles, skills, workers, and MCP server definitions. | | `RunTestAgent` | `func RunTestAgent(args []string, stdout, stderr io.Writer) int` | Run an agent with `MockLLM` and optional fake tool responses. | | `RunStatus` | `func RunStatus(args []string, stdout, stderr io.Writer) int` | Print current config summary and persisted scheduler state. | +| `RunIngest` | `func RunIngest(args []string, stdout, stderr io.Writer) int` | Store raw bytes as a hide and optionally enqueue for curing. | +| `RunReplay` | `func RunReplay(args []string, stdout, stderr io.Writer, version, commit string) int` | Replay a captured snapshot or runs directory via the API. | +| `RunSnapshot` | `func RunSnapshot(args []string, stdout, stderr io.Writer) int` | Save or restore a point-in-time `tar.gz` archive of runtime state. | +| `RunAttach` | `func RunAttach(args []string, stdout, stderr io.Writer) int` | Join a running `serve` instance and stream pretty-printed DevTools events. | | `RunVersion` | `func RunVersion(_ []string, stdout, _ io.Writer, version, commit string) int` | Print build metadata. | ## Internal Design