Skip to content

Commit b1863e8

Browse files
Add a real live Linear/Codex E2E target
#### Context Add a real end-to-end path for Symphony Elixir that exercises Linear and Codex together, and make it easy to invoke explicitly from one Make target. #### TL;DR *Add a real live Linear/Codex E2E test plus a `make e2e` entrypoint.* #### Summary - Add an opt-in live Elixir test that creates a real Linear project and issue. - Run a real Codex turn and verify both workspace output and Linear side effects. - Require Codex to post a Linear comment and close the issue before completion. - Add `make e2e` with clear failures for missing `LINEAR_API_KEY` or `codex`. - Document the new E2E entrypoint and behavior in the Elixir README. #### Alternatives - Keep using ad hoc `mix test` commands and environment toggles. - Keep shimming Linear or post-processing issue state locally. - Those keep the happy path less reproducible and do not prove Codex can mutate Linear itself during the turn. #### Test Plan - [x] `make -C elixir all` - [x] `env -u LINEAR_API_KEY make -C elixir e2e` - [x] `LINEAR_API_KEY=$(tr -d '\r\n' < ~/.linear_api_key) SYMPHONY_RUN_LIVE_E2E=1 mix test test/symphony_elixir/live_e2e_test.exs`
1 parent c9ec3f1 commit b1863e8

File tree

3 files changed

+494
-2
lines changed

3 files changed

+494
-2
lines changed

elixir/Makefile

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.PHONY: help all setup deps build fmt fmt-check lint test coverage ci dialyzer
1+
.PHONY: help all setup deps build fmt fmt-check lint test coverage ci dialyzer e2e
22

33
MIX ?= mix
44

55
help:
6-
@echo "Targets: setup, deps, fmt, fmt-check, lint, test, coverage, dialyzer, ci"
6+
@echo "Targets: setup, deps, fmt, fmt-check, lint, test, coverage, dialyzer, e2e, ci"
77

88
setup:
99
$(MIX) setup
@@ -33,6 +33,19 @@ dialyzer:
3333
$(MIX) deps.get
3434
$(MIX) dialyzer --format short
3535

36+
e2e:
37+
@if [ -z "$$LINEAR_API_KEY" ]; then \
38+
echo "LINEAR_API_KEY is required for \`make e2e\`."; \
39+
echo "Export it first, for example:"; \
40+
echo " export LINEAR_API_KEY=\$$(tr -d '\\r\\n' < ~/.linear_api_key)"; \
41+
exit 1; \
42+
fi
43+
@if ! command -v codex >/dev/null 2>&1; then \
44+
echo "\`codex\` must be on PATH for \`make e2e\`."; \
45+
exit 1; \
46+
fi
47+
SYMPHONY_RUN_LIVE_E2E=1 $(MIX) test test/symphony_elixir/live_e2e_test.exs
48+
3649
ci:
3750
$(MAKE) setup
3851
$(MAKE) build

elixir/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,25 @@ The observability UI now runs on a minimal Phoenix stack:
173173
make all
174174
```
175175

176+
Run the real external end-to-end test only when you want Symphony to create disposable Linear
177+
resources and launch a real `codex app-server` session:
178+
179+
```bash
180+
cd elixir
181+
export LINEAR_API_KEY=...
182+
make e2e
183+
```
184+
185+
Optional environment variables:
186+
187+
- `SYMPHONY_LIVE_LINEAR_TEAM_KEY` defaults to `SYME2E`
188+
- `SYMPHONY_LIVE_CODEX_COMMAND` defaults to `codex app-server`
189+
190+
The live test creates a temporary Linear project and issue, writes a temporary `WORKFLOW.md`,
191+
runs a real agent turn, verifies the workspace side effect, requires Codex to comment on and close
192+
the Linear issue, then marks the project completed so the run remains visible in Linear.
193+
`make e2e` fails fast with a clear error if `LINEAR_API_KEY` is unset.
194+
176195
## FAQ
177196

178197
### Why Elixir?

0 commit comments

Comments
 (0)