feat(FN-4179): optimistically clear room composer on send

Implements optimistic room composer clear in the ChatView, providing instant UI feedback when switching rooms without waiting for server confirmation, with accompanying tests and documentation updates.

Fusion-Task-Id: FN-4179

Fusion-Task-Lineage: 0c3588fa-81ca-464b-b001-506c1756d0ea
This commit is contained in:
Fusion
2026-05-12 14:15:25 -07:00
committed by gsxdsm
parent f397e71132
commit 056b1a9d6a
7 changed files with 64 additions and 14 deletions

View File

@@ -145,6 +145,10 @@ async function runOverlapMerge(dir: string, taskId: string, settingsOverrides: R
return { store, result };
}
function testTempParent(): string {
return process.env.FUSION_TEST_WORKER_ROOT ?? tmpdir();
}
function assertIsolatedWorkspace(dir: string): void {
const repoRoot = process.env.FUSION_TEST_REAL_ROOT;
if (!repoRoot) return;
@@ -189,7 +193,7 @@ describe("merger overlap guard", () => {
let dir: string;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-overlap-guard-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-overlap-guard-"));
createdDirs.add(dir);
assertIsolatedWorkspace(dir);
initRepo(dir);
@@ -336,7 +340,7 @@ describe("aiMergeTask overlap-aware fallback integration", () => {
let dir: string;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-overlap-merge-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-overlap-merge-"));
createdDirs.add(dir);
assertIsolatedWorkspace(dir);
initRepo(dir);

View File

@@ -74,6 +74,10 @@ function squashBranch(dir: string, branchName: string, fileName: string, content
// Minimal stub settings / args used by commitOrAmendMergeWithFixes
// ---------------------------------------------------------------------------
function testTempParent(): string {
return process.env.FUSION_TEST_WORKER_ROOT ?? tmpdir();
}
function assertIsolatedWorkspace(dir: string): void {
const repoRoot = process.env.FUSION_TEST_REAL_ROOT;
if (!repoRoot) return;
@@ -127,7 +131,7 @@ describe("snapshotDirtyFiles", () => {
let dir: string;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-merger-snapshot-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-merger-snapshot-"));
createdDirs.add(dir);
assertIsolatedWorkspace(dir);
initRepo(dir);
@@ -177,7 +181,7 @@ describe("snapshotDirtyFiles", () => {
});
it("returns empty set when rootDir is not a git repo (error swallowed)", async () => {
const nonRepo = mkdtempSync(join(tmpdir(), "fusion-test-merger-non-repo-"));
const nonRepo = mkdtempSync(join(testTempParent(), "fusion-test-merger-non-repo-"));
assertIsolatedWorkspace(nonRepo);
try {
const snapshot = await snapshotDirtyFiles(nonRepo);
@@ -193,7 +197,7 @@ describe("commitOrAmendMergeWithFixes — staging allowlist", () => {
let warnSpy: ReturnType<typeof vi.spyOn>;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-merger-allowlist-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-merger-allowlist-"));
createdDirs.add(dir);
assertIsolatedWorkspace(dir);
initRepo(dir);
@@ -528,7 +532,7 @@ describe("snapshotDirtyFiles — paths with embedded spaces", () => {
let dir: string;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-merger-snapshot-spaces-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-merger-snapshot-spaces-"));
assertIsolatedWorkspace(dir);
initRepo(dir);
});
@@ -581,7 +585,7 @@ describe("commitOrAmendMergeWithFixes — embedded-space paths round-trip", () =
let warnSpy: ReturnType<typeof vi.spyOn>;
beforeEach(() => {
dir = mkdtempSync(join(tmpdir(), "fusion-test-merger-allowlist-spaces-"));
dir = mkdtempSync(join(testTempParent(), "fusion-test-merger-allowlist-spaces-"));
createdDirs.add(dir);
assertIsolatedWorkspace(dir);
initRepo(dir);