Observed 2026-08-01: 14 of 14 macOS classifier fixtures passed on Agent Island v1.7.1 source commit e598b57. This is correctness evidence for the listed cases, not a performance benchmark or user-data study.
Method
- Use only synthetic JSONL lines checked into the public test suite; no private transcript or user message is included.
- Compile the production classifier and scanner with the test runner by executing
./scripts/test-session-turn-state.sh. - Compare the returned completion flag, semantic activity time, and turn key with each fixture's expected state.
- Record every case, including failure-prone sidechain, metadata, staleness, bookkeeping, and API-error boundaries.
Environment: macOS 26.5.2 build 25F84, Apple Silicon arm64, Apple Swift 6.3.3. Implementation: SessionTurnState.swift. Fixtures: SessionTurnStateTests.swift.
Download the machine-readable results (JSON)
Results
| Fixture | Provider | Expected | Observed | Result |
|---|---|---|---|---|
| User after assistant | Claude Code | Not your turn | Not your turn | PASS |
| Trailing metadata | Claude Code | Your turn; original key | Your turn; original key | PASS |
| Sidechain end_turn | Claude Code | Not your turn | Not your turn | PASS |
| Main end_turn after sidechain | Claude Code | Your turn | Your turn | PASS |
| User after task_complete | Codex | Not your turn | Not your turn | PASS |
| Task start after complete | Codex | Not your turn | Not your turn | PASS |
| task_complete | Codex | Your turn | Your turn | PASS |
| Old transcript, metadata touch | Claude Code | Idle | Idle | PASS |
| Fresh end_turn | Claude Code | Your turn | Your turn | PASS |
| Newer Desktop activity | Claude Code | Working | Working | PASS |
| Desktop bookkeeping grace | Claude Code | Your turn | Your turn | PASS |
| Return well after end_turn | Claude Code | Working | Working | PASS |
| Streaming assistant | Claude Code | Working | Working | PASS |
| API-error stop_sequence | Claude Code | Not your turn | Not your turn | PASS |
What these fixtures establish
- A completion envelope alone is insufficient: a newer user message or task start must suppress a stale alert.
- Claude Code sidechain traffic must not finish the main session, while trailing sidechain records must not hide a genuine main-session completion.
- Filesystem modification time is not semantic activity time; metadata and Desktop bookkeeping require explicit handling.
- An API-limit message can use a completion-like stop reason and still must not become a false “your turn” event.
Limits
The run verifies the macOS Swift classifier against fourteen committed fixtures. The Windows implementation has a source-parity test suite, but its runtime was not executed here because the verification machine did not have the dotnet CLI installed. The dataset does not measure latency, CPU use, recall on unknown future provider formats, downloads, or user outcomes.
See the broader seven-state taxonomy, the safe JSONL parsing guide, and the factual comparison hub.