diff --git a/jjb/pipeline/voltha/playground/physical-build.groovy b/jjb/pipeline/voltha/playground/physical-build.groovy
index b9677c3..5779ac1 100644
--- a/jjb/pipeline/voltha/playground/physical-build.groovy
+++ b/jjb/pipeline/voltha/playground/physical-build.groovy
@@ -1,4 +1,5 @@
 // -*- groovy -*-
+// -----------------------------------------------------------------------
 // Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,18 +29,21 @@
 def volthaNamespace = "voltha"
 
 // -----------------------------------------------------------------------
+// Intent: Visible in jenkins UI, job configure screen
 // -----------------------------------------------------------------------
 def getIam(String func)
 {
     // Cannot rely on a stack trace due to jenkins manipulation
     String src = [
-	'jjb',
-	'pipeline',
-	'voltha',
-	'playground',
-	'voltha-tt-physical-functional-tests.groovy'
+        'jjb',
+        'pipeline',
+        'voltha',
+        'playground',
+        'voltha-tt-physical-functional-tests.groovy'
     ].join('/')
+
     String iam = [src, func].join('::')
+    iam += sprintf('[ver:1.0]')
     return iam
 }
 
@@ -56,58 +60,63 @@
     /* no label, executor is determined by JJB */
     agent
     {
-	label "${params.buildNode}"
+        label "${params.buildNode}"
     }
 
     options
     {
-	timeout(time: 35, unit: 'MINUTES')
+        timeout(time: 35, unit: 'MINUTES')
     }
 
     environment
     {
-	PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
-	KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
+        PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+        KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
     }
 
     stages
     {
-	stage('IAM')
-	{
-	    String iam = getIam('main')
-            println("** ${iam}: ENTER")
-            println("** ${iam}: LEAVE")
-	}
+        stage('Download Code')
+        {
+            iam(this)
+            {
+                enter = true
+                label = getIam()
+            }
 
-	stage('Download Code')
-	{
-	    steps {
-		getVolthaCode([
-		    branch: "${branch}",
-		    volthaSystemTestsChange: "${volthaSystemTestsChange}",
-		    volthaHelmChartsChange: "${volthaHelmChartsChange}",
-		])
-	    }
-	}
+            steps {
+                getVolthaCode([
+                    branch: "${branch}",
+                    volthaSystemTestsChange: "${volthaSystemTestsChange}",
+                    volthaHelmChartsChange: "${volthaHelmChartsChange}",
+                ])
+            }
 
-	stage ("Parse deployment configuration file") {
-	    steps {
-		sh returnStdout: true, script: "rm -rf ${configBaseDir}"
-		sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-		script {
-		    String conf = "${configBaseDir}/${configDeploymentDir}/${configFileName}"
-		    String flow = params.workFlow
+            iam(this)
+            {
+                leave = true
+                label = getIam()
+            }
+        }
 
-		    conf += (flow == 'DT') ? '-DT.yaml'
-		        : (flow == 'TT') ? '-TT.yaml'
-		        : '.yaml'
+        stage ("Parse deployment configuration file") {
+            steps {
+                sh returnStdout: true, script: "rm -rf ${configBaseDir}"
+                sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+                script {
+                    String conf = "${configBaseDir}/${configDeploymentDir}/${configFileName}"
+                    String flow = params.workFlow
 
-		    deployment_config = readYaml file: conf
-		    
-		    /*
-		    if ( params.workFlow == "DT" )
-		    {
-			conf += '-DT.yaml'
+                    conf += (flow == 'DT') ? '-DT.yaml'
+                        : (flow == 'TT') ? '-TT.yaml'
+                        : '.yaml'
+
+                    deployment_config = readYaml file: conf
+
+                    /*
+                    if ( params.workFlow == "DT" )
+                    {
+                        conf += '-DT.yaml'
 //            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
           }
           else if ( params.workFlow == "TT" )
@@ -118,7 +127,7 @@
           {
             deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
           }
-		     */
+                     */
         }
       }
     }
diff --git a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
index 569cf1d..f0965ff 100644
--- a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
@@ -32,13 +32,15 @@
 {
     // Cannot rely on a stack trace due to jenkins manipulation
     String src = [
-	'jjb',
-	'pipeline',
-	'voltha',
-	'playground',
-	'voltha-tt-physical-functional-tests.groovy'
+        'jjb',
+        'pipeline',
+        'voltha',
+        'playground',
+        'voltha-tt-physical-functional-tests.groovy'
     ].join('/')
+
     String iam = [src, func].join('::')
+    iam += sprintf('[ver:1.0]')
     return iam
 }
 
@@ -50,52 +52,56 @@
     /* no label, executor is determined by JJB */
     agent
     {
-	label "${params.buildNode}"
+        label "${params.buildNode}"
     }
 
     options
     {
-	timeout(time: "${timeout}", unit: 'MINUTES')
+        timeout(time: "${timeout}", unit: 'MINUTES')
     }
 
     environment
     {
-	KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-	VOLTCONFIG="$HOME/.volt/config-minimal"
-	PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+        KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
+        VOLTCONFIG="$HOME/.volt/config-minimal"
+        PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
     }
 
     stages {
 
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Clone voltha-system-tests')
-	{
-	    steps
-	    {
-		iam(this) { enter = true }
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Clone voltha-system-tests')
+        {
+            steps
+            {
+                iam(this)
+                {
+                    enter = true
+                    label = getIam()
+                }
 
-		step([$class: 'WsCleanup'])
-		checkout([
-		    $class: 'GitSCM',
-		    userRemoteConfigs: [[
-			url: "https://gerrit.opencord.org/voltha-system-tests",
-			refspec: "${volthaSystemTestsChange}"
-		    ]],
-		    branches: [[ name: "${branch}" ]],
-		    extensions: [
-			[$class: 'WipeWorkspace'],
-			[$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-			[$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-		    ],
-		]) // checkout
+                step([$class: 'WsCleanup'])
+                checkout([
+                    $class: 'GitSCM',
+                    userRemoteConfigs: [[
+                        url: "https://gerrit.opencord.org/voltha-system-tests",
+                        refspec: "${volthaSystemTestsChange}"
+                    ]],
+                    branches: [[ name: "${branch}" ]],
+                    extensions: [
+                        [$class: 'WipeWorkspace'],
+                        [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
+                        [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
+                    ],
+                ]) // checkout
 
-		script
-		{
-		    sh(
-			returnStatus: true,
-			// returnStdout: true,
-			script: """
+                script
+                {
+                    sh(
+                        returnStatus: true,
+                        // returnStdout: true,
+                        script: """
             if [ '${volthaSystemTestsChange}' != '' ] ; then
               cd "$WORKSPACE/voltha-system-tests"
               git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange}
@@ -104,61 +110,65 @@
             fi
             """)
 
-		iam(this) { leave = true }
-		} // step
-	    } // steps
-	} // stage
+                iam(this)
+                {
+                    leave = true
+                    label = getIam()
+                }
+                } // step
+            } // steps
+        } // stage
 
-	// -----------------------------------------------------------------------
-	// This checkout allows us to show changes in Jenkins
-	// we only do this on master as we don't branch all the repos for all the releases
-	// (we should compute the difference by tracking the container version, not the code)
-	// -----------------------------------------------------------------------
-	stage('Download All the VOLTHA repos')
-	{
-	    when {
-		expression { return "${branch}" == 'master'; }
+        // -----------------------------------------------------------------------
+        // This checkout allows us to show changes in Jenkins
+        // we only do this on master as we don't branch all the repos for all the releases
+        // (we should compute the difference by tracking the container version, not the code)
+        // -----------------------------------------------------------------------
+        stage('Download All the VOLTHA repos')
+        {
+            when {
+                expression { return "${branch}" == 'master'; }
             }
 
-	    steps {
-		checkout(changelog: true,
-			 poll: false,
-			 scm: [$class: 'RepoScm',
-			       manifestRepositoryUrl: "${params.manifestUrl}",
-			       manifestBranch: "${params.branch}",
-			       currentBranch: true,
-			       destinationDir: 'voltha',
-			       forceSync: true,
-			       resetFirst: true,
-			       quiet: true,
-			       jobs: 4,
-			       showAllChanges: true]
-		)
-	    }
-	}
+            steps {
+                checkout(changelog: true,
+                         poll: false,
+                         scm: [$class: 'RepoScm',
+                               manifestRepositoryUrl: "${params.manifestUrl}",
+                               manifestBranch: "${params.branch}",
+                               currentBranch: true,
+                               destinationDir: 'voltha',
+                               forceSync: true,
+                               resetFirst: true,
+                               quiet: true,
+                               jobs: 4,
+                               showAllChanges: true]
+                )
+            }
+        }
 
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage ('Initialize')
-	{
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage ('Initialize')
+        {
             steps
-	    {
-		sh(
-		    returnStatus: true,
-		    returnStdout: false,
-		    script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-		)
-		script
-		{
-		    deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-		}
+            {
+                sh(
+                    returnStatus: true,
+                    returnStdout: false,
+                    script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+                )
+                script
+                {
+                    deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+                }
 
-		installVoltctl("${branch}")
+                installVoltctl("${branch}")
 
-		sh(
-		    returnStatus: true,
-		    returnStdout: false,
-		    script: """
+                sh(
+                    returnStatus: true,
+                    returnStdout: false,
+                    script: """
         mkdir -p "$WORKSPACE/bin"
 
         # install kail
@@ -179,22 +189,22 @@
            voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/kafka
         fi
         """)
-	    } // step
-	} // stage
+            } // step
+        } // stage
 
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Functional Tests')
-	{
-	    environment
-	    {
-		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-		ROBOT_FILE="Voltha_TT_PODTests.robot"
-		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FunctionalTests"
-	    }
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Functional Tests')
+        {
+            environment
+            {
+                ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+                ROBOT_FILE="Voltha_TT_PODTests.robot"
+                ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FunctionalTests"
+            }
 
-	    steps {
-		sh("""
+            steps {
+                sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if ( ${powerSwitch} ); then
              export ROBOT_MISC_ARGS="--removekeywords wuks -i functionalTT -i PowerSwitch -i sanityTT -i sanityTT-MCAST -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE -v OLT_ADAPTER_APP_LABEL:${oltAdapterAppLabel}"
@@ -208,22 +218,22 @@
         make -C $WORKSPACE/voltha-system-tests voltha-tt-test
         """)
       }
-	} // stage
+        } // stage
 
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Failure/Recovery Tests')
-	{
-	    environment
-	    {
-		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-		ROBOT_FILE="Voltha_TT_FailureScenarios.robot"
-		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FailureScenarios"
-	    }
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Failure/Recovery Tests')
+        {
+            environment
+            {
+                ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+                ROBOT_FILE="Voltha_TT_FailureScenarios.robot"
+                ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FailureScenarios"
+            }
 
-	    steps
-	    {
-		sh("""
+            steps
+            {
+                sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = false ]; then
           if ( ${powerSwitch} ); then
@@ -235,24 +245,24 @@
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
         """)
-	    }
-	} // stage
+            }
+        } // stage
 
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Multi-Tcont Tests')
-	{
-	    environment
-	    {
-		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-		ROBOT_FILE="Voltha_TT_MultiTcontTests.robot"
-		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MultiTcontScenarios"
-		ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multi-tcont-tests-input.yaml"
-	    }
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Multi-Tcont Tests')
+        {
+            environment
+            {
+                ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+                ROBOT_FILE="Voltha_TT_MultiTcontTests.robot"
+                ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MultiTcontScenarios"
+                ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multi-tcont-tests-input.yaml"
+            }
 
-	    steps
-	    {
-		sh("""
+            steps
+            {
+                sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = false ]; then
           if ( ${powerSwitch} ); then
@@ -264,24 +274,24 @@
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
         """)
-	    }
-	}
-	
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Multicast Tests')
-	{
-	    environment
-	    {
-		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-		ROBOT_FILE="Voltha_TT_MulticastTests.robot"
-		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MulticastTests"
-		ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multicast-tests-input.yaml"
-	    }
+            }
+        }
 
-	    steps
-	    {
-		sh("""
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Multicast Tests')
+        {
+            environment
+            {
+                ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+                ROBOT_FILE="Voltha_TT_MulticastTests.robot"
+                ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MulticastTests"
+                ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multicast-tests-input.yaml"
+            }
+
+            steps
+            {
+                sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = true ]; then
           if ( ${powerSwitch} ); then
@@ -293,16 +303,16 @@
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
         """)
-	    }
-	}
+            }
+        }
     }
 
     post
     {
-	always
-	{
-	    getPodsInfo("$WORKSPACE/pods")
-	    sh(returnStdout: false, script: '''
+        always
+        {
+            getPodsInfo("$WORKSPACE/pods")
+            sh(returnStdout: false, script: '''
       set +e
 
       # collect logs collected in the Robot Framework StartLogging keyword
@@ -311,33 +321,33 @@
       rm *-combined.log || true
       ''')
 
-	    script {
+            script {
         deployment_config.olts.each { olt ->
-	if (olt.type == null || olt.type == "" || olt.type == "openolt")
-	{
-		sh(returnStdout: false, script: """
+        if (olt.type == null || olt.type == "" || olt.type == "openolt")
+        {
+                sh(returnStdout: false, script: """
              sshpass -p ${olt.pass} scp ${olt.user}@${olt.sship}:/var/log/openolt.log $WORKSPACE/openolt-${olt.sship}.log || true
              sshpass -p ${olt.pass} scp ${olt.user}@${olt.sship}:/var/log/dev_mgmt_daemon.log $WORKSPACE/dev_mgmt_daemon-${olt.sship}.log || true
              sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/openolt-${olt.sship}.log  # Remove escape sequences
              sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/dev_mgmt_daemon-${olt.sship}.log  # Remove escape sequences
              """)
-		    }
-		}
-	    }
+                    }
+                }
+            }
 
-	    step([$class: 'RobotPublisher',
-		  disableArchiveOutput: false,
-		  logFileName: '**/log*.html',
-		  otherFiles: '',
-		  outputFileName: '**/output*.xml',
-		  outputPath: 'RobotLogs',
-		  passThreshold: 100,
-		  reportFileName: '**/report*.html',
-		  unstableThreshold: 0,
-		  onlyCritical: true
+            step([$class: 'RobotPublisher',
+                  disableArchiveOutput: false,
+                  logFileName: '**/log*.html',
+                  otherFiles: '',
+                  outputFileName: '**/output*.xml',
+                  outputPath: 'RobotLogs',
+                  passThreshold: 100,
+                  reportFileName: '**/report*.html',
+                  unstableThreshold: 0,
+                  onlyCritical: true
             ]);
-	    archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.tgz,*.txt,pods/*.txt'
-	} // always
+            archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.tgz,*.txt,pods/*.txt'
+        } // always
     } // post
 } // pipeline
 
diff --git a/vars/iam.groovy b/vars/iam.groovy
index 0a340b6..75f204d 100644
--- a/vars/iam.groovy
+++ b/vars/iam.groovy
@@ -19,26 +19,30 @@
 
 // -----------------------------------------------------------------------
 // -----------------------------------------------------------------------
-String getIam(String func)
+String getIam(Map argv, String func)
 {
-    // Cannot rely on a stack trace due to jenkins manipulation
-    // Report who and where caller came from.
-    String src = [
-        'repo:ci-management',
-        'vars',
-        'iam',
-    ].join('/')
+    String src = argv.containsKey('label')
+        ?  argv.label
+        : [ // Cannot lookup, jenkins alters stack for serialization
+            'repo:ci-management',
+            'vars',
+            'iam',
+          ].join('/')
 
     String iam = [src, func].join('::')
+    if (argv.containsKey('version'))
+    {
+        iam += sprintf("[%s]", argv.version)
+    }
     return(iam)
 }
 
 // -----------------------------------------------------------------------
 // Intent: Display future enhancement list.
 // -----------------------------------------------------------------------
-void todo()
+void todo(Map argv)
 {
-    String iam = getIam('todo')
+    String iam = getIam(argv, 'todo')
 
     println("""
 [TODO: $iam]
@@ -54,9 +58,9 @@
 // -----------------------------------------------------------------------
 // Intent: Placeholder in case future enhancements are needed
 // -----------------------------------------------------------------------
-Boolean process(Map config)
+Boolean process(Map argv)
 {
-    String iam = getIam('process')
+    String iam = getIam(argv, 'process')
 
     Boolean leave = false
 
@@ -65,13 +69,13 @@
         println("** ${iam}: ENTER")
     }
     else if (config.containsKey('leave')) {
-	leave = true
+        leave = true
     }
     else
     {
         println("** ${iam}: HELLO")
     }
- 
+
     // Display future enhancement list
     if (config.containsKey('todo')) {
         todo()
@@ -82,7 +86,7 @@
     {
         println("** ${iam}: LEAVE")
     }
-    
+
     return(true)
 }
 
@@ -95,6 +99,8 @@
 //     enter    Display "** {iam} ENTER"
 //     leave    Display "** {iam} LEAVE"
 //     todo     Display future enhancement list
+//     label    path/to/src[ver:1.0]
+//     version  specify version and label separately
 // -----------------------------------------------------------------------
 // Usage:
 //   o called from a jenkins {pipeline,stage,script} block.
@@ -104,11 +110,11 @@
 //         tans = fans
 //     }
 // -----------------------------------------------------------------------
-Boolean call(def self, Map config)
+Boolean call(def self, Map argv)
 {
-    String iam = getIam('main')
-
     argv = argv ?: [:] // {ternary,elvis} operator
+    String iam = getIam(argv, 'main')
+
     println("** ${iam}: argv=${argv}")
 
     Boolean ranToCompletion = false
