Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
16097a4
old buf updated to the latest possible tag, new buf added
onokonem May 6, 2026
8d1e9d0
docs: initialize project
onokonem May 6, 2026
8333885
chore: add project config
onokonem May 6, 2026
be46890
docs: add research summary
onokonem May 6, 2026
3dcadfc
docs: define v1 requirements
onokonem May 6, 2026
b56533e
docs: create roadmap (5 phases)
onokonem May 6, 2026
8f4dc02
docs(01): capture phase context
onokonem May 6, 2026
527861c
docs(state): record phase 1 context session
onokonem May 6, 2026
1c44943
docs(01): research phase domain — code generation
onokonem May 6, 2026
5f305e5
docs(01): create phase 1 plans for code generation
onokonem May 6, 2026
995e644
docs(01): create phase 1 plan (2 plans, 2 waves)
onokonem May 6, 2026
d766bd5
chore(01-01): switch proto source to buf-v1.69.0 and remove go-grpc p…
onokonem May 7, 2026
fba4d35
chore(01-01): upgrade connectrpc.com/connect to v1.18.1
onokonem May 7, 2026
2f4de33
docs(01-01): complete proto source switch plan summary
onokonem May 7, 2026
23f37ed
feat(01-02): regenerate proto code from v1.69.0 definitions
onokonem May 7, 2026
9625113
chore(01-02): clean dependencies after proto regeneration
onokonem May 7, 2026
ac3f68d
docs(01-02): complete code regeneration plan summary
onokonem May 7, 2026
ff2090b
docs(01): complete phase 1 — code generation verified
onokonem May 7, 2026
fe3eec4
docs(02): capture phase 2 context
onokonem May 7, 2026
22652e2
docs(state): record phase 2 context session
onokonem May 7, 2026
be8f094
docs(02): expand E2E scope to both old and modern buf CLI
onokonem May 7, 2026
50f1603
docs(02): research phase domain for handler adaptation
onokonem May 7, 2026
65daf61
docs(02): create phase 2 plan — handler adaptation verification + E2E…
onokonem May 7, 2026
43b0214
fix(02): revise plan verify block to run actual E2E test
onokonem May 7, 2026
26399c1
docs(02): plan phase 2 — handler adaptation baseline + E2E smoke tests
onokonem May 7, 2026
345f87e
test(02-01): add E2E smoke tests for buf v1.30.1 and v1.69.0
onokonem May 7, 2026
29dde7d
docs(02-01): complete handler adaptation verification + E2E smoke tes…
onokonem May 7, 2026
ee216a1
chore: merge executor worktree (worktree-agent-a158fa44362699ec4)
onokonem May 7, 2026
2625d49
docs(02): add code review report
onokonem May 7, 2026
037edec
test(02): persist human verification items as UAT
onokonem May 7, 2026
f89d2c1
fix(02): add missing cache config to E2E smoke test
onokonem May 7, 2026
be8d383
docs(02): complete phase 2 execution — handler adaptation verified
onokonem May 7, 2026
6cd5ba3
docs(03): capture phase context
onokonem May 7, 2026
3d6e46b
docs(state): record phase 3 context session
onokonem May 7, 2026
ac1d000
docs(03): research phase 3 test infrastructure domain
onokonem May 7, 2026
820acf9
docs(03): create phase 3 plan — testutil package and smoke test refactor
onokonem May 7, 2026
6313ebb
docs(03): create phase 3 plan — test infrastructure
onokonem May 7, 2026
247bd27
docs(state): record phase 3 planned — 2 plans, 2 waves
onokonem May 7, 2026
1317ba0
feat(03-01): create testutil package with TestConfig and config gener…
onokonem May 7, 2026
ea75708
feat(03-01): add server.go and bufbin.go to testutil package
onokonem May 7, 2026
a9e4301
chore(03-01): add testdata/buf/ to .gitignore
onokonem May 7, 2026
7abb317
docs(03-01): complete testutil package plan summary
onokonem May 7, 2026
1ea5273
refactor(03-02): use testutil package in smoke test
onokonem May 7, 2026
ac01e3e
test(03-02): add internal validation tests for testutil helpers
onokonem May 7, 2026
daca8e5
docs(03-02): complete smoke test refactor plan summary
onokonem May 7, 2026
474f638
docs(phase-3): complete phase execution — test infrastructure built
onokonem May 7, 2026
996c714
docs(04): capture phase context — old protocol validation decisions
onokonem May 7, 2026
2186a48
docs(state): record phase 4 context session
onokonem May 7, 2026
8fc4024
docs(04): research old protocol validation — buf dep update not in v1…
onokonem May 7, 2026
a6a1647
docs(04): plan old protocol validation — expose server output, two-st…
onokonem May 7, 2026
c432cc0
docs(04): create phase plan — old protocol validation
onokonem May 7, 2026
36cf296
feat(04-01): expose server output buffer from StartServer
onokonem May 7, 2026
d185ed0
feat(04-01): add two-step buf mod update test for OLD-02
onokonem May 7, 2026
8baab62
docs(04-01): complete old protocol validation plan
onokonem May 7, 2026
cf842d6
docs(phase-04): complete phase execution
onokonem May 7, 2026
b0cc54b
docs(05): capture phase context — new protocol validation
onokonem May 7, 2026
770e67d
docs(state): record phase 5 context session
onokonem May 7, 2026
90b3952
docs(05): research phase domain — new protocol validation
onokonem May 7, 2026
c006127
docs(05): create phase plan — new protocol validation with v1.69.0
onokonem May 7, 2026
cc489c3
docs(05): finalize planning — validation strategy and state update
onokonem May 7, 2026
dd31fcf
feat(05-01): add RunBufDepUpdate helper for buf dep update testing
onokonem May 7, 2026
e4605ca
test(05-01): add new protocol tests for buf v1.69.0
onokonem May 7, 2026
6aced26
docs(05-01): complete plan summary — v1beta1 protocol discovery findings
onokonem May 7, 2026
75487cf
feat(05-02): add v1beta1 CommitService handler for modern buf CLI
onokonem May 7, 2026
2953ef0
feat(05-02): implement full v1beta1 protocol for buf v1.69.0+
onokonem May 7, 2026
3bc1455
docs(05): finalize phase — roadmap and state updated to 100%
onokonem May 7, 2026
b9d17bf
docs(v1.2): initialize milestone — dependency modernization
onokonem May 7, 2026
287e6f6
docs(06): capture phase context
onokonem May 7, 2026
495166a
docs(state): record phase 6 context session
onokonem May 7, 2026
57f411c
docs(phase-6): create dependency upgrade plans and research
onokonem May 7, 2026
3caaaa3
chore: update Phase 6 status to planned
onokonem May 7, 2026
ad86839
feat(phase-6): upgrade Go to 1.26 and all dependencies
onokonem May 8, 2026
17ef076
chore(phase-6): run go mod tidy after dependency upgrades
onokonem May 8, 2026
ea327b6
docs(phase-6): add plan summaries
onokonem May 8, 2026
dac9e1f
docs(phase-6): add verification report
onokonem May 8, 2026
a35d803
chore(phase-6): mark phase complete, advance to Phase 7
onokonem May 8, 2026
6f9f64d
docs(phase7): capture phase context
onokonem May 8, 2026
b21b028
docs(phase-7): create phase plan
onokonem May 8, 2026
63729e0
feat(07-01): regenerate proto code from buf v1.69.0
onokonem May 8, 2026
d7d4b53
docs(07-02): add E2E test summary
onokonem May 8, 2026
2a2bf9b
docs(phase-7): add verification report
onokonem May 8, 2026
6c99dd1
docs(phase-8): capture phase context
onokonem May 8, 2026
72e670d
Replace golang.org/x/exp imports with stdlib equivalents
onokonem May 8, 2026
6cfa088
docs(phase-8): add SUMMARY.md for Go code modernization
onokonem May 8, 2026
080f6e3
forgotten files descovered
onokonem May 8, 2026
ad41078
docs(phase-9): capture submodule cleanup context
onokonem May 8, 2026
525c878
docs: update roadmap and state for phase 9
onokonem May 8, 2026
55e3875
docs(09): create phase plan for submodule cleanup
onokonem May 8, 2026
482ae14
docs(roadmap): update Phase 9 details and progress
onokonem May 8, 2026
fe22754
feat(09): remove old buf submodule and promote buf-v1.69.0 to canonical
onokonem May 9, 2026
7f2f7fb
feat(09): update generate.go and regenerate proto code
onokonem May 9, 2026
0ec055e
docs(09): add phase summary
onokonem May 9, 2026
f990985
docs(roadmap): mark Phase 9 complete
onokonem May 9, 2026
1567391
feat(10-03): shared download helper + HTTP hardening
onokonem May 9, 2026
77b8ad3
refactor(connect): split commits.go helpers into separate file
onokonem May 11, 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
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
.idea
bin
bin

.claude/
draft.txt

testdata/buf/
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
url = https://github.com/bufbuild/buf.git
[submodule "api/_third_party/protobuf"]
path = api/_third_party/protobuf
url = https://github.com/protocolbuffers/protobuf.git
url = https://github.com/protocolbuffers/protobuf.git
54 changes: 54 additions & 0 deletions .planning/MILESTONES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: EasyP Buf Proxy Milestones
description: >
Track shipped milestones and their outcomes.
Add new entries at the top when a milestone completes.
Do not reorder existing entries.
---

# Milestones

## v1.2 Dependency Modernization — 2026-05-10

**Goal:** Upgrade Go to 1.26, update all dependencies, clean up codebase, add unit tests

**Outcome:** Complete

**What shipped:**
- Go 1.26 + connect-go v1.19.x + all dependencies upgraded
- Proto code regenerated from buf v1.69.0 with new connect-go
- Deprecated x/exp imports replaced with stdlib (slog, slices)
- Old buf submodule removed, buf-v1.69.0 promoted to canonical
- 5 critical bugs fixed (panic, inverted checks, partial results)
- HTTP hardening (timeouts, body limits) + shared download helper
- Unit test suite with 14 tests

**Phases:** 5 | **Plans:** 10 | **Tests:** 14 unit + 9 UAT
**Timeline:** 2 days (2026-05-07 → 2026-05-09)
**Known deferred items at close:** 2 (Phase 03/05 human tests from v1.1, see STATE.md)

**Accomplishments:**
1. Go 1.26 + all dependencies upgraded to latest compatible versions
2. Proto code regenerated with connect-go v1.19.x — 29 connect files
3. Deprecated golang.org/x/exp replaced with stdlib equivalents
4. Old buf submodule (v1.9.0) removed, buf-v1.69.0 promoted via git mv
5. 5 critical bugs fixed with nil-on-error pattern
6. HTTP clients hardened with configurable timeouts and body limits
7. Shared download helper extracted (DRY across GitHub/BitBucket)
8. Unit test suite established covering bug fixes and key API surfaces

## v1.1 Protocol Modernization — 2026-05-07

**Goal:** Add v1beta1 API support for modern buf CLI while keeping v1alpha1 for old clients

**Outcome:** ✓ Complete

**What shipped:**
- v1beta1 API handlers: GetCommits, GetGraph, Download, GetModules
- B4 digest computation (SHAKE256)
- In-memory caching across RPC chain
- IPv4-only GitHub transport for macOS compatibility
- E2E tests for both buf v1.30.1 and v1.69.0+

**Version:** v1.30.1
**Completed:** 2026-05-07
82 changes: 82 additions & 0 deletions .planning/PROJECT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# EasyP Buf Proxy — Protocol Modernization

## Current Milestone: Planning Next

**Goal:** Define next milestone scope (performance, new endpoints, or other improvements)

## What This Is

A Go-based proxy server that translates Buf CLI registry requests into VCS API calls (GitHub, BitBucket, local git). The server implements both the deprecated Buf `registry.v1alpha1` protocol (buf v1.30.1) and the modern Buf protocol (v1.69.0+) via Connect RPC, serving both simultaneously for backward compatibility.

## Core Value

The proxy must correctly serve both old (v1.30.1) and modern (v1.69.0+) Buf CLI clients simultaneously, so that existing users are not broken during migration.

## Requirements

### Validated

- ✓ Buf registry proxy for deprecated `registry.v1alpha1` protocol — v1.0
- ✓ Multi-provider architecture (local git, GitHub, BitBucket) — v1.0
- ✓ Cache layer (noop, local filesystem, Artifactory) — v1.0
- ✓ TLS with optional mTLS support — v1.0
- ✓ Structured logging with sensitive header masking — v1.0
- ✓ v1beta1 API support for modern buf CLI — v1.1
- ✓ B4 digest computation (SHAKE256) — v1.1
- ✓ E2E tests for both buf versions — v1.1
- ✓ Go 1.26 + connect-go v1.19.x — v1.2
- ✓ Proto regenerated from buf v1.69.0 — v1.2
- ✓ All dependencies at latest compatible versions — v1.2
- ✓ Code quality fixes + unit test suite — v1.2

### Active

- [ ] Performance benchmarking and optimization
- [ ] New API endpoints as needed

### Out of Scope

- BitBucket provider testing — GitHub provider is sufficient for validation
- Local git provider testing — not needed for protocol validation
- Removing the old v1alpha1 protocol — both protocols must coexist
- Artifactory cache testing — not relevant to protocol correctness
- UI changes — this is a backend-only project

## Context

- Tech stack: Go 1.26, Connect RPC v1.19.x, protobuf, buf v1.69.0 proto definitions
- Codebase: ~324K LOC Go (including generated proto code)
- Submodule: `api/_third_party/buf` points to buf v1.69.0 proto definitions
- TLS certs for local testing at `~/local-tls/server/` (self-signed)
- Server is stateless — no database, relies on external VCS APIs and optional caching
- Unit test suite: 14 tests across 4 packages
- E2E tests require `EASYP_GITHUB_TOKEN` environment variable
- HTTP clients hardened with 30s timeout and 50MB body limit

## Constraints

- **Tech Stack**: Go 1.26, Connect RPC, protobuf — must stay within existing stack
- **Protocol Compatibility**: Old protocol must continue working unchanged while new protocol is active
- **Proto Definitions**: Modern protocol proto files available in repo as git submodule
- **TLS**: Required for all tests — buf CLI mandates TLS
- **Testing**: Use real `buf` CLI binaries against real TLS server hitting real GitHub API

## Key Decisions

| Decision | Rationale | Outcome |
|----------|-----------|---------|
| Both protocols active simultaneously | Backward compatibility — existing clients must not break during migration | ✓ Good |
| GitHub-only provider testing | GitHub is the primary provider; testing one real provider is sufficient | ✓ Good |
| Real buf binary + real server + TLS for tests | Tests must prove actual buf CLI can communicate with the proxy | ✓ Good |
| Go 1.26 minimum version | connect-go v1.19.x requires Go 1.24+; Go 1.26 is latest stable | ✓ Good |
| Old buf submodule removed | buf-v1.69.0 is canonical; old v1.9.0 defs are deprecated | ✓ Good |
| All error paths return nil | Prevents silent data corruption from partial results | ✓ Good |
| Configurable HTTP timeouts/body limits | Hardening without sacrificing configurability | ✓ Good |
| Shared download helper (DRY) | GitHub and BitBucket had identical download-hash-accumulate logic | ✓ Good |

## Evolution

This document evolves at phase transitions and milestone boundaries.

---
*Last updated: 2026-05-10 after v1.2 milestone completion*
115 changes: 115 additions & 0 deletions .planning/RETROSPECTIVE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Project Retrospective

*A living document updated after each milestone. Lessons feed forward into future planning.*

## Milestone: v1.2 — Dependency Modernization

**Shipped:** 2026-05-10
**Phases:** 5 | **Plans:** 10 | **Commits:** 32

### What Was Built

- Go 1.26 upgrade with all dependencies at latest compatible versions
- Proto code regenerated from buf v1.69.0 with connect-go v1.19.x
- Deprecated `golang.org/x/exp` imports replaced with stdlib
- Old buf submodule (v1.9.0) removed, buf-v1.69.0 promoted to canonical
- 5 critical bugs fixed (panic, inverted checks, partial results)
- HTTP hardening (30s timeout, 50MB body limit) + shared download helper
- Unit test suite with 14 tests across 4 packages

### What Worked

- Wave-based parallel execution for code quality fixes — 4 waves completed efficiently
- Bug fixes first, then refactoring, then tests — logical ordering prevented rework
- Shared download helper extraction eliminated real duplication (GitHub + BitBucket)
- ConfigHash standardization caught potential cache key divergence across providers

### What Was Inefficient

- Artifactory PUT inverted status check was a pre-existing bug masked by success path — should have been caught in v1.1 code review
- Phase 10 scope grew beyond original "dependency modernization" into code quality — but worth it given bugs found

### Patterns Established

- All error paths return `nil` on error, never partial results
- All providers use `r.repo.Hash()` for ConfigHash (single source of truth)
- HTTP clients have configurable timeout and body limit at construction time
- Unit tests focus on bug fix surfaces and critical API boundaries

### Key Lessons

1. After dependency upgrades, run a code quality pass — version bumps expose latent bugs that were masked by older library behavior
2. Submodule cleanup (rename via `git mv`) should happen immediately after validation to prevent confusion about which proto source is canonical
3. Shared helper extraction works well when two providers have identical download-hash-accumulate logic — generics (`FilterEntries[T]`) handle struct differences cleanly
4. Inverted boolean conditions (`< 200 && >= 300` instead of `>= 300`) are invisible to tests unless you test the failure path explicitly

### Cost Observations

- Model mix: 100% opus
- Sessions: 2 (2026-05-07/08 for phases 6-9, 2026-05-09/10 for phase 10 + UAT)
- Notable: Phase 10 (code quality) was unplanned in original v1.2 scope but delivered 5 bug fixes and 14 tests — high ROI for a single phase

---

## Milestone: v1.1 — Protocol Modernization

**Shipped:** 2026-05-07
**Phases:** 5 | **Plans:** 8

### What Was Built

- v1beta1 API handlers for modern buf CLI (GetCommits, GetGraph, Download, GetModules)
- B4 digest computation (SHAKE256)
- In-memory caching across RPC chain
- IPv4-only GitHub transport for macOS compatibility
- E2E tests for both buf v1.30.1 and v1.69.0+

### What Worked

- Protocol-first approach: analyze proto diff before implementation
- Real buf binary testing caught real protocol issues
- Dual-protocol architecture (v1alpha1 + v1beta1) proved backward compatible

### What Was Inefficient

- E2E tests requiring live GitHub token limited validation coverage
- Test infrastructure race conditions with shared API quota caused flaky v1.69.0 smoke test

### Patterns Established

- Real buf binary + real TLS server + real GitHub API for E2E tests
- Dependency-injected `*slog.Logger` as the logging pattern (not global logger)

### Key Lessons

1. Proto diff analysis before coding saves implementation time
2. Test infrastructure needs its own GitHub API quota to avoid parallel test interference

### Cost Observations

- Model mix: 100% opus
- Sessions: 3

---

## Cross-Milestone Trends

### Process Evolution

| Milestone | Sessions | Phases | Key Change |
|-----------|----------|--------|------------|
| v1.1 | 3 | 5 | Established protocol-first development |
| v1.2 | 2 | 5 | Added post-upgrade code quality pass |

### Cumulative Quality

| Milestone | Tests | UAT Passed | Bug Fixes |
|-----------|-------|------------|-----------|
| v1.1 | 5 E2E | N/A | 0 |
| v1.2 | 14 unit + 5 E2E | 9/9 | 5 |

### Top Lessons (Verified Across Milestones)

1. Test the failure paths, not just the happy paths — inverted conditions and partial results are invisible to success-only tests
2. After major infrastructure changes (dependency upgrades, proto regeneration), schedule a code quality audit
3. Shared helper extraction should happen when duplication appears in two places — three is too late
53 changes: 53 additions & 0 deletions .planning/ROADMAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Roadmap: EasyP Buf Proxy

## Milestones

- ✅ **v1.1 Protocol Modernization** — Phases 1-5 (shipped 2026-05-07)
- ✅ **v1.2 Dependency Modernization** — Phases 6-10 (shipped 2026-05-10)
- 📋 **v1.3** — TBD

## Phases

<details>
<summary>✅ v1.1 Protocol Modernization (Phases 1-5) — SHIPPED 2026-05-07</summary>

- [x] Phase 1: Code Generation (2/2 plans) — completed 2026-05-06
- [x] Phase 2: Handler Adaptation (1/1 plan) — completed 2026-05-06
- [x] Phase 3: Test Infrastructure (2/2 plans) — completed 2026-05-07
- [x] Phase 4: Old Protocol Validation (1/1 plan) — completed 2026-05-07
- [x] Phase 5: New Protocol Validation (2/2 plans) — completed 2026-05-07

</details>

<details>
<summary>✅ v1.2 Dependency Modernization (Phases 6-10) — SHIPPED 2026-05-10</summary>

- [x] Phase 6: Dependency Upgrades (2/2 plans) — completed 2026-05-08
- [x] Phase 7: Proto Regeneration & Verification (2/2 plans) — completed 2026-05-08
- [x] Phase 8: Go Code Modernization (1/1 plan) — completed 2026-05-08
- [x] Phase 9: Submodule Cleanup (1/1 plan) — completed 2026-05-09
- [x] Phase 10: Code Quality Fixes (4/4 plans) — completed 2026-05-09

</details>

### 📋 v1.3 — Planning

No phases defined yet. Use `/gsd-new-milestone` to define scope and create roadmap.

## Progress

| Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|----------|-------------|
| 1. Code Generation | v1.1 | 2/2 | Complete | 2026-05-06 |
| 2. Handler Adaptation | v1.1 | 1/1 | Complete | 2026-05-06 |
| 3. Test Infrastructure | v1.1 | 2/2 | Complete | 2026-05-07 |
| 4. Old Protocol Validation | v1.1 | 1/1 | Complete | 2026-05-07 |
| 5. New Protocol Validation | v1.1 | 2/2 | Complete | 2026-05-07 |
| 6. Dependency Upgrades | v1.2 | 2/2 | Complete | 2026-05-08 |
| 7. Proto Regeneration | v1.2 | 2/2 | Complete | 2026-05-08 |
| 8. Go Code Modernization | v1.2 | 1/1 | Complete | 2026-05-08 |
| 9. Submodule Cleanup | v1.2 | 1/1 | Complete | 2026-05-09 |
| 10. Code Quality Fixes | v1.2 | 4/4 | Complete | 2026-05-09 |

---
*Roadmap last updated: 2026-05-10*
66 changes: 66 additions & 0 deletions .planning/STATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
gsd_state_version: 1.0
milestone: null
milestone_name: null
status: ready
stopped_at: Milestone v1.2 complete — ready for next milestone
last_activity: 2026-05-10 — Milestone v1.2 shipped
last_updated: "2026-05-10T00:00:00.000Z"
progress:
total_phases: 10
completed_phases: 10
current_phase: null
total_plans: 15
completed_plans: 15
percent: 100
---

# Project State

## Project Reference

See: .planning/PROJECT.md (updated 2026-05-10)

**Core value:** The proxy must correctly serve both old (v1.30.1) and modern (v1.69.0+) Buf CLI clients simultaneously

**Current focus:** Planning next milestone

## Current Position

Milestone: v1.2 — Dependency Modernization — SHIPPED
Status: Ready for next milestone

Progress: [████████████████] 100%

## Accumulated Context

### Decisions

- All error paths return nil on error, not partial results
- All providers use `r.repo.Hash()` for ConfigHash
- HTTP clients have configurable timeout and body limit
- Shared download helper in `internal/providers/content/download.go`
- Dependency-injected `*slog.Logger` is the logging pattern

### Pending Todos

None

### Blockers/Concerns

None

## Deferred Items

Items acknowledged and deferred at milestone close on 2026-05-10:

| Category | Item | Status |
|----------|------|--------|
| UAT | Phase 03 human UAT (1 pending smoke test) | From v1.1 |
| Verification | Phase 05 human verification (E2E with GitHub token) | From v1.1 |
| v2 features | Performance, new endpoints | Future milestone |

## Session Continuity

Last session: 2026-05-10
Milestone v1.2 shipped — use `/gsd-new-milestone` to start next
Loading