ECL (and I'd suspect GCL has a similar problem) does not have image
save utility. That means there is no such thing as save-lisp-and-die,
so all alterations to the system (i.e from repl) at runtime are not
part of the final executable.

When building executables ECL compiles all files in a system definition
and (optionally) produces a single executable composed of these
objects. Your compilation may depend on some parameters and if you
define them from REPL, they will be available during build time, but if
you start the executable you start with bare Common Lisp and then you
add all things which are part of compiled files. If your files are only
loaded during compilation, then they are not in the "bare" image when
you start the executable. So if your application depends on some
parameters, they must be defined in one of your compiled components (or
their dependencies).

But I added a

            #-ecl :load-only #-ecl t

Doesn't that make the component compiled on ECL?

Sorry for asking such a basic question.

If I copy the file to the source tree and change the ":private-file" to an ":file" everything builds and runs fine.

Kind regards,