Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c903ab4
fix(desktop): bind side conversation events to host admission
Astro-Han Aug 24, 2026
e385ebe
fix(desktop): update side chat story send result
Astro-Han Aug 24, 2026
387de6d
fix(desktop): preserve side conversation admission identity
Astro-Han Aug 24, 2026
14ebd8e
fix(desktop): close side conversation admission races
Astro-Han Aug 24, 2026
92b6ff1
fix(side-chat): preserve admission on unknown stop
Astro-Han Aug 24, 2026
9938227
fix(side-chat): report Host admission ownership
Astro-Han Aug 24, 2026
7813353
fix(side-chat): preserve Host admission across recovery
Astro-Han Aug 24, 2026
e4595df
fix(side-chat): resolve admission outcomes by ticket
Astro-Han Aug 24, 2026
f245919
fix(side-chat): retain admission fencing after bind
Astro-Han Aug 24, 2026
bef381a
refactor(side-chat): unify admission outcome events
Astro-Han Aug 24, 2026
60d09f7
fix(side-chat): isolate admission retry semantics
Astro-Han Aug 24, 2026
43974b0
refactor(side-chat): centralize admission transitions
Astro-Han Aug 24, 2026
7d77d31
test(side-chat): compress admission race fixtures
Astro-Han Aug 24, 2026
815725a
refactor(side-chat): require admission source tickets
Astro-Han Aug 24, 2026
edd79fd
fix(side-chat): scope admission projection
Astro-Han Aug 24, 2026
2131e7c
fix(side-chat): follow replacement Host scope
Astro-Han Aug 24, 2026
f9d0a03
fix(side-chat): replay admission after unknown stop
Astro-Han Aug 24, 2026
0fe0854
fix(side-chat): fence replacement Host profile
Astro-Han Aug 24, 2026
a1fdad1
test(side-chat): preserve streaming after unknown stop
Astro-Han Aug 24, 2026
3190866
fix(side-chat): keep active turn during admission
Astro-Han Aug 25, 2026
de04c74
fix(desktop): preserve renderer send identity
Astro-Han Aug 25, 2026
a8b4569
fix(desktop): reconnect session observation setup
Astro-Han Aug 25, 2026
9c89205
fix(side-chat): fence overlapping stop results
Astro-Han Aug 25, 2026
e72ed85
fix(side-chat): admit active turn steering
Astro-Han Aug 25, 2026
e896f46
fix(side-chat): replay durable steering admission
Astro-Han Aug 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -582,5 +582,6 @@ function continuitySnapshot() {
followup: [],
},
interactions: { pending: [] },
rootTurnSourceMessageIds: [],
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -251,15 +251,24 @@ describe('permission response IPC boundary', () => {
normalizeStopSessionInput({
source: 'stop_button',
expectedTurnId: 'turn-workhub',
expectedAdmissionId: 'side-admission',
extra: true,
}),
{ source: 'stop_button', expectedTurnId: 'turn-workhub' },
{
source: 'stop_button',
expectedTurnId: 'turn-workhub',
expectedAdmissionId: 'side-admission',
},
);
assert.throws(() => normalizeStopSessionInput(null), /stop session input/);
assert.throws(() => normalizeStopSessionInput({ source: 'toolbar' }), /stop session source/);
assert.throws(
() => normalizeStopSessionInput({ expectedTurnId: '' }),
/expectedTurnId/,
);
assert.throws(
() => normalizeStopSessionInput({ expectedAdmissionId: '' }),
/expectedAdmissionId/,
);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ describe('quote companion disposal fencing', () => {
...defaults.sideChat,
send: async () => {
sends += 1;
return { ok: true as const };
return { ok: true as const, turnId: 'side-chat-turn' };
},
};

Expand All @@ -140,7 +140,7 @@ describe('quote companion disposal fencing', () => {
});

it('does not consume quotes or report success when disposal wins the send race', async () => {
const pendingSend = deferred<{ ok: true }>();
const pendingSend = deferred<{ ok: true; turnId: string }>();
let disposed = false;
let consumed = 0;
const defaults = createFakeWorkbarServices();
Expand All @@ -158,7 +158,7 @@ describe('quote companion disposal fencing', () => {
);

disposed = true;
pendingSend.resolve({ ok: true });
pendingSend.resolve({ ok: true, turnId: 'side-chat-turn' });

assert.deepEqual(await turn, { status: 'disposed' });
assert.equal(consumed, 0);
Expand All @@ -179,7 +179,7 @@ describe('quote companion disposal fencing', () => {
},
send: async () => {
sends += 1;
return { ok: true as const };
return { ok: true as const, turnId: 'side-chat-turn' };
},
};
const turn = performCompanionTurn(
Expand Down
Loading