feat(FN-3603): improve mobile chat with jump-to-latest and bubble width fix

This merge implements FN-3603, adding jump-to-latest controls for the chat view and improving mobile bubble width layout, with corresponding CSS updates in ChatView and QuickChatFAB components. It also includes documentation for the new mobile chat controls, a fix for workspace lint regex escaping,

Fusion-Task-Id: FN-3603
This commit is contained in:
Fusion
2026-05-06 13:30:04 -07:00
committed by gsxdsm
parent 2ca67c02f2
commit 8726b022c0
10 changed files with 220 additions and 25 deletions

View File

@@ -196,21 +196,27 @@ function checkAgainstBaseline() {
const protectedViolations = [];
if (candidateViolations.length > 0) {
sleepMs(1250);
const resampledProtected = snapshotProtectedFusion();
const resampledByDir = new Map(resampledProtected.map((entry) => [entry.dir, entry]));
// A live local app can write in bursts (e.g. heartbeat every few seconds),
// so do a short mutability probe before blaming tests.
const postSamples = [currentProtected];
for (let i = 0; i < 4; i++) {
sleepMs(500);
postSamples.push(snapshotProtectedFusion());
}
for (const dir of candidateViolations) {
const first = currentByDir.get(dir);
const second = resampledByDir.get(dir);
if (!first || !second) {
protectedViolations.push(dir);
continue;
let externallyActive = false;
for (let i = 1; i < postSamples.length; i++) {
const prev = postSamples[i - 1].find((entry) => entry.dir === dir);
const next = postSamples[i].find((entry) => entry.dir === dir);
if (!prev || !next) continue;
if (JSON.stringify(prev.entries) !== JSON.stringify(next.entries)) {
externallyActive = true;
break;
}
}
// If the directory is still mutating across back-to-back samples,
// treat it as externally active noise (same as baseline unstable dirs).
if (JSON.stringify(first.entries) === JSON.stringify(second.entries)) {
if (!externallyActive) {
protectedViolations.push(dir);
}
}