Thanks for your response, Adam. I added some UID and GID logging to the PT, and generation attempts from both the shell and the GUI use my UID and GID.I am using the File:ath module to create the directory if it doesn't exist, ie:if(!-d $mkdir_eng) {umask(002);mkpath($mkdir_eng, {error => \my $err, verbose => 0, mode => 02775});}Of particular note is the fact that I can generate (via the GUI) just fine if I do not use the htdocs folder in the path. For example, my normal "Select Output Path" value when generating from the GUI would be "htdocs/eng-fra/index-index.html" (which fails with the aforementioned error - "You cannot write in the area-level directories."). But if I use just "eng-fra/index-index.html" or something else at the same level ("english-french/index-index.html") then it works.The htdocs folder has the same permissions and owner as its parent:[mousem@deucalion microsite]$ pwd/default/main/prod/public/microsite/WORKAREA/microsite[mousem@mousey microsite]$ ls -latotal 3drwxrwxr-x 5 mousem mousem 512 Jul 12 15:57 .dr-xr-xr-x 3 mousem mousem 512 May 26 14:48 ..drwxrwxr-x 2 mousem mousem 512 Jul 12 15:57 htdocs-rwxrwxr-x 1 mousem mousem 92 Jul 12 15:21 log.txtdrwxrwxr-x 2 mousem mousem 512 May 26 14:48 perldrwxrwxr-x 3 mousem mousem 512 May 26 14:49 templatedata[mousemmousem htdocs]$ pwd/default/main/prod/public/microsite/WORKAREA/microsite/htdocs[mousemmousem htdocs]$ ls -latotal 3drwxrwxr-x 2 mousem mousem 512 Jul 12 15:57 .drwxrwxr-x 5 mousem mousem 512 Jul 12 15:57 ..lrwxrwxrwx 1 mousem mousem 73 Jun 17 16:07 css -> /default/main/production/oneweb/mousem/WORKAREA/mousem/htdocs/wet/csslrwxrwxrwx 1 mousem mousem 76 Jun 17 16:07 images -> /default/main/production/oneweb/mousem/WORKAREA/mousem/htdocs/wet/imageslrwxrwxrwx 1 mousem mousem 78 Jun 17 16:07 includes -> /default/main/production/oneweb/mousem/WORKAREA/mousem/htdocs/wet/includeslrwxrwxrwx 1 mousem mousem 72 Jun 17 16:07 js -> /default/main/production/oneweb/mousem/WORKAREA/mousem/htdocs/wet/jsI'm really at a loss here. If anyone has any other suggestions, I'd appreciate them. Regardless, thanks for taking the time to read this.Cheers,Matt
use CGI::Carp qw(fatalsToBrowser);