Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
044dc69
fix(desktop): bind side conversation events to host admission
Astro-Han Aug 24, 2026
8bb2a4e
fix(desktop): update side chat story send result
Astro-Han Aug 24, 2026
2b7aefa
fix(desktop): preserve side conversation admission identity
Astro-Han Aug 24, 2026
5a9d4ff
fix(desktop): close side conversation admission races
Astro-Han Aug 24, 2026
6fb068a
fix(side-chat): preserve admission on unknown stop
Astro-Han Aug 24, 2026
7ff1123
fix(side-chat): report Host admission ownership
Astro-Han Aug 24, 2026
9bec0f1
fix(side-chat): preserve Host admission across recovery
Astro-Han Aug 24, 2026
d4abd94
fix(side-chat): resolve admission outcomes by ticket
Astro-Han Aug 24, 2026
3d619fa
fix(side-chat): retain admission fencing after bind
Astro-Han Aug 24, 2026
d51beb3
refactor(side-chat): unify admission outcome events
Astro-Han Aug 24, 2026
d7c8bf6
fix(side-chat): isolate admission retry semantics
Astro-Han Aug 24, 2026
0aea7b3
refactor(side-chat): centralize admission transitions
Astro-Han Aug 24, 2026
9750c98
test(side-chat): compress admission race fixtures
Astro-Han Aug 24, 2026
f51928a
refactor(side-chat): require admission source tickets
Astro-Han Aug 24, 2026
0684f83
fix(side-chat): scope admission projection
Astro-Han Aug 24, 2026
cf4ac43
fix(side-chat): follow replacement Host scope
Astro-Han Aug 24, 2026
d100ca2
fix(side-chat): replay admission after unknown stop
Astro-Han Aug 24, 2026
c37e4fe
fix(side-chat): fence replacement Host profile
Astro-Han Aug 24, 2026
364dd1a
test(side-chat): preserve streaming after unknown stop
Astro-Han Aug 24, 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