This works:
(in-package :cl-user)
(let* ((txt1 "hallo")
        (txt2 "yellow"))
  (cl-who:show-html-expansion (str nil :indent t)
    ((:a) txt1 txt2)))

This does not work and hell breaks out when compiling:
(defpackage :dummy-package
  (:use :cl :cl-user :cl-who))
(in-package :dummy-package)
(let* ((txt1 "hallo")
        (txt2 "yellow"))
  (cl-who:show-html-expansion (str nil :indent t)
    ((:a) txt1 txt2)))
==>
(LET ((STR STR))
  (PROGN
   (WRITE-STRING "
<a>
  "
                 LET ((#:G1 NIL)) (WHEN #:G1 (PRINC #:G1 STR)))
   TXT1
   (WRITE-STRING "
  "
                 LET ((#:G2 NIL)) (WHEN #:G2 (PRINC #:G2 STR)))
   TXT2
   (WRITE-STRING "
</a>"
                 LET ((#:G3 NIL)) (WHEN #:G3 (PRINC #:G3 STR)))))

Well, I really don't get it with packages, so I just tried around and found
that this code here works:
(defpackage :dummy-package
  (:use :cl :cl-user :cl-who))
(in-package :dummy-package)
(let* ((txt1 "hallo")
        (txt2 "yellow"))
  (cl-who:show-html-expansion (s nil :indent t)
    ((:a) txt1 txt2)))

So kind-of it's not the package alone the problem, somehow
it's the combination of package and using str in macro
Ha, just tried with fmt instead of str: same problem
Hint: Maybe no protection with gensym? And why does it work in cl-user?!?

Using cl-who-0.11.1

And yes, I was in hell...
And now (after changing str to s) I want just to understand what happend to me.
thanks
olli