···342342 assert(result.install_state === 'failed', 'failed status should be terminal');
343343 assert(fetchCalls === 2, 'poll should stop after failed');
344344 assert(sleeps.length === 1, 'poll should sleep only before failed');
345345- assert(failed.message === serverInstallError, 'server install_error should render verbatim');
345345+ assert(failed.message === '', 'raw backend install_error must stay out of owner copy');
346346+ assert(failed.notice === text.failed_reason, 'failed install should use stable copy');
346347 assert(failed.bootstrap === true, 'failed install should offer retry');
347348 assert(failed.bootstrapLabel === text.retry, 'retry label should come from copy');
348349 assert(failed.tone === 'bad', 'failed install should render as an error');