Currently catalyst does not clean the already compiled packages from a previous GRP-build when calling with -p. I guess it looks at the 'wrong' location (${catalyst_root}/packages/ instead of ${catalyst_root}/builds/). I assume that -p should clean both locations.
Actually, catalyst is doing the right thing by only clearing ${catalyst_root}/packages when using -p. However, it should clear ${catalyst_root}/builds always, like is done with livecd-stage2, since it is a "build" and should be the complete (and exact) product of the running of a spec file.
OK. I've thought about this some more, and this is generally how it *should* work for GRP. $storedir/tmp/$rel_type/$target should be the actual "installed" location $storedir/packages/$rel_type/$target should be the actual package cache, just like any other target $storedir/builds/$rel_type/$target should be cleared and built each time by catalyst, using packages from $storedir/packages/$rel_type/$target to build up the different CD sets as laid out in the spec file This likely will mean a fairly drastic change in how the catalyst GRP code works, as we'll need to likely generate our package list twice on each run. The first time, will be everything needed to build the packages, and the second time will be everything needed to run the packages. During the execution, catalyst will build the packages, installing to $storedir/tmp/$rel_type/$target while building packages and placing them in $storedir/packages/$rel_type/$target for later use. Once the build is completed, catalyst should then re-run emerge on the original package list to get the list of packages to copy to $storedir/builds/$rel_type/$target, allowing -p to work properly and allowing catalyst to more easily only pull in RDEPEND packages for the GRP set, which should reduce their size.
I've removed GRP support from catalyst.