
This luatex-only answer inserts some code (that I stole from the chickenize package) to insert text as a list of glyph and glue nodes at the end of any box that the hpack callback reports as over or under full.
It's just a sketch really but more or less works on this example.
\documentclass{article}
\makeatletter
\directlua{
GLYPH = node.id("glyph")
GLUE = node.id("glue")
%
function hpackshow (indicator,num,nd,f,l)
print('HPACK: ' .. indicator .. ' ' .. num)
if (indicator == 'overfull' or indicator == 'underfull' ) then
if (indicator == 'overfull') then
local pt = num / 65536.0
str = string.format("| overfull \@percentchar #.2fpt",pt)
else
str = string.format("| underfull badness " .. num)
end
nds = {}
nds[0]=node.new(GLYPH,1)
for i = 1,string.len(str) do
nds[i] = node.new(GLYPH,1)
nds[i].font = font.current()
nds[i-1].next = nds[i]
end
j = 1
for s in string.utfvalues(str) do
local char = unicode.utf8.char(s)
nds[j].char = s
if unicode.utf8.match(char,"\@percentchar s") then
nds[j] = node.new(GLUE)
nds[j].width = space
nds[j].shrink = shrink
nds[j].stretch = stretch
end
j = j+1
end
return nds[0]
end
end
%
luatexbase.add_to_callback('hpack_quality',hpackshow,'my hpack logger')
}
\begin{document}
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext
somelongtextsomelongtext somelongtextsomelongtext somelongtextsomelongtext
\begin{minipage}{5cm}\fussy\parfillskip=0pt
onetwothree onetwothree
onezztzzzwothree onetwothree
onetwothree onetzzzzzwothree
onetzzzzwothree onetwothree
\end{minipage}
\end{document}