mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-03 14:09:42 +02:00
fix(mobile): carry resumeId through the phone overview's past rows
#386 made Codex conversations resumable from Past Sessions, and resumeMobileOverviewSession() correctly passes row.resumeId on to resumeHistorySession(). The phone's own row projection never copied the field off the unified-list item though, so row.resumeId was always undefined there and a tapped Codex row started a FRESH session on a thread that was already on disk. The desktop path worked; only the phone was blind. The test fails without the projection line, and pins the other half too: a claude row must not grow a resumeId, since the field is what distinguishes "resume this conversation" from "start a new one". Docs: CLAUDE.md and architecture-invariants both still described the unified list as merging Claude transcript files. It has been three stores since this PR (Claude's ~/.claude/projects, omp's ~/.omp/agent/sessions, codex's ~/.codex/sessions), the alias field keeps its Claude-era name without being Claude-only, and the scanner-only rule behind resumeId was written down nowhere. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -224,6 +224,37 @@ describe('mobile overview model', () => {
|
||||
expect(model.past[0].title).toBe('w4-claudeman');
|
||||
});
|
||||
|
||||
it('carries resumeId through to the past row so a Codex tap resumes its thread', () => {
|
||||
const app = loadOverviewApp();
|
||||
const model = app.buildMobileOverviewModel({
|
||||
sessions: [],
|
||||
cases: CASES,
|
||||
history: [
|
||||
{
|
||||
sessionId: 'rollout-1',
|
||||
workingDir: '/home/arkon/codeman-cases/beta',
|
||||
firstPrompt: 'port the parser',
|
||||
mode: 'codex',
|
||||
resumeId: 'codex-thread-id',
|
||||
lastActivityAt: 300,
|
||||
},
|
||||
// A claude row carries none, and must not grow one.
|
||||
{
|
||||
sessionId: 'claude-1',
|
||||
workingDir: '/home/arkon/default/claudeman',
|
||||
claudeSessionId: 'claude-uuid-a',
|
||||
lastActivityAt: 200,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// resumeMobileOverviewSession() reads row.resumeId off exactly this projection and
|
||||
// hands it to resumeHistorySession(); an undefined here is a fresh codex session on
|
||||
// a thread that already exists, which is the phone-only half of the resume feature.
|
||||
expect(model.past[0]).toMatchObject({ mode: 'codex', resumeId: 'codex-thread-id' });
|
||||
expect(model.past[1].resumeId).toBeUndefined();
|
||||
});
|
||||
|
||||
it('does not title a past row with the transcript reader placeholder', () => {
|
||||
const app = loadOverviewApp();
|
||||
const model = app.buildMobileOverviewModel({
|
||||
|
||||
Reference in New Issue
Block a user