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
4 changes: 4 additions & 0 deletions .github/workflows/action-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ jobs:
with:
dry-run: "true"
max: "1"
# Exercises the notify-cmd input wiring (argument construction and
# fixbuddy's flag parsing). Dry-run never FIRES notifications, so
# this cannot have side effects.
notify-cmd: "echo smoke-notify"
# No agent CLI is installed here on purpose: --dry-run only lists target
# issues and never invokes an agent, so this exercises the wrapper's input
# parsing, command construction, and exit codes without real API keys.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ 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.1] - 2026-06-13

### Added
- **GitHub Action input `notify-cmd`** — exposes `--notify-cmd` to workflows.
One command per line (newline-separated, NOT comma-separated: shell commands
may legitimately contain commas; use a YAML block scalar for multiple). The
action-smoke workflow exercises the wiring on every PR.

## [0.7.0] - 2026-06-12

### Added
Expand Down Expand Up @@ -97,6 +105,7 @@ to existing flags.

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

[0.7.1]: https://github.com/Codevena/fixbuddy/compare/v0.7.0...v0.7.1
[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
14 changes: 6 additions & 8 deletions NEXT_SESSION.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# Next session

**v0.7.0 is released** (2026-06-12): `--notify-cmd` run-summary notification
hook (additive config key `notify_cmd`). PR #10, merged to `main`. Earlier the
same day, v0.6.0 shipped the agy migration (Gemini CLI successor) and the
read-only-stage guards.
**v0.7.1 is on branch `feat/action-notify-cmd-v0.7.1`** (2026-06-13), awaiting
merge/tag: the GitHub Action gains a `notify-cmd` input (newline-separated —
shell commands may contain commas). Released earlier: v0.7.0 (`--notify-cmd`
hook, 2026-06-12) and v0.6.0 (agy migration + read-only-stage guards).

## Status snapshot

- `main` is at the v0.7.0 merge; tags `v0.7.0` and floating `v1` point at it.
GitHub release published; CI green; install one-liner smoke-tested against
the fresh tag (checksums OK, `--version` → 0.7.0, `--help` shows notify-cmd).
- DoD gate passed (Codex PASS + Claude PASS); 20/20 integration tests; the
action-smoke workflow exercises the new input on the PR.
- Specs/plans: `docs/superpowers/specs/` + `docs/superpowers/plans/`
(2026-06-12 agy + notify-cmd documents).
- Tests: `tests/integration.sh` — 20 offline scenarios, runs in CI.
Expand All @@ -28,7 +27,6 @@ read-only-stage guards.

## Idea backlog (not committed)

- `notify-cmd` input for the GitHub Action wrapper
- Log retention/pruning for `~/.fixbuddy/runs`
- New agents as they appear (validation list + run_agent case + wizard + docs)
- The `--help` sed range (`2,51p`) must be adjusted whenever header lines are
Expand Down
7 changes: 4 additions & 3 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.7.0/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.1/install.sh | bash
```

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`.
This downloads the pinned `v0.7.1` 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.7.0/install.sh -o install.sh
curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.1/install.sh -o install.sh
less install.sh # read it
bash install.sh # then run it
```
Expand Down Expand Up @@ -381,6 +381,7 @@ The action copies each run's logs into `fixbuddy-logs/` in the workspace. Add an
| `base-branch` | `--base` | auto-detect |
| `auto-merge` | `--no-auto-merge` when `false`; `--auto-merge` when `true` | `true` |
| `dry-run` | `--dry-run` when `true` — lists targets, makes no changes | `false` |
| `notify-cmd` | `--notify-cmd` (one command **per line** — newline-separated because shell commands may contain commas; use a YAML block scalar for multiple) | none |
| `github-token` | `GH_TOKEN` for `gh` | `${{ github.token }}` |

Running fixbuddy in CI gives AI agents repository write access through whatever token you hand them. Read [SECURITY.md](SECURITY.md) before enabling this on a repository that matters.
Expand Down
4 changes: 2 additions & 2 deletions SHA256SUMS
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
a83f4930628e30d51ad2def2ff06f76f6fa777e45cefc208b3995b35bfba9f38 fixbuddy.sh
fd2f5b80a8e42d289f922716820c1df7e7ce4c739d505a3a96ddd5dbe7139551 fixbuddy-wizard.sh
6e982121febcdd855060591257e124816e1c6f74eb6471ca5c6ea11dd39ad48b fixbuddy.sh
2c29a25de377d9f5b8d02228c691677f93bc98fc3ab34f40fedb80daa0a65fe1 fixbuddy-wizard.sh
16 changes: 16 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ inputs:
description: "List target issues only, make no changes"
required: false
default: "false"
notify-cmd:
description: "Run-summary notification command(s), ONE PER LINE (use a YAML block scalar). Each non-empty line becomes a repeated --notify-cmd flag. Newline-separated on purpose: shell commands may contain commas. Not fired in dry-run."
required: false
default: ""
github-token:
description: "Token with contents:write, pull-requests:write, issues:write"
required: false
Expand All @@ -71,6 +75,7 @@ runs:
FIXBUDDY_BASE: ${{ inputs.base-branch }}
FIXBUDDY_AUTO_MERGE: ${{ inputs.auto-merge }}
FIXBUDDY_DRY_RUN: ${{ inputs.dry-run }}
FIXBUDDY_NOTIFY_CMD: ${{ inputs.notify-cmd }}
FIXBUDDY_ACTION_PATH: ${{ github.action_path }}
run: |
set -euo pipefail
Expand Down Expand Up @@ -109,6 +114,17 @@ runs:
done
fi

# NEWLINE-separated notify commands become repeated --notify-cmd flags.
# Newlines instead of commas on purpose: shell commands may legitimately
# contain commas, and a YAML block scalar makes one-per-line natural.
if [ -n "$FIXBUDDY_NOTIFY_CMD" ]; then
while IFS= read -r _n; do
_n="${_n#"${_n%%[![:space:]]*}"}"
_n="${_n%"${_n##*[![:space:]]}"}"
if [ -n "$_n" ]; then cmd+=(--notify-cmd "$_n"); fi
done <<< "$FIXBUDDY_NOTIFY_CMD"
fi

"${cmd[@]}"

- name: Collect logs
Expand Down
52 changes: 52 additions & 0 deletions docs/superpowers/specs/2026-06-13-action-notify-cmd-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Design: `notify-cmd` input for the GitHub Action — v0.7.1

Date: 2026-06-13. Status: approved (user picked this backlog item explicitly).

## Problem

v0.7.0 added `--notify-cmd`, but the composite action (`action.yml`) does not
expose it — CI users can only reach it via a committed `.fixbuddy.conf`. The
action's input set is otherwise complete.

## Decision

New optional action input `notify-cmd`, **newline-separated** (one command per
line), each non-empty trimmed line becoming one repeated `--notify-cmd` flag.

Newlines, NOT commas: the existing `label` input is comma-separated, but shell
commands may legitimately contain commas (`curl -d 'a,b' ...`), so comma
splitting would corrupt them. YAML block scalars make multi-line inputs
natural:

```yaml
with:
notify-cmd: |
curl -s -d @- ntfy.sh/my-topic
./scripts/post-to-slack.sh
```

## Changes

- `action.yml`:
- input `notify-cmd` (description documents one-command-per-line, default `""`),
- passed via `FIXBUDDY_NOTIFY_CMD` env (same injection-safe pattern as the
other inputs),
- parsing loop mirroring the `label` loop but splitting on newlines via
`while IFS= read -r` over a herestring, trimming whitespace, skipping
empty lines.
- `.github/workflows/action-smoke.yml`: pass `notify-cmd: "echo smoke-notify"`
so the wiring is exercised on every PR (dry-run never *fires* notify by
design, but argument construction and fixbuddy's flag parsing run).
- README: row in the action Inputs table.
- Release housekeeping: patch release **v0.7.1** (version bumps everywhere,
CHANGELOG, fresh SHA256SUMS — scripts change only by their version string,
but the floating `v1` tag must move for action consumers to get the input).

## Testing

- Local: YAML validation; an extracted-snippet test of the parsing loop
(multi-line input incl. blank line and surrounding whitespace → exact
expected argv); `bash -n`/`shellcheck`/full integration suite unchanged.
- CI: the extended action-smoke dry-run exercises the new input end-to-end on
the PR.
- DoD review gate (Codex + Claude) before merge.
4 changes: 2 additions & 2 deletions fixbuddy-wizard.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# fixbuddy-wizard.sh v0.7.0 — beginner-friendly launcher for fixbuddy.sh
# fixbuddy-wizard.sh v0.7.1 — beginner-friendly launcher for fixbuddy.sh
#
# Walks a user through the required flags via interactive prompts, validates
# prerequisites, shows a preview of the exact command, and then exec's fixbuddy.sh.
Expand Down Expand Up @@ -32,7 +32,7 @@ printf "%s" "${MAG}${BOLD}"
cat <<'EOF'

╔═══════════════════════════════════════════════════╗
║ fixbuddy wizard v0.7.0
║ fixbuddy wizard v0.7.1
║ Turn GitHub issues into reviewed PRs ║
╚═══════════════════════════════════════════════════╝
EOF
Expand Down
4 changes: 2 additions & 2 deletions fixbuddy.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# fixbuddy v0.7.0 — two-agent pipeline for autonomous issue fixing
# fixbuddy v0.7.1 — two-agent pipeline for autonomous issue fixing
#
# Pipeline per issue:
# 1. VERIFY (fix-agent) — is this real? → PROCEED / FALSE-POSITIVE / BLOCKED
Expand Down Expand Up @@ -51,7 +51,7 @@
# filter), and a config-provided label/check/notify cannot be removed from the CLI.

set -uo pipefail
VERSION="0.7.0"
VERSION="0.7.1"

# -------- Defaults --------
REPO=""
Expand Down
10 changes: 5 additions & 5 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
# install.sh — installer for fixbuddy (https://github.com/Codevena/fixbuddy)
#
# Quick install:
# curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.0/install.sh | bash
# curl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.1/install.sh | bash
#
# Options (pass after the URL as: | bash -s -- <options>):
# --prefix PATH Install into PATH instead of the auto-detected location
# --ref TAG Install the fixbuddy scripts from a specific git ref.
# Default: v0.7.0. Use --ref main for the latest commit.
# Default: v0.7.1. Use --ref main for the latest commit.
# -y, --yes Skip the sudo confirmation prompt
# -h, --help Show this help and exit
#
Expand All @@ -16,7 +16,7 @@
set -euo pipefail

REPO_SLUG="Codevena/fixbuddy"
DEFAULT_REF="v0.7.0"
DEFAULT_REF="v0.7.1"
RAW_BASE="https://raw.githubusercontent.com/${REPO_SLUG}"
SCRIPTS=(fixbuddy.sh fixbuddy-wizard.sh)

Expand All @@ -40,11 +40,11 @@ usage() {
cat >&2 <<'EOF'
install.sh — installer for fixbuddy

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

Options (pass as: | bash -s -- <options>):
--prefix PATH Install into PATH instead of the auto-detected location
--ref TAG Install fixbuddy scripts from a specific git ref (default: v0.7.0;
--ref TAG Install fixbuddy scripts from a specific git ref (default: v0.7.1;
use --ref main for the latest commit)
-y, --yes Skip the sudo confirmation prompt
-h, --help Show this help and exit
Expand Down