From daffaa6ef5cb7f4143b492131caf04cfb8313203 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 03:30:02 +0000 Subject: [PATCH] Dev server: a pull no longer reloads the page in a burst, and Rudder's recording pill keeps a fixed width The Driver's first laptop run with DX_SYNC_REMOTE: when main moved the page went white. A landing rewrites dozens of built leaf index.html files under public/, and Vite answers each changed .html with a full page reload (measured: one edited leaf page, one full-reload broadcast), so a pull fired a burst of reloads while git was still writing. The dev server no longer watches public/, which it never serves through its module graph (measured after: no reload). Rudder's corner pill also grew with every streamed word; while recording it is now 300px wide and shows the newest words, cut from the front. --- plugin-designs/plugin-studio/plugin-studio.vue | 7 ++++++- vite.config.js | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/plugin-designs/plugin-studio/plugin-studio.vue b/plugin-designs/plugin-studio/plugin-studio.vue index cac0ce815..271a8ad4f 100644 --- a/plugin-designs/plugin-studio/plugin-studio.vue +++ b/plugin-designs/plugin-studio/plugin-studio.vue @@ -487,6 +487,8 @@ const WIDGET_CSS = ` [data-wb-icon]{display:grid;place-items:center;flex:none;color:#38bdf8} [data-wb-icon] svg,[data-wb-chev] svg{width:20px;height:20px;display:block} [data-wb-text]{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +[data-widget-bubble][data-listening="true"]{width:min(300px,calc(100vw - 32px))} +[data-widget-bubble][data-listening="true"] [data-wb-text]{flex:1 1 auto} [data-wb-dot],[data-wb-chev]{display:none;flex:none} [data-wb-dot]{width:10px;height:10px;border-radius:50%;background:#ef4444} [data-widget-bubble][aria-expanded="true"] [data-wb-chev]{display:block} @@ -1196,7 +1198,10 @@ export default defineComponent({ const a = (Array.isArray(e.detail) ? e.detail[0] : e.detail) || {} if (pill.getAttribute('data-listening') !== 'true') return pill.setAttribute('data-speaking', a.speaking ? 'true' : 'false') - text.textContent = a.words || '' + // A FIXED-width pill while recording (the Driver: it resized with every word): show the newest + // words, cut from the front, never let the pill grow. + const w = a.words || '' + text.textContent = w.length > 34 ? '…' + w.slice(-33) : w }) W.els[row.key] = el panel.appendChild(el) diff --git a/vite.config.js b/vite.config.js index f511047aa..19e15da3c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -122,7 +122,12 @@ export default defineConfig(({ command, mode }) => { // port. `--host` on the command line still overrides this for a deliberate LAN session. // Local plugin backends (backend/, e.g. rudder-engine) are started by backendDevPlugin and reached // through these same-origin routes, so a plugin calls /api//… in dev exactly as on desktop. - server: { host: '127.0.0.1', proxy: devBackendProxy(env) }, + // NOT WATCHING public/ (the Driver's first laptop run with DX_SYNC_REMOTE, 2026-09-28): a landing rewrites + // dozens of built leaf index.html files there, and Vite answers each changed .html with a FULL page reload + // (measured: one edited leaf page -> one full-reload broadcast), so a pull fired a burst of reloads while + // git was still writing and the page went white. The dev server never serves public/ through its module + // graph (the script-embed route reads it on request), so nothing there needs watching. + server: { host: '127.0.0.1', proxy: devBackendProxy(env), watch: { ignored: ['**/public/**'] } }, define: { // ★ NO 'unsafe-eval' (CRITIC-4, 2026-09-26). vue-i18n's default message compiler builds each message // with `new Function`, so a partner with a strict Content-Security-Policy saw every translated string