Skip to content

Commit c5ef6db

Browse files
committed
docs: update for v0.56.0 (async learn/episodes) and v0.56.1 (MCP test portability)
- CHANGELOG.md: add v0.56.0 and v0.56.1 entries - DEVELOPMENT.md: fix stale KODE_E2E→ODEK_E2E, add MCP E2E test layer, fakeserver note - LEARNING.md: document non-blocking async skill learning - MEMORY.md: document async episode extraction
1 parent 88c9e85 commit c5ef6db

4 files changed

Lines changed: 29 additions & 3 deletions

File tree

docs/CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Changelog
22

3+
## v0.56.1 (2026-05-25) — MCP Test Portability
4+
5+
### Bug Fixes
6+
- **MCP client tests now build fakeserver from source** — The committed `testdata/fakeserver` binary was ELF x86-64 (Linux), causing `exec format error` on macOS ARM64. `fakeServerPath()` and `fakeMCPPath()` now compile the fake MCP server from `testdata/main.go` on-the-fly at test time. The 5.8 MB binary has been removed from git.
7+
- **Subagent E2E TestMain hardcoded path fixed**`subagent_e2e_test.go` had hardcoded `/root/projects/odek` paths from CI. Now resolves the repo root dynamically via `runtime.Caller`.
8+
9+
### Infrastructure
10+
- `internal/mcpclient/testdata/fakeserver` removed from git, added to `.gitignore`
11+
12+
## v0.56.0 (2026-05-25) — Post-Response Hang Eliminated
13+
14+
### Performance
15+
- **Learn loop runs asynchronously** — After the agent delivers its response, skill learning (pattern detection, LLM enhancement, auto-save) now runs in a background goroutine instead of blocking process exit. This eliminates the 2-5 second hang users saw after every `odek run`.
16+
- **Episode extraction runs asynchronously**`OnSessionEnd` LLM calls in `run`, `continue`, and REPL now run in goroutines. Sessions are still summarized — just without blocking termination.
17+
18+
### Behavior Change
19+
- Skill learning and episode extraction are now **best-effort post-processing**. On fast exits the goroutines may be killed mid-flight, but persistent state (skill files, episodes) is written atomically. Since learning is triggered on every session, missed runs self-correct on the next invocation.
20+
- Learn loop tests updated with brief waits (200ms) to accommodate async execution.
21+
322
## v0.51.0 (2026-05-25) — Test Coverage Expansion
423

524
### Testing

docs/DEVELOPMENT.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ docs/ Documentation
114114
## Testing
115115

116116
```bash
117-
# All tests (excluding E2E — those need KODE_E2E=true)
117+
# All tests (excluding E2E — those need ODEK_E2E=true)
118118
go test ./... -count=1
119119

120120
# Specific package
@@ -124,7 +124,10 @@ go test ./internal/session/ -v
124124
go test -race ./... -count=1
125125

126126
# E2E tests (builds odek binary, tests real subprocess spawning)
127-
KODE_E2E=true go test -v -count=1 ./cmd/odek/ -run "TestE2E_"
127+
ODEK_E2E=true go test -v -count=1 ./cmd/odek/ -run "TestE2E_"
128+
129+
# MCP E2E tests (real MCP server subprocess + fakeserver compiled on-the-fly)
130+
ODEK_E2E=true go test -v -count=1 ./cmd/odek/ -run "TestMCPClientE2E"
128131

129132
# Contract tests (sub-agent interface contract — binary must already be built)
130133
go test -v -count=1 ./cmd/odek/ -run "TestSubagent|TestDelegateTasks"
@@ -138,7 +141,8 @@ Zero external test dependencies — tests use `httptest`, `testing`, and the sta
138141
|-------|--------|-------|---------------|
139142
| **Unit** | `go test ./...` | 1954 | All 17 packages — config, LLM client, loop, sessions, renderer, tools, WS, resources, memory, skills, telegram, danger, security, mcp |
140143
| **Contract** | `go test ./cmd/odek/` | 60+ | Sub-agent flag parsing, JSON stdout, exit codes, tool schema, config, serve, shell |
141-
| **E2E** | `KODE_E2E=true go test -run 'TestE2E_'` | 16 | Real subprocess spawning, tool→binary pipeline, concurrency, timeouts, custom prompts |
144+
| **E2E** | `ODEK_E2E=true go test -run 'TestE2E_'` | 16 | Real subprocess spawning, tool→binary pipeline, concurrency, timeouts, custom prompts |
145+
| **MCP E2E** | `ODEK_E2E=true go test -run 'TestMCPClientE2E'` | 5 | MCP client with real fakeserver subprocess (compiled on-the-fly from testdata/main.go) |
142146

143147
### Test coverage
144148

docs/LEARNING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ odek run --learn "set up CI with GitHub Actions"
5757
- **LLM enhancement is optional** — when enabled, the LLM enriches heuristic output with better names, structured bodies, and accurate keywords.
5858
- **One skip = permanent suppression** — skip a suggestion once and it won't appear again. Use `odek skill reset-skips` to re-enable.
5959
- **Auto-curation runs silently** — after every session where skills were saved, overlaps are merged, duplicates removed, and stale skills pruned.
60+
- **Learning is non-blocking** — skill detection and auto-save run in a background goroutine after the agent's response is delivered. The process exits immediately; learning completes asynchronously on a best-effort basis.
6061

6162
## CLI Usage
6263

docs/MEMORY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ HH:MM agent pushed 19 tests, tagged v0.8.19
4747

4848
After sessions with ≥3 turns, the MemoryManager runs SimpleCall to extract 1-3 durable facts. Written to `episodes/<session-id>.md`. Searchable via `memory(search=...)` which uses **RandomProjections** (go-vector) to rank episodes by cosine similarity to the query — zero LLM calls per search. Set `llm_search: true` in config to use LLM-based ranking instead.
4949

50+
Episode extraction runs **asynchronously** — it does not block process exit. The session summary is a best-effort post-processing step that completes in a background goroutine.
51+
5052
## Memory Tool — Unified API
5153

5254
```json

0 commit comments

Comments
 (0)