Hi Tim,
I'm not sure what determines the field width of the qstat columns (PBS itself, or some site-specific configuration?) but it seems odd that qstat would return what is essentially an invalid job ID! I'll ask my PBS contacts.
I currently have access to a cluster managed with PBS 14. By trial and error, if qsub returns a job ID <number>.<server-name> I can do "qstat <number>" but not "qstat <number>.<truncated-server-name>" - i.e. the truncated result return by qstat is not a valid job ID, so it's no wonder that screws up cylc's job query mechanism.
If you have to work around this in Cylc - which it seems you have already - the job ID returned by qsub is stored in the task's job.status file, and I think this has to exactly match the job ID returned by qstat in order for job poll (query) to work.
In the case you describe, this means you would have to strip the server-name off the job ID return by both qsub and qstat.
Current master branch (and the new 7.8 release) has a new variant PBS handler called "pbs_multi_cluster" that does something very similar: It sub-classes PBSHandler to append '@server-name' to the job ID returned by both qsub and qstat. You can probably use this as a template:
https://github.com/cylc/cylc/blob/master/lib/cylc/batch_sys_handlers/pbs_multi_cluster.py (if it is any better than the work around you've already come up with). Note that the `manip_job_id()` method, which manipulates the job ID returned by qsub is not supported prior to cylc-7.8 because it relies on a small change in the batch system manager module.
Hilary