diff --git a/Makefile b/Makefile
index 75ed605..2a9bb30 100644
--- a/Makefile
+++ b/Makefile
@@ -37,30 +37,21 @@
 # JJB_VERSION   ?= 4.1.0
 JOBCONFIG_DIR ?= job-configs
 
+# -----------------------------------------------------------------------
+# horrible dep: (ie -- .PHONY: $(JOBCONFIG_DIR))
+#   o Directory inode always changing due to (time-last-accessed++).
+#   o Dependent Targets always re-made due to setale dependency.
+#   o Use file inside directory as dep rather than a directory.
+# -----------------------------------------------------------------------
 $(JOBCONFIG_DIR):
 	mkdir $@
 
-## -----------------------------------------------------------------------
-## Intent: Sanity check incoming JJB config changes.
-##   Todo: Depend on makefiles/lint/jjb.mk :: lint-jjb
-## -----------------------------------------------------------------------
-# lint : lint-jjb
-lint-tox:
-	tox -e py310
-
-## -----------------------------------------------------------------------
-## -----------------------------------------------------------------------
-.PHONY: test
-test: $(venv-activate-script) $(JOBCONFIG_DIR)
-	$(activate) \
-	&& pipdeptree \
-	&& jenkins-jobs -l DEBUG test --recursive --config-xml -o "$(JOBCONFIG_DIR)" jjb/ ;
-
-## -----------------------------------------------------------------------
-## -----------------------------------------------------------------------
-.PHONY: clean
-clean:
-	$(RM) -r $(JOBCONFIG_DIR)
+##-------------------##
+##---]  TARGETS  [---##
+##-------------------##
+include $(MAKEDIR)/targets/check.mk
+include $(MAKEDIR)/targets/tox.mk#             # python unit testing
+include $(MAKEDIR)/targets/test.mk
 
 ## Display make help late
 include $(ONF_MAKE)/help/trailer.mk
diff --git a/jjb/pipeline/voltha/playground/physical-build.groovy b/jjb/pipeline/voltha/playground/physical-build.groovy
index 44a17ac..fc931d5 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,41 @@
 def volthaNamespace = "voltha"
 
 // -----------------------------------------------------------------------
+// Intent: Visible in jenkins UI, job configure screen
 // -----------------------------------------------------------------------
 def getIam(String func)
 {
+    /*
+     [TODO]
+     -----------------------------------------------------------------------
+     java stack trace is hosed due to jenkins internal meddeling to support
+     serializable.  Lets see if groovy Throwable wrapper can produce a
+     better answer.
+     -----------------------------------------------------------------------
+     */
+
+    try
+    {
+        throw new Exception('Generating a stacktrace')
+    }
+    catch (Throwable err)
+    {
+        // https://docs.groovy-lang.org/2.4.7/html/api/org/codehaus/groovy/GroovyException.html
+        err.printStackTrace()
+        stack = err.getStackTrace()
+    }
+
     // 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',
+        'physical-build.groovy'
     ].join('/')
+
     String iam = [src, func].join('::')
+    iam += sprintf('[ver:1.0]')
     return iam
 }
 
@@ -56,58 +80,64 @@
     /* 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 = get_iam('main')
-            println("** ${iam}: ENTER")
-            println("** ${iam}: LEAVE")
-	}
+        stage('Download Code')
+        {
+            steps
+            {
+                iam
+                {
+                    enter = true
+                    label = getIam()
+                }
 
-	stage('Download Code')
-	{
-	    steps {
-		getVolthaCode([
-		    branch: "${branch}",
-		    volthaSystemTestsChange: "${volthaSystemTestsChange}",
-		    volthaHelmChartsChange: "${volthaHelmChartsChange}",
-		])
-	    }
-	}
+                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
+                {
+                    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 +148,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 6dd6cbe..9a3c84e 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,59 +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('IAM')
-	{
-	    String iam = get_iam('main')
-            println("** ${iam}: ENTER")
-            println("** ${iam}: LEAVE")
-	}
-
-	// -----------------------------------------------------------------------
-	// -----------------------------------------------------------------------
-	stage('Clone voltha-system-tests')
-	{
-	    steps
-	    {
-		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
+        // -----------------------------------------------------------------------
+        // -----------------------------------------------------------------------
+        stage('Clone voltha-system-tests')
+        {
+            steps
+            {
+		iam
 		{
-		    sh(
-			returnStatus: true,
-			// returnStdout: true,
-			script: """
+                    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
+
+                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}
@@ -110,60 +109,66 @@
               exit 1  # verify fail
             fi
             """)
-		} // step
-	    } // steps
-	} // stage
+                } // step
 
-	// -----------------------------------------------------------------------
-	// 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'; }
+                iam
+                {
+                    leave = true
+                    label = getIam()
+                }
+            } // 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'; }
             }
 
-	    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
@@ -184,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}"
@@ -213,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
@@ -240,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
@@ -269,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
@@ -298,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
@@ -316,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/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index fbb530a..11b7fd1 100755
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -1791,11 +1791,10 @@
           pipeline-script: 'voltha/voltha-2.11/bbsim-tests.groovy'
           code-branch: 'voltha-2.11'
           time-trigger: "H H/23 * * *"
-          extraHelmFlags: '--set onu=2,controlledActivation=only-onu'
           withMonitoring: true
           logLevel: 'DEBUG'
           testTargets: |
-            - target: memory-leak-test-single-pon-multi-onu-dt
+            - target: memory-leak-test-single-kind-dt
               workflow: dt
               flags: ""
               teardown: true
diff --git a/jjb/voltha-scale.yaml b/jjb/voltha-scale.yaml
index 6de61c2..e77f8fd 100644
--- a/jjb/voltha-scale.yaml
+++ b/jjb/voltha-scale.yaml
@@ -52,7 +52,7 @@
           name: 'voltha-scale-measurements-master-2-16-32-att-subscribers'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
-          disable-job: false
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -92,7 +92,7 @@
           name: 'voltha-scale-measurements-master-2-16-32-dt-subscribers'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
-          disable-job: false
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -114,7 +114,7 @@
           name: 'voltha-scale-measurements-master-2-16-32-tt-subscribers'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
-          disable-job: false
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -141,6 +141,7 @@
           name: 'voltha-scale-measurements-master-2-16-32-tt-subscribers-maclearner'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -159,7 +160,6 @@
            --set onos-classic.image.repository=andreacampanella/voltha-onos --set onos-classic.image.tag=maclearner
            --set bbsim-sadis-server.images.bbsim_sadis_server.tag=master
 
-
       # 4k ONTs jobs
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-master-2-64-32-dt-subscribers'
@@ -295,6 +295,7 @@
           pipeline-script: 'voltha/voltha-2.11/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -319,6 +320,7 @@
           pipeline-script: 'voltha/voltha-2.11/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
@@ -344,6 +346,7 @@
           pipeline-script: 'voltha/voltha-2.11/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
+          disable-job: true
           olts: 2
           pons: 16
           onus: 32
diff --git a/jjb/voltha-test/voltha.yaml b/jjb/voltha-test/voltha.yaml
index 2d7c10c..2186099 100644
--- a/jjb/voltha-test/voltha.yaml
+++ b/jjb/voltha-test/voltha.yaml
@@ -79,9 +79,9 @@
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
-      # flex OCP pod with olt/onu - 1T4GEM tech profile and timer based job
+      # [VOL-4939] - flex OCP pod with olt/onu - 1T4GEM tech profile and timer based job
       - 'build_voltha_pod_release_timer':
-          disable-job: false
+          disable-job: true
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
           release: '2.11'
@@ -93,7 +93,7 @@
           num-of-atomix: '3'
           pipeline-script: 'voltha/voltha-2.11/physical-build.groovy'
 
-      # flex OCP pod with olt/onu - 1T4GEM tech profile and timer based job
+      # [VOL-4939] - flex OCP pod with olt/onu - 1T4GEM tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           disable-job: true
           build-node: 'qa-testvm-pod'
@@ -118,9 +118,9 @@
           test-repo: 'voltha-system-tests'
           profile: '1T4GEM'
 
-      # flex pod1 test job - released versions: uses tech profile on voltha branch
+      # [VOL-4939] - flex pod1 test job - released versions: uses tech profile on voltha branch
       - 'build_voltha_pod_test':
-          disable-job: false
+          disable-job: true
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
           release: '2.11'
@@ -176,9 +176,9 @@
           num-of-atomix: '3'
           pipeline-script: 'voltha/voltha-2.8/physical-build.groovy'
 
-      # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
+      # [VOL-4939] - flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
       - 'build_voltha_pod_release_timer':
-          disable-job: false
+          disable-job: true
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
           release: '2.11'
@@ -206,9 +206,9 @@
           test-repo: 'voltha-system-tests'
           profile: 'TP'
 
-      # flex pod1 test job - released versions: uses tech profile on voltha branch
+      # [VOL-4939] - flex pod1 test job - released versions: uses tech profile on voltha branch
       - 'build_voltha_pod_test':
-          disable-job: false
+          disable-job: true
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
           release: '2.11'
@@ -220,7 +220,7 @@
           test-repo: 'voltha-system-tests'
           profile: 'TP'
 
-      # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
+      # [CORD-4941] - flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           disable-job: true
           build-node: 'qa-testvm-pod'
@@ -238,7 +238,7 @@
           enableMultiUni: true
           uniPortMask: '0x0003'
 
-      # flex pod1 test job - released versions: uses tech profile on voltha branch
+      # [CORD-4941] - flex pod1 test job - released versions: uses tech profile on voltha branch
       - 'build_voltha_pod_test':
           disable-job: true
           build-node: 'qa-testvm-pod'
@@ -1056,7 +1056,7 @@
           build-node: 'berlin-community-pod-1'
           config-pod: 'berlin-community-pod-1-gpon-adtran'
           name-extension: '_DT'
-          disable-job: true
+          disable-job: false
           work-flow: 'DT'
           release: 'master'
           branch: 'master'
@@ -1079,6 +1079,7 @@
           build-node: 'berlin-community-pod-1'
           config-pod: 'berlin-community-pod-1-gpon-adtran'
           name-extension: '_DT'
+          disable-job: false
           work-flow: 'DT'
           release: '2.11'
           branch: 'voltha-2.11'
diff --git a/makefiles/help/include.mk b/makefiles/help/include.mk
index 3134a38..01efdc1 100644
--- a/makefiles/help/include.mk
+++ b/makefiles/help/include.mk
@@ -65,16 +65,43 @@
 ##          - help-simple or help-verbose
 ##   o Current logic displays extended help by default.
 ## -----------------------------------------------------------------------
+## Usage: see makefiles/targets/test.mk
+##    test-verbose += help-check#      # append help target to help-verbose
+## -----------------------------------------------------------------------
 ifdef VERBOSE
-  help :: help-verbose
+  help-verbose += help-verbose
+  help :: $(help-verbose)
 else
   help :: help-simple
 endif
 
 ## -----------------------------------------------------------------------
+## Intent: Display context specific help for named targets.
+## -----------------------------------------------------------------------
+## [TODO] Display a list of help-* tokens for target specific content:
+##    % make help-check
+##    % make help-test
+## -----------------------------------------------------------------------
+## [TODO] Define LEVEL= or helper targets (help-lint-{level})
+##        for extended help w/o information overload
+##    [0] help               # make help
+##    [1] help-lint          # make help-verbose or (VERBOSE=1)
+##    [2] help-lint-shell    # make help-lint VERBOSE=1  (??)
+##    [2] help-lint-yaml
+## -----------------------------------------------------------------------
+help-index ::
+	@echo
+	@echo '[HELP] - An index of help context for common targets'
+	@echo '  help-index          This message'
+	$(HIDE)\
+  for name in $(sort $(help-verbose)); do\
+    echo "  $$name";\
+  done
+
+## -----------------------------------------------------------------------
 ## Intent: Display simple extended target help
 ## -----------------------------------------------------------------------
-help-simple ::
+help-simple :: help-index
 	@echo
 	@echo '[VIEW]'
 	@echo '  reload              Setup to auto-reload sphinx doc changes in browser'
diff --git a/makefiles/include.mk b/makefiles/include.mk
index 339d367..be08b19 100644
--- a/makefiles/include.mk
+++ b/makefiles/include.mk
@@ -34,9 +34,26 @@
 include $(ONF_MAKE)/lint/include.mk
 include $(ONF_MAKE)/git-submodules.mk
 include $(ONF_MAKE)/gerrit/include.mk
+
 include $(ONF_MAKE)/todo.mk
 include $(ONF_MAKE)/help/variables.mk
 
+##-------------------##
+##---]  TARGETS  [---##
+##-------------------##
+include $(ONF_MAKE)/targets/clean.mk
+# include $(ONF_MAKE)/targets/check.mk
+include $(ONF_MAKE)/targets/sterile.mk
+# include $(ONF_MAKE)/targets/test.mk
+
 $(if $(DEBUG),$(warning LEAVE))
 
+## --------------------------------------------------------------------------
+## structure to support pre/post target handling w/o inlining in Makefile (?)
+## --------------------------------------------------------------------------
+##   include makefiles/include.mk
+##     include makefiles/main/enter.mk
+##     [... include *.mk ...]
+##     include makefiles/main/leave.mk
+
 # [EOF]
diff --git a/makefiles/lint/groovy/README.md b/makefiles/lint/groovy/README.md
new file mode 100644
index 0000000..aa9b41a
--- /dev/null
+++ b/makefiles/lint/groovy/README.md
@@ -0,0 +1,13 @@
+# lint: groovy source
+
+# Invoke the linting tool
+% make lint-groovy
+
+# Alt checking: groovy interpreter
+
+Odd syntax errors can be detected by the groovy interpreter.
+
+% groovy path/to/{source}.groovy
+
+jjb/ pipeline scripts will eventually due to syntax problems but groovy can
+still detect problems like mismatched quotes, invalid op tokens, etc.
diff --git a/makefiles/lint/groovy/urls b/makefiles/lint/groovy/urls
new file mode 100644
index 0000000..aa5c5eb
--- /dev/null
+++ b/makefiles/lint/groovy/urls
@@ -0,0 +1,8 @@
+# -*- makefile -*-
+
+# Config file and exclusions
+https://www.npmjs.com/package/npm-groovy-lint#Configuration
+
+https://github.com/nvuillam/npm-groovy-lint
+
+# [EOF]
diff --git a/makefiles/lint/yaml.mk b/makefiles/lint/yaml.mk
index 566ac18..ab5b9d6 100644
--- a/makefiles/lint/yaml.mk
+++ b/makefiles/lint/yaml.mk
@@ -33,9 +33,11 @@
 ##   % make lint UNSTABLE=1
 ##   % make lint-yaml-all
 ## -----------------------------------------------------------------------
+lint-yaml-mode := $(if $(have-yaml-files),modified,all)
+lint-yaml : lint-yaml-$(lint-yaml-mode)
+
 ifndef NO-LINT-YAML
-  lint-yaml-mode := $(if $(have-yaml-files),modified,all)
-  lint : lint-yaml-$(lint-yaml-mode)
+  lint : lint-yaml#     # Enable as a default lint target
 endif# NO-LINT-YAML
 
 ## -----------------------------------------------------------------------
@@ -74,7 +76,7 @@
 	@echo '  lint-yaml          Syntax check python using the yaml command'
   ifdef VERBOSE
 	@echo '  lint-yaml-all       yaml checking: exhaustive'
-	@echo '  lint-yaml-modified  yaml checking: only modified'
+	@echo '  lint-yaml-modified  yaml checking: only locally modified'
   endif
 
 $(if $(DEBUG),$(warning LEAVE))
diff --git a/makefiles/targets/check.mk b/makefiles/targets/check.mk
new file mode 100644
index 0000000..2145343
--- /dev/null
+++ b/makefiles/targets/check.mk
@@ -0,0 +1,38 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: check
+check : lint lint-yaml lint-jjb
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-verbose += help-check
+help-check ::
+	@echo
+	@echo '[MAKE: check]'
+	@echo '  check               pre-commit checking, with extra targets (default:NO, jenkins:FAIL)'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/targets/clean.mk b/makefiles/targets/clean.mk
new file mode 100644
index 0000000..f504dec
--- /dev/null
+++ b/makefiles/targets/clean.mk
@@ -0,0 +1,40 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## Intent: Remove makefile generated content
+## -----------------------------------------------------------------------
+.PHONY: clean
+clean ::
+	$(RM) -r $(JOBCONFIG_DIR)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-verbose += help-clean
+help-clean ::
+	@echo
+	@echo '[MAKE: clean]'
+	@echo '  clean               Remove makefile generated content'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/targets/sterile.mk b/makefiles/targets/sterile.mk
new file mode 100644
index 0000000..1eb7035
--- /dev/null
+++ b/makefiles/targets/sterile.mk
@@ -0,0 +1,45 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## Intent: Revert sandbox into a pristine checkout stage
+## -----------------------------------------------------------------------
+##   Note: Sterile target behavior differs from clean around handling of
+##         persistent content.  For ex removal of a python virtualenv adds
+##         extra overhead to development iteration:
+##           make clean   - preserve a virtual env
+##           make sterile - force reinstallation
+## -----------------------------------------------------------------------
+.PHONY: sterile
+sterile :: clean
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-verbose += help-sterile
+help-sterile ::
+	@echo
+	@echo '[MAKE: sterile]'
+	@echo '  sterile             make clean, also remove persistent content (~venv)'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/targets/test.mk b/makefiles/targets/test.mk
new file mode 100644
index 0000000..d70fa4a
--- /dev/null
+++ b/makefiles/targets/test.mk
@@ -0,0 +1,41 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: test
+test: $(venv-activate-script) $(JOBCONFIG_DIR)
+	$(activate) \
+	&& pipdeptree \
+	&& jenkins-jobs -l DEBUG test --recursive --config-xml -o "$(JOBCONFIG_DIR)" jjb/ ;
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-verbose += help-test
+help-test ::
+	@echo
+	@echo '[MAKE: test]'
+	@echo '  test                Perform testing that a jenkins job pull request will invoke'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/targets/tox.mk b/makefiles/targets/tox.mk
new file mode 100644
index 0000000..b3a638b
--- /dev/null
+++ b/makefiles/targets/tox.mk
@@ -0,0 +1,41 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## Intent: Sanity check incoming JJB config changes.
+##   Todo: Depend on makefiles/lint/jjb.mk :: lint-jjb
+## -----------------------------------------------------------------------
+# lint : lint-jjb
+lint-tox: lint-jjb
+	tox -e py310
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-verbose += help-tox
+help-tox ::
+	@echo
+	@echo '[MAKE: tox]'
+	@echo '  lint-tox            Python unit testing, sanity check incoming JJB changes.'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/vars/iam.groovy b/vars/iam.groovy
new file mode 100644
index 0000000..845bdd0
--- /dev/null
+++ b/vars/iam.groovy
@@ -0,0 +1,170 @@
+#!/usr/bin/env groovy
+// -----------------------------------------------------------------------
+// Copyright 2023 Open Networking Foundation (ONF) and the ONF Contributors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// -----------------------------------------------------------------------
+// % npm-groovy-lint vars/iam.groovy
+// -----------------------------------------------------------------------
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+String getIam(Map argv, String func)
+{
+    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(Map argv)
+{
+    String iam = getIam(argv, 'todo')
+
+    println("""
+[TODO: $iam]
+ o Pass jenkins parameters so todo() function can be conditionally called.
+ o Add call parameters to:
+   - Specify {ENTER,LEAVE} strings for logging.
+   - Set methods for caller to specify an alternate getIam() path.
+""")
+
+    return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Placeholder in case future enhancements are needed
+// -----------------------------------------------------------------------
+Boolean process(Map argv)
+{
+    String iam = getIam(argv, 'process')
+
+    Boolean leave = false
+
+    // Identify caller with a banner for logging
+    if (config.containsKey('enter')) {
+        println("** ${iam}: ENTER")
+    }
+    else if (config.containsKey('leave')) {
+        leave = true
+    }
+    else
+    {
+        println("** ${iam}: HELLO")
+    }
+
+    // Display future enhancement list
+    if (config.containsKey('todo')) {
+        todo()
+    }
+
+    // Maintain a sane logging enclosure block
+    if (leave)
+    {
+        println("** ${iam}: LEAVE")
+    }
+
+    return(true)
+}
+
+// -----------------------------------------------------------------------
+// Intent: Debug method for jenkins jobs identifying caller for logging.
+// -----------------------------------------------------------------------
+// Given:
+//   self    jenkins environment pointer 'this'
+//   config  groovy closure used to pass key/value pairs into argv
+//     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.
+//   o iam(this)
+//     {
+//         foo  = bar    // paramter foo is...
+//         tans = fans
+//     }
+// -----------------------------------------------------------------------
+Boolean call\
+    (
+    Closure body, // jenkins closure attached to the call iam() {closure}
+    // def self,  // jenkins env object for access to primitives like echo()
+    )
+{
+    // evaluate the body block and collect configuration into the object
+    Map argv = [:] // {ternary,elvis} operator
+    body.resolveStrategy = Closure.DELEGATE_FIRST
+    body.delegate        = argv
+    body()
+
+    String iam = getIam(argv, 'main')
+
+    println("** ${iam}: argv=${argv}")
+
+    Boolean ranToCompletion = false
+    try
+    {
+        // [WIP] type(self) needed to quiet lint complaint.
+        // npm-groovy-lint:  def for method parameter type should not be used  NoDef
+        print(" ** $iam: Type of self variable is =" + self.getClass())
+        print(" ** $iam: Type of body variable is =" + body.getClass())
+        // if (! self instanceof jenkins_object) { throw }
+
+        if (process(argv))
+        {
+            ranToCompletion = true
+        }
+    }
+    /* groovylint-disable*/ /* yuck! */
+    catch (Exception err)
+    /* groovylint-enable */
+    {
+        println("** ${iam}: EXCEPTION ${err}")
+        throw err
+    }
+    finally
+    {
+        println("** ${iam}: LEAVE")
+    }
+
+    if (!ranToCompletion)
+    {
+        throw new Exception("ERROR ${iam}: Detected incomplete script run")
+    }
+
+    return(true)
+}
+
+/*
+ * -----------------------------------------------------------------------
+[SEE ALSO]
+  o https://rtyler.github.io/jenkins.io/doc/book/pipeline/shared-libraries/#defining-a-more-structured-dsl
+ * -----------------------------------------------------------------------
+ */
+
+// [EOF]
