Fix intermittent Codex and Claude activity detection - #79
Merged
kentwelcome merged 3 commits intoJul 28, 2026
Conversation
There was a problem hiding this comment.
Pull request overview
This PR tightens local session-activity detection for Codex and Claude Code so workers remain visible until explicit structured stop evidence is observed, reducing intermittent “false idle” transitions. It does this by retaining privacy-safe typed evidence across incremental scans, adding stricter correlation rules, and only publishing coherent scan generations to the app.
Changes:
- Introduces
SessionScanStateand a typed evidence store to persist byte cursors + projected lifecycle facts across scans. - Adds new projection/reduction pipeline (
projection,codex,claude,reducer,state) with updated lifecycle correlation rules (cwd/parent/path) and retry-on-unstable-scan behavior. - Expands and sanitizes fixtures + UI/core tests to cover lifecycle ordering, replay/reopen logic, and regression scenarios.
Reviewed changes
Copilot reviewed 43 out of 44 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/fixtures/session-activity/codex-worker-unlinked/rollout.jsonl | Adds cwd to Codex session meta fixture. |
| tests/fixtures/session-activity/codex-worker-open/rollout.jsonl | Adds cwd to Codex session meta fixture. |
| tests/fixtures/session-activity/codex-worker-complete/rollout.jsonl | Adds cwd to Codex session meta fixture. |
| tests/fixtures/session-activity/codex-v2-wrong-path/parent.jsonl | New v2 negative fixture for mismatched agent path. |
| tests/fixtures/session-activity/codex-v2-wrong-path/child.jsonl | New v2 negative fixture child log. |
| tests/fixtures/session-activity/codex-v2-wrong-parent/parent.jsonl | New v2 negative fixture for mismatched parent thread id. |
| tests/fixtures/session-activity/codex-v2-wrong-parent/child.jsonl | New v2 negative fixture child log. |
| tests/fixtures/session-activity/codex-v2-wrong-cwd/parent.jsonl | New v2 negative fixture for mismatched cwd correlation. |
| tests/fixtures/session-activity/codex-v2-wrong-cwd/child.jsonl | New v2 negative fixture child log. |
| tests/fixtures/session-activity/codex-v2-worker-open/parent.jsonl | New v2 positive fixture parent start evidence. |
| tests/fixtures/session-activity/codex-v2-worker-open/child.jsonl | New v2 positive fixture child worker evidence. |
| tests/fixtures/session-activity/codex-fo-exec-command/rollout.jsonl | New fixture for direct structured exec_command evidence. |
| tests/fixtures/session-activity/claude-worker-open/parent.jsonl | Adds cwd to legacy Claude parent fixture. |
| tests/fixtures/session-activity/claude-worker-open/claude-fo-redacted/subagents/worker.jsonl | Adds cwd to legacy Claude sidechain worker fixture. |
| tests/fixtures/session-activity/claude-worker-idle/parent.jsonl | Adds cwd to legacy Claude idle envelope fixture. |
| tests/fixtures/session-activity/claude-worker-idle/claude-fo-redacted/subagents/worker.jsonl | Adds cwd to legacy Claude sidechain worker fixture. |
| tests/fixtures/session-activity/claude-modern-wrong-cwd/parent.jsonl | New modern Claude negative fixture for cwd mismatch. |
| tests/fixtures/session-activity/claude-modern-wrong-cwd/claude-parent/subagents/worker.meta.json | New modern Claude teammate metadata fixture. |
| tests/fixtures/session-activity/claude-modern-wrong-cwd/claude-parent/subagents/worker.jsonl | New modern Claude sidechain fixture. |
| tests/fixtures/session-activity/claude-modern-worker-open/parent.jsonl | New modern Claude parent dispatch fixture. |
| tests/fixtures/session-activity/claude-modern-worker-open/claude-parent/subagents/worker.meta.json | New modern Claude teammate metadata fixture. |
| tests/fixtures/session-activity/claude-modern-worker-open/claude-parent/subagents/worker.jsonl | New modern Claude sidechain fixture. |
| tests/fixtures/session-activity/claude-modern-duplicate-call/parent.jsonl | New modern Claude negative fixture for duplicate Agent calls. |
| tests/fixtures/session-activity/claude-modern-duplicate-call/claude-parent/subagents/worker.meta.json | New modern Claude teammate metadata fixture. |
| tests/fixtures/session-activity/claude-modern-duplicate-call/claude-parent/subagents/worker.jsonl | New modern Claude sidechain fixture. |
| tests/fixtures/session-activity/claude-modern-cross-parent/parent.jsonl | New modern Claude negative fixture for cross-parent correlation. |
| tests/fixtures/session-activity/claude-modern-cross-parent/different-parent/subagents/worker.meta.json | New modern Claude teammate metadata fixture. |
| tests/fixtures/session-activity/claude-modern-cross-parent/different-parent/subagents/worker.jsonl | New modern Claude sidechain fixture. |
| tests/fixtures/session-activity/claude-fo-gate/session.jsonl | Adds cwd to Claude FO gate fixture. |
| tests/fixtures/session-activity/claude-fo-complete/session.jsonl | Adds cwd to Claude FO completion fixture. |
| docs/superpowers/specs/2026-07-27-spacetop-entity-activity-design.md | Updates design spec to match new typed evidence + correlation rules. |
| crates/spacetop/src/ui/tests/task_list.rs | Adds UI regression test for scan replay and terminal clearing behavior. |
| crates/spacetop/src/ui/tests/preview.rs | Updates UI preview tests for the new previous_state/worker result shape. |
| crates/spacetop/src/ui/tests.rs | Updates UI test helpers for the new worker result shape. |
| crates/spacetop/src/lib.rs | Switches app worker wiring from session file snapshots to SessionScanState + immediate retry flag. |
| crates/spacetop/src/app/tests.rs | Updates app tests for the new worker result shape. |
| crates/spacetop/src/app/session_activity_worker.rs | Updates background worker to call scan_local_sessions_with_state and propagate retry + state. |
| crates/spacetop-core/src/session_activity/state.rs | New incremental scan state management: inventory, cursors, checkpointing, evidence retention. |
| crates/spacetop-core/src/session_activity/reducer.rs | New deterministic activity reducer with stable tie-breaking. |
| crates/spacetop-core/src/session_activity/projection.rs | New privacy-safe projection of session logs into typed facts + ordering metadata. |
| crates/spacetop-core/src/session_activity/codex.rs | New Codex-specific correlation + lifecycle event extraction. |
| crates/spacetop-core/src/session_activity/claude.rs | New Claude-specific correlation + lifecycle event extraction, including reopen logic. |
| crates/spacetop-core/src/session_activity.rs | Refactors session activity facade to use new state/projection/reducer pipeline. |
| AGENTS.md | Updates repo code map to reflect new session_activity/* module layout and responsibilities. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Keep active Codex and Claude workers visible until structured lifecycle evidence says they stopped, eliminating intermittent false-idle task status.
What changed
Evidence
075