Ship: Branch, Commit, Push, Release

The Ship pillar takes a clean working tree to a tagged release. Branch, commit (with optional AI-generated messages), push, then bump version and tag. PR creation is via fledge github prs create (from fledge-plugin-github) or directly with gh pr create.

Git workflow with fledge work

fledge work start add-auth                       # creates leif/feat/add-auth
fledge work start fix-crash --branch-type fix    # leif/fix/fix-crash
fledge work start login --issue 42 --branch-type fix  # leif/fix/42-login
fledge work start v0.16 --branch-type chore      # leif/chore/v0.16
fledge work status                               # current branch + ahead/behind + dirty count

Commit changes

fledge work commit stages and commits with conventional-commit formatting. The commit type is inferred from the branch prefix (e.g. feat/feat). With --ai it sends the staged diff to the configured LLM to generate the message.

fledge work commit -m "add search index"         # explicit message
fledge work commit --all -m "wire up search"     # git add -A first
fledge work commit --ai                          # AI-generated message
fledge work commit --ai --provider ollama --model llama3.2:latest
fledge work commit -t fix -m "handle nil case"   # override commit type
fledge work commit --json                        # {schema_version, action, hash, message, branch}

Push to remote

fledge work push pushes the current branch to origin with -u tracking. It refuses to push the default branch or when there is nothing to push. The pre_push plugin lifecycle hook runs before the push.

fledge work push                                 # push current branch
fledge work push --force                         # --force-with-lease for safety
fledge work push --json                          # {schema_version, action, branch, remote, force}

Open a PR

Use fledge github prs create (from fledge-plugin-github) or the gh CLI directly:

fledge github prs create --fill                              # infer title/body from commits
fledge github prs create --ai                                # AI-generated title/body with preview
fledge github prs create --ai --draft                        # AI-generated, open as draft
fledge github prs create --title "..." --body "..." --draft  # scripted
fledge github prs create --base develop

GitHub integration (plugin)

Issues, PRs, and CI checks live in fledge-plugin-github. Install with fledge plugins install --defaults.

See GitHub Integration for the full command reference and setup instructions.

Changelogs with fledge changelog

Generate a changelog from git tags and conventional commits. See Changelog for the commit format reference and full options.

Releases with fledge release

Cut a release. Bump the version, generate changelog, create an annotated git tag, and optionally push. Pure git, no GitHub-specific calls (the GitHub Releases UI object is created separately, e.g. via gh release create).

fledge release patch                          # bump patch version
fledge release minor --push                   # bump minor + push to remote
fledge release major --pre-lane ci            # run CI lane first, then bump major
fledge release 2.0.0 --dry-run                # preview a specific version bump
fledge release 2.0.0 --dry-run --json         # preview as JSON envelope
fledge release patch --no-tag --no-changelog  # just bump version, skip extras
fledge release minor --allow-dirty            # release even with uncommitted changes

Options:

  • --dry-run: Preview without making changes
  • --no-tag: Skip git tag
  • --no-changelog: Skip changelog generation
  • --no-bump: Skip bumping any version files (tag-only)
  • --push: Push commit and tag to remote
  • --pre-lane <name>: Run a lane before releasing (e.g. ci)
  • --allow-dirty: Allow uncommitted changes
  • --json: Emit a JSON envelope. Suppresses prose output

Typical flow

fledge work start add-feature        # 1. branch
# ... code ...
fledge work commit --ai --all        # 2. AI-drafted conventional commit
fledge lanes run pre-commit          # 3. fmt + lint + test + spec-check
fledge work push                     # 4. push to remote
fledge github prs create --fill --draft  # 5. open PR (or fledge-plugin-github)
fledge github checks                 # 6. wait for CI (fledge-plugin-github)
gh pr merge <num> --squash           # 7. merge
git checkout main && git pull
fledge release minor --push          # 8. version bump + changelog + tag
gh release create v<X.Y.Z> --notes-file ...   # 9. GitHub Release object