Hi Linda.
Our baseline IDs start with "BL".
On a project object based process, this start condition so far tests out as a 'run once on first baseline' process.
Start Event: Update
Do not start a new process if one is already running is checked.
Start Condition: ( any( ( Baseline (Subobject) Revision ID like 'BL**' ) ) and ( Project has_baseline = 0 ) )
Basically I'm saying 'Check to see if there is a Baseline Revision ID Like 'BL*' <--notice the wild card
AND
the has_baseline attribute is unchecked
In my simple test process, I create a baseline (in the CA PPM UI) and click Save & Return. This kicks off the process. It sends me an action item (just so I know it can do something), then sets the has_baseline attribute to yes, then locks it (NJ's recommendation above), then finishes.
To operationalize something like this you'd need to pre-seed checks onto all projects that already have baselines, maybe add some more logic to the start condition to better box in your functional needs (example, I'd add 'Is Active = 1'. No sense risking this running on inactive projects?), consider options for override/re-running if necessary, etc.
... and Test Test Test of course.
I haven't tested what happens if a baseline is initiated in a client tool, but in the CA PPM UI this looks like it meets your requirement of "process based off of the first baseline only"
HTH