Skip to content

Commit 046c5c4

Browse files
authored
chore(release): prepare v0.2.0 (#56)
1 parent 45882cb commit 046c5c4

8 files changed

Lines changed: 58 additions & 55 deletions

File tree

codexadapter/adapter_test.go

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -682,23 +682,15 @@ fi
682682
printf '{"method":"permission/requested","params":{"toolCall":{"toolCallId":"tool-1","title":"Run tests","kind":"execute","rawInput":{"command":"go test ./..."}},"options":[{"optionId":"allow","name":"Allow","kind":"allow_once"},{"optionId":"reject","name":"Reject","kind":"reject_once"}]}}\n'
683683
printf '{"method":"item/completed","params":{"item":{"type":"agent_message","id":"msg-1","text":"allowed"}}}\n'
684684
`)
685-
client := acptest.NewClient(t, codexadapter.NewServer("test"))
686-
client.Request("initialize", map[string]any{})
687-
createdResponses := client.Send(map[string]any{
688-
"jsonrpc": "2.0",
689-
"id": 2,
690-
"method": "session/new",
691-
"params": map[string]any{"cwd": t.TempDir()},
692-
})
685+
client := acptest.NewLiveClient(t, codexadapter.NewServer("test"), acptest.WithAutoAllowPermissions())
686+
client.Request("initialize", "initialize", map[string]any{}, time.Second)
687+
createdResponses := client.Request("new-session", "session/new", map[string]any{"cwd": t.TempDir()}, time.Second)
693688
var session struct {
694689
SessionID string `json:"sessionId"`
695690
}
696-
createdResponses[1].ResultInto(t, &session)
691+
createdResponses[len(createdResponses)-1].ResultInto(t, &session)
697692

698-
responses := client.SendRaw(strings.Join([]string{
699-
`{"jsonrpc":"2.0","id":3,"method":"session/prompt","params":{"sessionId":"` + session.SessionID + `","prompt":[{"type":"text","text":"hello"}]}}`,
700-
`{"jsonrpc":"2.0","id":"server-1","result":{"outcome":{"outcome":"selected","optionId":"allow"}}}`,
701-
}, "\n") + "\n")
693+
responses := client.PromptText("prompt", session.SessionID, "hello", time.Second)
702694
if len(responses) != 6 {
703695
t.Fatalf("responses = %#v, want tool start + permission + answer + tool finish + session info + prompt result", responses)
704696
}

docs/RELEASE.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ make snapshot
1818

1919
## Tagging
2020

21-
Use semantic version tags, including alpha prereleases while the adapter is not
22-
production-ready:
21+
Use semantic version tags. Add a prerelease suffix only for prerelease builds:
2322

2423
```sh
25-
git tag v0.1.0-alpha.1
26-
git push origin v0.1.0-alpha.1
24+
git tag v0.2.0
25+
git push origin v0.2.0
2726
```
2827

2928
Pushing a `v*` tag runs `.github/workflows/release.yml`, which uses GoReleaser
@@ -40,7 +39,7 @@ generates GitHub artifact attestations from that checksum file using
4039
Download the archive and checksum file for the tag:
4140

4241
```sh
43-
tag=v0.1.0-alpha.30
42+
tag=v0.2.0
4443
version="${tag#v}"
4544
archive="codex-acp-adapter_${version}_linux_amd64.tar.gz"
4645

docs/ROADMAP.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
`review --uncommitted` command, `/init` stays on the normal `codex exec`
8282
prompt path, and additional commands need parity tests before being exposed
8383
- continue hardening auth/session/prompt/cancel/config/tool mappings with
84-
source-shaped parser fixtures and real Hecate release-binary smoke tests;
84+
source-shaped parser fixtures and real Hecate embedded-adapter smoke tests;
8585
native MCP lifecycle and tool-approval edge cases remain deeper parity work
8686
- port the edge cases recorded in `SOURCE_REVIEW.md`
8787

@@ -90,7 +90,6 @@
9090
- checksum-backed release archives with GitHub artifact attestations from the
9191
tag workflow
9292
- keep `docs/STABLE_READINESS.md` current until the stable gate is green
93-
- keep Hecate registry/Dockerfile pins pointed at the released
94-
`codex-acp-adapter` binary, and run Hecate's ACP adapter release smoke after
95-
every adapter release bump
93+
- keep Hecate's Go module pin pointed at the released adapter tag, and run
94+
Hecate's built-in adapter integration tests after every adapter release bump
9695
- no Hecate runtime launch path depends on a package-manager adapter wrapper

docs/STABLE_READINESS.md

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,40 @@
11
# Stable Readiness
22

3-
This adapter reaches `v0.1.0` when the command-backed ACP v1 contract is stable
4-
enough for operators to depend on directly. Stable does not mean every draft ACP
5-
RFD or Codex-native edge case is implemented; those remain tracked future work
6-
unless they are part of the contract below.
3+
The `v0.1.0` release established the command-backed ACP v1 contract that
4+
operators can depend on directly. Every later stable release preserves that
5+
baseline and may add compatible surfaces. Stable does not mean every draft ACP
6+
RFD or provider-native edge case is implemented; those remain tracked future
7+
work unless they are part of the contract below.
78

8-
## Required Gate Before `v0.1.0`
9+
## Required Gate For Every Stable Release
10+
11+
Before tagging:
912

1013
- `make release-check` passes on the release commit.
1114
- `make real-cli-smoke` passes on a prepared machine with an authenticated
1215
Codex CLI.
13-
- The Hecate ACP adapter release-binary smoke passes after Hecate is pinned to
14-
the candidate release.
15-
- Release archives have checksums and GitHub artifact attestations generated by
16-
the tag workflow.
17-
- Every `Required` row in the stable-scope matrix is covered. `Future` rows are
18-
non-blocking for `v0.1.0`.
16+
- Required GitHub checks pass on the exact commit that will be tagged.
17+
- Every `Required` row in the parity matrix is covered. `Future` rows are
18+
non-blocking.
19+
20+
Immediately after tagging:
21+
22+
- The tag workflow publishes the expected release archives and
23+
`checksums.txt`.
24+
- Every release archive passes checksum and GitHub artifact-attestation
25+
verification.
26+
- Hecate is pinned to the stable module tag and its built-in adapter integration
27+
checks pass before Hecate consumes the release.
1928

20-
## Stable Scope
29+
Tags are immutable. If a post-tag gate fails, do not adopt the release; correct
30+
the problem and publish a patch release.
31+
32+
## Stable Baseline
2133

2234
The `v0.1.0` contract covers stable ACP v1 session methods, prompt streaming,
2335
config selectors, MCP server config handoff into Codex CLI, stable
2436
`session/request_permission` handling, cancellation, release provenance, and
25-
Hecate's release-binary smoke.
37+
Hecate's embedded-adapter integration.
2638

2739
Draft ACP RFDs, including MCP-over-ACP and Elicitation, are not stable blockers.
2840
Provider-native MCP lifecycle hooks, permission elicitations beyond stable
@@ -32,22 +44,21 @@ as required gates.
3244

3345
## Parity Matrix
3446

35-
| Surface | Current state | Automated coverage | `v0.1.0` decision |
47+
| Surface | Current state | Automated coverage | Stable-release decision |
3648
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
3749
| ACP initialize | Adapter metadata, auth/logout, MCP, prompt, and stable session capabilities are advertised. | Unit tests plus shared kit initialize conformance. | Required; covered. |
3850
| Auth and logout | ACP `authenticate` maps to `codex login`; ACP `logout` maps to `codex logout`. | Unit tests, fake bridge tests, and opt-in real CLI smoke. | Required shape covered; destructive auth-cycle smoke remains operator opt-in. |
3951
| Session lifecycle | `session/new`, `session/list`, `session/load`, `session/resume`, `session/fork`, `session/close`, and `session/delete` work for command-backed sessions. | Unit tests, portable upstream parity checks, and opt-in real CLI list/load smoke. | Required; Codex-native durable restore across adapter restarts is future work. |
4052
| Prompt streaming | Codex JSONL maps to ACP assistant text, reasoning, usage, stop reasons, and tool updates. | Source-shaped parser fixtures, command bridge tests, and opt-in real CLI prompt/tool smoke. | Required; covered for real shell/file update flow. |
4153
| Config selectors | Static model, reasoning, sandbox, approval-policy, and web-search selectors are exposed and updateable. | Unit tests and portable selector parity checks. | Required as static selectors; runtime discovery is future work. |
42-
| MCP handoff | ACP stdio/HTTP MCP server config maps to Codex CLI config overrides. | Unit tests, Hecate release-binary smoke, and opt-in real CLI stdio MCP echo-tool smoke. | Required handoff covered; draft MCP-over-ACP/provider lifecycle hooks are future work. |
43-
| Permissions | Stable ACP permission requests plus denied/rejected/blocked provider tool results map to ACP permission/tool state. | Source-shaped parser fixtures, grant/reject/cancel tests, Hecate release-binary smoke, and opt-in real CLI permission auto-approval. | Required stable permission flow covered; elicitation-style prompts are future work. |
44-
| Cancellation | ACP cancel terminates active command-backed prompts and drops post-cancel stream chunks. | Unit tests, command bridge tests, portable parity checks, Hecate release-binary smoke, and opt-in real CLI cancellation smoke. | Required; covered for normal real CLI cancellation/no double-settle. |
45-
| Release artifacts | GoReleaser archives are checksum-verified and provenance-attested by the tag workflow. | Release workflow doc test and `make release-check`; release verification uses `gh attestation verify`. | Required once the first stable release is published and verified. |
46-
| Hecate integration | Hecate bundles released binaries and runs release-binary smoke against them. | Hecate `just test-acp-release-smoke`. | Required for every Hecate adapter pin bump. |
47-
48-
## Stable Decision
49-
50-
Cut `v0.1.0` after the required rows pass on the release commit, the real CLI
51-
smoke passes on an authenticated local machine, and Hecate's release-binary
52-
smoke passes against the candidate release. Future rows should stay documented,
53-
but they do not block the stable adapter tag.
54+
| MCP handoff | ACP stdio/HTTP MCP server config maps to Codex CLI config overrides. | Unit tests, Hecate embedded-adapter tests, and opt-in real CLI stdio MCP echo-tool smoke. | Required handoff covered; draft MCP-over-ACP/provider lifecycle hooks are future work. |
55+
| Permissions | Stable ACP permission requests plus denied/rejected/blocked provider tool results map to ACP permission/tool state. | Source-shaped parser fixtures, grant/reject/cancel tests, Hecate embedded-adapter tests, and opt-in real CLI permission auto-approval. | Required stable permission flow covered; elicitation-style prompts are future work. |
56+
| Cancellation | ACP cancel terminates active command-backed prompts and drops post-cancel stream chunks. | Unit tests, command bridge tests, portable parity checks, Hecate embedded-adapter tests, and opt-in real CLI cancellation smoke. | Required; covered for normal real CLI cancellation/no double-settle. |
57+
| Release artifacts | GoReleaser archives are checksum-verified and provenance-attested by the tag workflow. | Release workflow doc test and `make release-check`; release verification uses `gh attestation verify`. | Required for every stable release. |
58+
| Hecate integration | Hecate compiles the versioned Go adapter library into its binary. | Hecate agent-adapter tests and `just test-acp-real-embedded codex`. | Required for every Hecate adapter pin bump. |
59+
60+
## Release Decision
61+
62+
Cut a stable tag only after every pre-tag gate passes. Treat it as ready for
63+
Hecate consumption only after every post-tag gate passes. Future rows should
64+
stay documented, but they do not block a stable adapter release.

docs/TESTING.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
This repository tests the adapter scaffold, the subprocess-backed ACP runtime
44
bridge, and the native Codex CLI command bridge Hecate uses today. Hecate's
5-
replacement path is covered by Hecate release-binary smoke tests; this adapter
6-
repo still tracks deeper vendor-native parity before calling the adapter
7-
production-grade.
5+
embedded path is covered by its agent-adapter integration tests and opt-in
6+
authenticated embedded smoke; this adapter repo still tracks deeper
7+
vendor-native parity before calling the adapter production-grade.
88

99
## Covered Today
1010

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
)
1313

1414
require (
15-
github.com/hecatehq/acp-adapter-kit v0.1.1-0.20260717083303-8510f612270d
15+
github.com/hecatehq/acp-adapter-kit v0.2.0
1616
github.com/inconshreveable/mousetrap v1.1.0 // indirect
1717
github.com/spf13/pflag v1.0.9 // indirect
1818
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
github.com/coder/acp-go-sdk v0.13.5 h1:LI9jq5xon7xslaYlnoktvTVyDlE37yIk2daT7N9ASYk=
22
github.com/coder/acp-go-sdk v0.13.5/go.mod h1:yKzM/3R9uELp4+nBAwwtkS0aN1FOFjo11CNPy37yFko=
33
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
4-
github.com/hecatehq/acp-adapter-kit v0.1.1-0.20260717083303-8510f612270d h1:cDHoW7nujGNHTujpynDUcFM8j0cCLuArSJWvONT6mKo=
5-
github.com/hecatehq/acp-adapter-kit v0.1.1-0.20260717083303-8510f612270d/go.mod h1:tqRmkI7UfnabJsmhj6GrQdTdX2GwtYcCobiSPZl8ERo=
4+
github.com/hecatehq/acp-adapter-kit v0.2.0 h1:mDbizsflcQOSLzxS+RBUj4HqvohEOC/bO7EdOm+bztI=
5+
github.com/hecatehq/acp-adapter-kit v0.2.0/go.mod h1:tqRmkI7UfnabJsmhj6GrQdTdX2GwtYcCobiSPZl8ERo=
66
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
77
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
88
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=

internal/app/release_docs_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@ func TestReleaseDocsDescribeStableReadinessGate(t *testing.T) {
3737

3838
stable := readRepoText(t, "docs/STABLE_READINESS.md")
3939
for _, want := range []string{
40+
"Required Gate For Every Stable Release",
4041
"make release-check",
4142
"make real-cli-smoke",
42-
"Hecate ACP adapter release-binary smoke",
43+
"Hecate compiles the versioned Go adapter library",
44+
"test-acp-real-embedded",
4345
"Parity Matrix",
4446
"Release artifacts",
4547
"gh attestation verify",

0 commit comments

Comments
 (0)