The polyglossia package shipped with Debian 9 (current stable) is hit by this bug: tex.stackexchange.com (missing no-break spaces in French punctuation).
You can work around it in two ways:
Use LuaTeX instead of XeTeX (root users have access to the switch in the admin).
Patch polyglossia (see below).
This is experimental but appears to work:
Copy the file `gloss-french.ldf` into the local tree.
# amusewiki shell $ mkdir -p texmf/tex/latex/polyglossia $ cp /usr/share/texlive/texmf-dist/tex/latex/polyglossia/gloss-french.ldf \ texmf/tex/latex/polyglossia/gloss-french.ldf $ texhash `kpsewhich -var-value TEXMFHOME`
And patch the new gloss-french.ldf with this:
--- /usr/share/texlive/texmf-dist/tex/latex/polyglossia/gloss-french.ldf 2016-03-25 23:06:03.000000000 +0100 +++ texmf/tex/latex/polyglossia/gloss-french.ldf 2018-10-14 09:45:47.171843623 +0200 @@ -54,6 +54,13 @@ \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\nobreak\thinspace}% "»;" -> "» ;" \XeTeXinterchartoks \french@punctguillend \french@punctthick = {\nobreakspace}% "»:" -> "» :" \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\nobreakspace}% "?»" -> "? »" + + % see https://tex.stackexchange.com/questions/330844/prevent-line-break-before/330848#330848 + \XeTeXinterchartoks 4095 \french@punctthin = {\xpg@unskip\nobreak\thinspace}% + \XeTeXinterchartoks 4095 \french@punctthick = {\xpg@unskip\nobreakspace}% + \XeTeXinterchartoks 4095 \french@punctguillend = {\xpg@unskip\nobreakspace}% " »" -> "~»" + \XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\xpg@nospace}% "« " -> "«~" + \fi }