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
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@ All notable changes to fixbuddy are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/), and this project aims to follow
[Semantic Versioning](https://semver.org/).

## [0.7.0] - 2026-06-12

### Added
- **`--notify-cmd <cmd>`** (repeatable) and additive config key `notify_cmd` —
a run-summary notification hook for unattended runs. Commands run in the
launch directory after the final summary (including after a crash-abort),
receive `FIXBUDDY_*` env vars (counts, `FIXBUDDY_ABORTED`, log dir) plus a
human-readable summary on stdin, and are operator-trusted (same model as
`--check-cmd`). A failing command warns but never changes fixbuddy's exit
code. Not fired for `--dry-run`, empty queues, or Ctrl-C.

### Changed
- README Roadmap retired: notifications shipped here, and explicit resume mode
is intentionally not built — the label system already resumes interrupted
runs (documented in a new FAQ entry).

## [0.6.0] - 2026-06-12

Google retires the Gemini CLI on 2026-06-18; its successor is the Antigravity
Expand Down Expand Up @@ -81,5 +97,6 @@ to existing flags.

Predate this changelog. See the git history and the `v0.4.0` / `v0.3.2` tags.

[0.7.0]: https://github.com/Codevena/fixbuddy/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/Codevena/fixbuddy/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/Codevena/fixbuddy/compare/v0.4.0...v0.5.0
38 changes: 16 additions & 22 deletions NEXT_SESSION.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,31 @@
# Next session

**v0.6.0 is released** (2026-06-12): the retired `gemini` agent was replaced by
`agy` (Antigravity CLI — Gemini CLI shuts down 2026-06-18), the read-only
pipeline stages got deterministic guards, and an offline integration test suite
landed. PR #9, merged to `main`.
v0.7.0 is implemented on branch `feat/notify-cmd-v0.7.0`: the `--notify-cmd`
run-summary notification hook (additive config key `notify_cmd`), plus the
roadmap cleanup — explicit resume mode is intentionally not built (the label
system already resumes interrupted runs; documented in a new FAQ entry).

## Status snapshot

- `main` is at the v0.6.0 merge; tags `v0.6.0` and floating `v1` both point at
it. GitHub release published; CI green; install one-liner verified end-to-end
against the fresh tag (checksums OK, `fixbuddy.sh --version` → 0.6.0).
- Spec: `docs/superpowers/specs/2026-06-12-agy-agent-and-integration-tests-design.md`
(includes verified agy CLI facts: no read-only mode, `--sandbox` = terminal
restrictions only, `--print-timeout` default 5m with **exit code 0** on timeout).
- Plan: `docs/superpowers/plans/2026-06-12-agy-agent-and-integration-tests.md`.
- Tests: `tests/integration.sh` — 14 offline scenarios (stub `gh`/agent CLIs,
local bare-repo origin, real git pushes). Runs as the CI `integration` job.
- Audit history: `docs/audit/2026-06-10-findings.md` (all 18 findings fixed).
- Branch `feat/notify-cmd-v0.7.0`, awaiting DoD gate / merge / tag.
- Spec: `docs/superpowers/specs/2026-06-12-notify-cmd-design.md`
- Plan: `docs/superpowers/plans/2026-06-12-notify-cmd.md`
- Tests: `tests/integration.sh` — 19 offline scenarios, runs in CI.
- v0.6.0 (agy migration + read-only-stage guards) is released and tagged.

## Release checklist (for the NEXT release)
## Release checklist (per release)

1. Bump `VERSION` in `fixbuddy.sh` (+ header), wizard header/banner,
`install.sh` `DEFAULT_REF`, README one-liners; update `CHANGELOG.md`.
2. Regenerate `SHA256SUMS` (`shasum -a 256 fixbuddy.sh fixbuddy-wizard.sh >
SHA256SUMS`) — `install.sh` verifies fail-closed.
3. Merge via PR; then `git tag vX.Y.Z && git push origin vX.Y.Z` and
`git tag -f v1 vX.Y.Z && git push origin v1 --force`.
4. `gh release create vX.Y.Z` (the repo has release pages; "Latest" should
track the newest tag). Smoke-test the install one-liner against the tag.
4. `gh release create vX.Y.Z` ("Latest" should track the newest tag) and
smoke-test the install one-liner against the fresh tag.

## What's next (README Roadmap)
## What's next

- Optional notifications for run summaries
- Explicit resume mode for interrupted runs

Pick one and run it through the brainstorm → plan → DoD-gate flow.
The README roadmap is empty — pick new goals next session. Ideas raised but
not committed: notify-cmd input for the GitHub Action, log retention/pruning
for `~/.fixbuddy/runs`, more agents as they appear.
28 changes: 18 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ VERIFY -> FIX -> REVIEW -> PUSH/PR -> optional auto-merge
Install with the one-liner (macOS and Linux, including WSL2):

```bash
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.6.0/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.0/install.sh | bash
```

This downloads the pinned `v0.6.0` scripts into `~/.local/bin` (or `/usr/local/bin`), makes them executable, and prints a PATH hint if needed. Override the location with `| bash -s -- --prefix /custom/bin` or track the latest commit with `--ref main`.
This downloads the pinned `v0.7.0` scripts into `~/.local/bin` (or `/usr/local/bin`), makes them executable, and prints a PATH hint if needed. Override the location with `| bash -s -- --prefix /custom/bin` or track the latest commit with `--ref main`.

**Prefer to read before you run?** The installer is short — inspect it first, then run it:

```bash
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.6.0/install.sh -o install.sh
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.0/install.sh -o install.sh
less install.sh # read it
bash install.sh # then run it
```
Expand Down Expand Up @@ -142,6 +142,7 @@ These agent invocations are intentionally powerful. Run fixbuddy only against re
| `--base <branch>` | PR base branch | auto-detect |
| `--issue <N>` | Process only this issue number. Repeatable; dedup filters and `--label`/`--severity` still apply. Warns for requested numbers that are not found, closed, or already labeled non-actionable | none |
| `--check-cmd <cmd>` | Shell command to run as a test gate after each fix commit and before review. Repeatable. A non-zero exit is treated as a review rejection: output is fed back to the fix agent and the attempt is retried; if the retry budget is exhausted the issue is labeled `fix:rejected`. Because review and PR are only reached after all checks pass, checks also gate auto-merge. Commands run in `$PROJECT` and are operator-trusted (same trust level as CLI flags) | none |
| `--notify-cmd <cmd>` | Run-summary notification hook. Repeatable. Runs in the **launch** directory after the final summary (also after a crash-abort), receiving `FIXBUDDY_*` env vars (counts, `FIXBUDDY_ABORTED`, `FIXBUDDY_LOG_DIR`) and a human-readable summary on stdin. A failure warns but never changes the exit code. Not fired for `--dry-run`, empty queues, or Ctrl-C. Operator-trusted (same trust level as CLI flags) | none |
| `--auto-merge` | Enable auto-merge, overriding a config `auto_merge = false` | off |
| `--no-auto-merge` | Open PRs without requesting auto-merge | off |
| `--skip-label <label>` | Skip issues with this label | `fix:applied` |
Expand Down Expand Up @@ -170,6 +171,7 @@ auto_merge = true
label = bug
check_cmd = pnpm test
check_cmd = pnpm typecheck
notify_cmd = curl -s -d @- ntfy.sh/my-topic
```

**Allowlisted keys** (unknown keys warn and are ignored):
Expand All @@ -190,10 +192,11 @@ check_cmd = pnpm typecheck
| `auto_merge` | `--auto-merge` / `--no-auto-merge` | accepts `true` or `false` |
| `label` | `--label` | additive (see below) |
| `check_cmd` | `--check-cmd` | additive (see below) |
| `notify_cmd` | `--notify-cmd` | additive (see below) |

**Scalar keys** (all keys except `label` and `check_cmd`): CLI value wins; last writer wins across config files (project overrides global).
**Scalar keys** (all keys except `label`, `check_cmd`, and `notify_cmd`): CLI value wins; last writer wins across config files (project overrides global).

**Additive keys** (`label`, `check_cmd`): config entries and CLI entries are combined, not replaced. A config `label = bug` plus `--label security` on the CLI results in an AND filter for both labels. There is no way to remove a config-provided label or check command from the CLI.
**Additive keys** (`label`, `check_cmd`, `notify_cmd`): config entries and CLI entries are combined, not replaced. A config `label = bug` plus `--label security` on the CLI results in an AND filter for both labels. There is no way to remove a config-provided label, check, or notify command from the CLI.

**Security note:** config files are operator-controlled and parsed without `eval` or `source`. Values are assigned as plain strings, so a config containing shell metacharacters (e.g. `$(...)`) cannot execute code. `check_cmd` entries are run by fixbuddy itself, consistent with the same operator-trust model as CLI flags — only issue *content* is treated as untrusted input.

Expand Down Expand Up @@ -284,6 +287,13 @@ Use agy (Antigravity CLI) as a cross-vendor reviewer:
--fix-agent claude --review-agent agy
```

Get a push notification when an unattended batch finishes (anything that reads stdin works — ntfy, a Slack webhook, `mail`):

```bash
./fixbuddy.sh --repo owner/repo --project ~/code/repo --max 10 \
--notify-cmd 'curl -s -d @- ntfy.sh/my-fixbuddy-topic'
```

## Use in GitHub Actions

fixbuddy ships a composite action, so you can run the pipeline from a workflow with a single `uses:` line.
Expand Down Expand Up @@ -386,17 +396,15 @@ The PR remains open with `fix:pr-open`. GitHub will merge it later if branch pro
**What happens if CI fails?**
The PR stays open. The issue keeps `fix:pr-open`, so a later fixbuddy run does not create a duplicate PR.

**What happens if I interrupt a run (Ctrl-C)?**
The in-flight agent is stopped and the local branch is cleaned up; no label is set, so the issue simply stays in the queue. There is no separate resume mode because the labels already provide it: the next run picks up where the last one stopped (`fix:blocked` re-queues automatically, `fix:pr-open` prevents duplicate PRs).

**Can I use fixbuddy in GitHub Actions?**
Yes — use the composite action with `uses: Codevena/fixbuddy@v1`. See [Use in GitHub Actions](#use-in-github-actions) for the workflow snippet, required `permissions:` block, and CI prerequisites.

**Does it support Windows?**
Native Windows is not tested. WSL2 is the recommended Windows environment.

## Roadmap

- Optional notifications for run summaries
- Explicit resume mode for interrupted runs (interrupting a run cleans up the in-progress branch; the issue is retried automatically on the next run)

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).
Expand Down
4 changes: 2 additions & 2 deletions SHA256SUMS
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
b63b3e549ddb30f154482abf585313d56edd281e2493d878b6f154693c1d1674 fixbuddy.sh
ba3ba121a60ecb37fc5ca796f3cf5279a24a54566aeb2bb0dca3c3a1f4b7bd2f fixbuddy-wizard.sh
a83f4930628e30d51ad2def2ff06f76f6fa777e45cefc208b3995b35bfba9f38 fixbuddy.sh
fd2f5b80a8e42d289f922716820c1df7e7ce4c739d505a3a96ddd5dbe7139551 fixbuddy-wizard.sh
Loading