Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f308eea
Sprint 13: integrate gr2 team-workspace foundation (#509)
laynepenney Apr 8, 2026
1035a6f
ci: split Windows tests into non-blocking lane (#487)
laynepenney Apr 8, 2026
a8f6a3f
feat: add machine-level manifest repo caches (#484)
laynepenney Apr 8, 2026
737da04
feat: add cache-backed checkout creation (#485)
laynepenney Apr 8, 2026
af30ce9
feat: add checkout lifecycle commands (#489)
laynepenney Apr 8, 2026
6f5b10e
refactor: strip premium prompts from migrate flow (#510)
laynepenney Apr 9, 2026
8ce00e6
Sprint 16 ceremony: grip
laynepenney Apr 10, 2026
8e5e4b6
Sprint 17 ceremony: grip (#531)
laynepenney Apr 11, 2026
8da763f
Sprint 18 ceremony: grip (#541)
laynepenney Apr 12, 2026
35278a9
docs: design gr2 repo maintenance and lanes (#543)
laynepenney Apr 12, 2026
8ccb343
feat: add gr2 repo status surface (#548)
laynepenney Apr 12, 2026
93a2ca2
feat: add gr2 lane metadata surface (#549)
laynepenney Apr 12, 2026
dd391bc
docs: ratify gr2 UX model and workflow (#557)
laynepenney Apr 12, 2026
12a1293
feat: merge atlas gr2 design stack (exec surface + prototypes) (#558)
laynepenney Apr 12, 2026
8e6083c
feat: gr2 Python CLI, prototype probes, and transition audit (#560)
laynepenney Apr 13, 2026
c0d5344
chore: release v0.19.0 (#565)
laynepenney Apr 14, 2026
9530863
feat: gr spawn down graceful shutdown
laynepenney Apr 14, 2026
688f965
feat: add python-first gr2 workspace orchestration
laynepenney Apr 14, 2026
17f57cc
chore: release v0.20.0
laynepenney Apr 14, 2026
84de26a
Sprint 20-21 ceremony: gr2 event system, sync engine, QA arena (#576)
laynepenney Apr 15, 2026
69edd33
fix: remove agent awareness from gr2 (boundary enforcement)
laynepenney Apr 15, 2026
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
32 changes: 23 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,22 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Run tests
run: cargo test --all-features

test-windows:
name: Test (windows-latest)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4

Expand All @@ -83,10 +98,7 @@ jobs:
- name: Run tests
run: cargo test --all-features
env:
# Windows: link advapi32 for libgit2-sys (needed for test crates that
# don't go through build.rs) and increase stack to 8 MB (debug builds
# overflow the default 1 MB Windows stack during clap parsing)
RUSTFLAGS: ${{ matrix.os == 'windows-latest' && '-C link-arg=advapi32.lib -C link-arg=/STACK:8388608' || '' }}
RUSTFLAGS: '-C link-arg=advapi32.lib -C link-arg=/STACK:8388608'

build:
name: Build Release
Expand Down Expand Up @@ -149,14 +161,16 @@ jobs:
- name: Run spawn integration tests
run: GR=./target/debug/gr ./tests/spawn_graceful_shutdown.sh

# Summary job for branch protection - requires all other jobs to pass
# Summary job for branch protection - requires all jobs except Windows to pass.
# Windows tests run separately (test-windows) and are visible but non-blocking,
# since they are significantly slower and should not gate PR merges.
ci:
name: CI
runs-on: ubuntu-latest
needs: [check, fmt, clippy, test, build, bench, integration]
if: always()
steps:
- name: Check all jobs passed
- name: Check all required jobs passed
run: |
if [[ "${{ needs.check.result }}" != "success" ]] || \
[[ "${{ needs.fmt.result }}" != "success" ]] || \
Expand All @@ -165,7 +179,7 @@ jobs:
[[ "${{ needs.build.result }}" != "success" ]] || \
[[ "${{ needs.bench.result }}" != "success" ]] || \
[[ "${{ needs.integration.result }}" != "success" ]]; then
echo "One or more jobs failed"
echo "One or more required jobs failed"
exit 1
fi
echo "All jobs passed"
echo "All required jobs passed"
24 changes: 24 additions & 0 deletions .gr2/hooks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[repo]
name = "grip"

[[files.link]]
src = "{workspace_root}/config/claude.md"
dest = "{repo_root}/CLAUDE.md"
if_exists = "overwrite"

[[lifecycle.on_materialize]]
name = "cargo-build"
command = "cargo build"
cwd = "{repo_root}"
when = "first_materialize"
on_failure = "block"

[[lifecycle.on_enter]]
name = "cargo-check"
command = "cargo check"
cwd = "{repo_root}"
when = "always"
on_failure = "warn"

[policy]
required_reviewers = 1
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.20.0] - 2026-04-14

### Added
- **`gr spawn down` graceful shutdown** (#567)
- Three-phase shutdown: send `/exit` to agents, poll `pane_dead`, force-kill remaining
- `pane_exit_state()` with tri-state return (`Option<bool>`) for proper tmux error handling
- Per-agent shutdown via `--agent <name>` flag
- Configurable timeout via `--timeout` flag (default 10s)
- Full error reporting on all tmux operations

- **Python-first gr2 workspace orchestration** (#566)
- Complete Python gr2 CLI with typer: spec, plan, apply, exec, review, workspace, repo, lane, lease commands
- Cache-backed materialization for workspace apply
- Structured hook runtime with dataclasses and lifecycle stages
- Review checkout-pr with remote refetch on existing branches
- gr1 detect and migration commands

## [0.19.0] - 2026-04-14

### Added
- **gr2 team-workspace model** — declarative spec, plan, and apply lifecycle
- `gr2 init` creates team workspace structure (agents/, repos/, .grip/)
- `gr2 spec show/validate` for workspace spec management
- `gr2 plan` diffs workspace spec into an execution plan
- `gr2 apply` materializes repos via git clone into unit workspaces (#514)
- `gr2 apply --autostash` automatically stashes and restores dirty repos (#534)
- Partial unit convergence: detects and clones missing repos in existing units (#539)
- `gr2 team add/list/remove` for agent workspace management
- `gr2 repo add/list/remove` for repo registry
- `gr2 unit add/list/remove` for unit registry
- Guard checks with dirty state detection via `git status --porcelain`
- Stash state audit trail in `.grip/state/stash.toml`
- **Checkout lifecycle commands** (#489) — `gr checkout --create`, `--orphan`
- **Cache-backed checkout creation** (#485) — checkout creates from local cache when available
- **Machine-level manifest repo caches** (#484) — shared manifest caches across workspaces
- **`gr migrate in-place`** (#458) — upgrade existing workspaces without re-cloning
- **E2E demo script** (#454) — automated release verification

### Changed
- **gr2 binary removed from main crate** — gr2 development continues as a standalone Python CLI; Rust gr2 code retained as library
- CI: Windows tests run in non-blocking lane (#487)
- Stripped premium prompts from migrate flow (#510)

### Fixed
- Spawn model passthrough from agents.toml (#474)
- Root manifest creation during migrate in-place (#467)
- Auto-reclone spaces/main when not a git repo (#470)
- Migrate linked worktrees into griptrees (#466)
- Preserve .env at gripspace root during worktree repair
- Stable pane IDs for dashboard targeting (#453)
- Benchmark CI fixture literals

## [0.17.1] - 2026-03-12

### Added
Expand Down
Loading
Loading