Skip to contents

1 Overview

This document provides an overview of {improveR}’s functions focused on working with steps.

Steps are the fundamental building blocks of every analytical workflow within the improve framework. Each step contains

  • at least one R script containing the relevant code
  • linked or embedded resources (e.g., links, input files) and any output files (e.g., reports, graphs) stored in the step’s inventory
  • tools and their definitions to orchestrate the script’s execution and file creation

Grouped by their role in the overall analysis, they constitute an analysis tree (e.g., analysis tree ‘Exploratory Data Analysis’).

Critically, by linking one step’s output as an input to another step, steps can be ‘horizontally’ chained together to an integrated workflow. This workflow can span across the entire or only parts of the analytical pipeline from the initial import of raw data (e.g., originating from a data order specification), via the exploratory data analysis, statistical modeling, to the reporting and eventual review. This integration of steps is instrumental when it comes to streamlining the entire workflow and ensuring reproducibility of the final results.

Equally important is improve’s ability to organize steps in a vertical hierarchy by introducing parent-child relationships between them. A child step can be a modified copy of a parent step, e.g., created to inquire into the consequences of a specific modification within the step (e.g., use of a different model specification). Similarly, a step can be attached to a parent step due to substantive considerations by the researcher, reflecting a thematic or conceptual hierarchy between them.

The above outlined two perspectives are central when it comes to the understanding of the concepts of lineage and usage on one hand, and child and parent on the other hand. These terms are ubiquitous when working with the improve framework in general and step-related functions in particular.

The hierarchical parent-child relationship is conceptually different to the horizontal relationship between two steps within a workflow. Step A can produce results which are ‘used’ by Step B. But this does not make Step A a parent of Step B. Similarly, Step B is not a child of Step A even if Step A is within the lineage of Step B. Keeping this conceptual distinction in mind is critical and instrumental.

  • Workflow, or input/output-centered perspective: Looks horizontally at how a chain of steps (in analysis trees) transforms a distinct input into distinct output. This view is visualized in improve’s Data Manipulation Graph.

  • File-centric perspective: Focuses on how files inside different steps are related in terms of their creation, which is more akin to a vertical angle. This perspective is visualized in improve client’s editor view when displaying an analysis tree (as above in Figure 1).

With this as the background, the current document goes beyond the primarily technical focus of the function references/help files, and seeks to demonstrate the actual application of the step-function family. To do so, throughout the document references to various examples are included.

Figure 1
Improve client: Overview of Analysis Trees with Steps

Improve client: Parent-Child Relations of Steps within a tree

Improve client: Overview of a workflow’s step relations within the Data Manipulation Graph

2 getStep

2.1 Purpose of the function

The getStep function is central when it comes to working with steps specifically and the wider {improveR} ecosystem generally. Calling the function on a step returns a detailed environment object which not only encompasses information on the the step’s own properties, but also on its relation with other steps within the wider workflow as well as additional function definitions to work with this information. The environments generated by getStep() provide the foundational data structures and operational interfaces that enable complex workflow operations, dependency tracking, and coordinated multi-step analytical pipeline execution.

2.2 Relation to other functions

In the broader improveR ecosystem, getStep serves as a critical integration point. It connects individual step management with workflow-level orchestration through getWorkflow. The function supports execution coordination with functions like finishRunResource and runStepResource. It interfaces with the distributed resource management system through authenticated REST API calls and intelligent caching strategies. The step environment created by getStep() includes several functions which further facilitate working with the step: createTemplate(), getStepInventory(), getStepResource(), getStepState(), getStepWithoutCache(), and retrieveMainProcess (for details see below).

2.3 Under the hood

In broad terms, the function works in three steps: First, it loads the step’s information from the server (getStepDf). This confirms the step exists and retrieves its settings, files, and history. Second, it creates a workflow environment (createWorkflow). This sets up tracking for how steps connect and depend on each other. Third, it builds the complete step environment (createStepEnv). This creates a comprehensive structure with all step data, relationships, and methods ready to use.

2.4 Example

Start

To demonstrate the application of getStep() see the example below. As an input the function takes a step’s ident, which can be its path, resource (version) id, full entity (version) id, or short entitiy (version) id.

Example getStep(): Apply function
identATModelingStep1 <- "/improve-tutorial/Modeling/Step 1" 
envATModelingStep1 <- getStep(identATModelingStep1)
class(envATModelingStep1)
## [1] "environment"

The returned result is an environment with multiple bindings of different classes.

Example getStep(): Overview of obtained elements’ class
tibble(
  name = ls(envATModelingStep1),
  class = purrr::map_chr(name, \(x) class(get(x, envir = envATModelingStep1)))
) %>% arrange(class)
## # A tibble: 13 × 2
##    name                class      
##    <chr>               <chr>      
##  1 stepDf              data.frame 
##  2 children            environment
##  3 lineage             environment
##  4 parent              environment
##  5 this                environment
##  6 usage               environment
##  7 workflow            environment
##  8 createTemplate      function   
##  9 getStepInventory    function   
## 10 getStepResource     function   
## 11 getStepState        function   
## 12 getStepWithoutCache function   
## 13 retrieveMainProcess function

To inspect each of the returned environment’s bindings, click on the elements in the viewer below.

getStepInventory(), getStepState(), getStepWithoutCache(), getStepResource(), retrieveMainProcess() and createTemplate() contain all function definitions, meaning these functions can be called on the obtained environment to get additional details or trigger other actions.

2.5 Details

For a thorough understanding of the output of getStep(), the sections below will look into each element of the obtained step environment.

Show details
### children

The environment of the loaded step contains the element children which is again of class environment. Checking its content reveals that at this point it contains only a single element: the function load(). Once this function is called, children becomes additionally populated by four steps, i.e. the child steps.

Call load() function in ‘children’
#content of children binding with only 'load' function
ls(envATModelingStep1$children)
## [1] "load"

#call function load()
envATModelingStep1$children$load()
## 2025-10-17 00:24:59.33309 INFO::adding  Step 7 ST-54672 to children
## 2025-10-17 00:25:01.582276 INFO::adding  Step 6 ST-54651 to children
## 2025-10-17 00:25:03.847604 INFO::adding  Step 8 ST-54675 to children
## 2025-10-17 00:25:06.006655 INFO::adding  Step 1 ST-65316 to children

#show children
listviewer::jsonedit(as.list(envATModelingStep1$children))

This result is consistent with the output returned by improveR’s getChildSteps() or the pertaining graph in the improve client. Note that in this case, the step has one child in a different analysis tree (Review/Step 1).

Get Step 1’s children via loadChildStep
childATModelingStep1 <- improveR::loadChildSteps("/improve-tutorial/Modeling/Step 1")$data[[1]]
nrow(childATModelingStep1)
## [1] 4
childATModelingStep1 %>% select(path, description)
##                                path                  description
## 1 /improve-tutorial/Modeling/Step 7   Model: Duration ~ Wt + Age
## 2 /improve-tutorial/Modeling/Step 6 Model 2: Duration ~ Wt + Sex
## 3 /improve-tutorial/Modeling/Step 8 Model: Duration ~ Wt+Age+Sex
## 4   /improve-tutorial/Review/Step 1       Model 1: Duration ~ Wt
Figure 2
Improve client: Child steps within AT Modeling

Improve client: Child step within AT Review

Once loaded, navigating from the step to its children can be conveniently done by simply adding the step’s location to the call, e.g., envATModelingStep1$children$'Modeling/Step 7/54672'. The navigation is facilitated by autocompletion when used in the terminal of RStudio or Positron IDEs (or VS Code with radian extension).

Figure 3
Autocomplete for workflow navigation

In terms of its structure, the obtained environment of the child step is identical to the one previously obtained for Step 1 and contains again 13 elements, including children and parent.

Below the elements of Modeling/Step 7/54672’s environment.

Structure and Content of child environment
class(envATModelingStep1$children$`Modeling/Step 7/54672`)
## [1] "environment"
listviewer::jsonedit(list(envATModelingStep1$children$`Modeling/Step 7/54672`))
### parent

As with the above described element children, the nested environment parent initially also contains only the function load().

Calling the function here, on /improve-tutorial/Modeling/Step 1, does not return a step since Step 1 does not have a parent (see the image of the analysis tree ‘Modeling’ above, Figure 1). Consequently, the function load() remains the only element of the environment parent.

Trying to load the parent of Step 1 which has no parent
#content of 'parent'
ls(envATModelingStep1$parent)
## [1] "load"

#trigger function 'load()'
envATModelingStep1$parent$load()

#content of 'parent' is unchanged
ls(envATModelingStep1$parent)
## [1] "load"

To properly demonstrate the use of the parent element, let us get a different step, i.e. /improve-tutorial/Modeling/Step 8 which has Step 1 as a parent (see again above, Figure 1).

Load parent of Step 8
#get Step 8
envATModelingStep8 <- getStep("/improve-tutorial/Modeling/Step 8") 

#function load() is initially the only element of the parent environment
ls(envATModelingStep8$parent)
## [1] "load"

#call function load()
envATModelingStep8$parent$load()

#`parent` is is now featuring a new element, Step 1
ls(envATModelingStep8$parent)
## [1] "load"                  "Modeling/Step 1/54635"

As shown above, after calling the load() function on the parent environment of Step 8, a new element is added: Modeling/Step 1/54635, which - as we know from above - is the parent of Step 8.

### usage

The usage binding is important when it comes to working with existing workflows. For details see here.

The element usage in Step 1’s environment refers to those steps which are directly (‘consumers’) or indirectly (‘indirect consumers’) depending on this step within a specific workflow. ‘Depending’ means in this context that the results produced by the step are used by the subsequent steps. The covered steps are ‘to the right’ or ‘downstream’ in the analysis.

Let’s demonstrate this with the specific example of Step /improve-tutorial/Modeling/Step 1.

After having obtained a step’s environment, its usage related data is not yet available. Solely the function load() is available in envATModelingStep1$usage. Only after having called the function, envATModelingStep1$usage contains details on the downstream steps.

Load usage of Step 1
ls(envATModelingStep1$usage) #function `load()` sole element of `usage`
## [1] "load"

envATModelingStep1$usage$load(stepDepth=-1, treeDepth=-1) #call `load()`
## 2025-10-17 00:25:13.730784 INFO::adding  Step 1 envhost1.hc.scintecodev.internal-5310:ST-62516 to usage
## 2025-10-17 00:25:17.192561 INFO::adding  Step 10 envhost1.hc.scintecodev.internal-5310:ST-59463 to usage
## 2025-10-17 00:25:19.019255 INFO::adding  Step 9 envhost1.hc.scintecodev.internal-5310:ST-54678 to usage
## 2025-10-17 00:25:23.670792 INFO::adding  Step 1 envhost1.hc.scintecodev.internal-5310:ST-64312 to usage
## 2025-10-17 00:25:25.410479 WARNING::Resource with ID: envhost1.hc.scintecodev.internal-5310:FI-54665 could not be loaded
## 2025-10-17 00:25:26.540146 WARNING::Resource with ID: envhost1.hc.scintecodev.internal-5310:FI-56117 could not be loaded
## 2025-10-17 00:25:26.942077 WARNING::Resource with ID: envhost1.hc.scintecodev.internal-5310:FI-54665 could not be loaded
## 2025-10-17 00:25:27.013872 WARNING::Resource with ID: envhost1.hc.scintecodev.internal-5310:FI-56117 could not be loaded

ls(envATModelingStep1$usage) 
## [1] "load"                   "Modeling/Step 10/59463" "Modeling/Step 9/54678"  "Reporting/Step 1/62516" "Reporting/Step 1/64312"
listviewer::jsonedit(as.list(envATModelingStep1))

The usage element provides insights into all steps that directly or indirectly depend on the current step within a workflow. After calling load(), the environment is populated with downstream step information, allowing the user to trace how the step’s results propagate through the analysis.

How encompassing a step’s usage is loaded, i.e. how far downstream steps should retrieved, is specified by the load() function’s stepDepth and treeDepth parameters. A value of stepDepth==1 covers all steps which are directly following the step in question. A value of 2 casts the net wider and returns also those steps which are directly following the steps which were retrieved with the value 1. The value can be increased as deemed useful. A value of -1 is the most far-reaching and returns all steps which make use of the initially retrieved step.

Similarly, the function argument treeDepth defines over how many analysis trees a step’s usage should be loaded.

Parameter stepDepth and treeDepth
envATModelingStep1 <- getStep("/improve-tutorial/Modeling/Step 1")
listviewer::jsonedit(as.list(envATModelingStep1))
Parameter stepDepth and treeDepth

envATModelingStep1$usage$load(stepDepth=1, treeDepth=1)
## 2025-10-17 00:25:47.071812 INFO::adding  Step 1 envhost1.hc.scintecodev.internal-5310:ST-62516 to usage
## 2025-10-17 00:25:48.038508 INFO::adding  Step 10 envhost1.hc.scintecodev.internal-5310:ST-59463 to usage
## 2025-10-17 00:25:49.048397 INFO::adding  Step 9 envhost1.hc.scintecodev.internal-5310:ST-54678 to usage
envATModelingStep1$usage$load(treeDepth=0)

listviewer::jsonedit(as.list(envATModelingStep1$usage)) 
### lineage

The element lineage inside Step 1’s environment is the counterpart to usage. It includes steps which are upstream or ‘to the left’ of Step 1. In other words, it refers to those steps of which the step in question, i.e. here Step 1 of the analysis tree ‘Modeling’, is depending on. The parameter stepDepth and treeDepth again define the scope (or width) of the function call load().

Get lineage - PENDING/CURRENTLY NOT WORKING
envATModelingStep1 <- getStep("/improve-tutorial/Modeling/Step 1")
ls(envATModelingStep1$lineage) #shows only fn load, OK
## [1] "load"
Code
envATModelingStep1$lineage$load(stepDepth=-1, treeDepth=-1)
## 2025-10-17 00:25:55.435663 INFO::adding  Step 5 envhost1.hc.scintecodev.internal-5310:ST-54047 to lineage
## 2025-10-17 00:25:58.509559 INFO::adding  Step 6 envhost1.hc.scintecodev.internal-5310:ST-75706 to lineage
## 2025-10-17 00:26:02.257158 INFO::adding  Step 4 envhost1.hc.scintecodev.internal-5310:ST-54744 to lineage
## 2025-10-17 00:26:05.203247 INFO::adding  Step 2 envhost1.hc.scintecodev.internal-5310:ST-54625 to lineage
x <- envATModelingStep1$workflow$df()

envATModelingStep1$lineage$load(treeDepth=-1)
ls(envATModelingStep1$lineage) 
## [1] "EDA/Step 5/54047" "load"
### stepDf

stepDf is another element included in the environment which was returned by getStep(). It is a data frame and contains metadata on the step. Two columns in stepDf should be highlighted here: processes and remoteFiles.

processes is a list column (a nested data frame) which provides details on the tool and related processes steering the execution of the pertaining step. This data reflects the information shown in the tool tab of the step in improve’s client.

Details of stepDf
class(envATModelingStep1$stepDf)
## [1] "data.frame"
names(envATModelingStep1$stepDf)
##  [1] "handle"         "processes"      "treeIdent"      "treeName"       "treePath"       "description"    "rationale"      "sourceEntityId" "sourceName"     "remoteFiles"    "fullName"
listviewer::jsonedit(as.list(envATModelingStep1$stepDf))
Details of stepDf

envATModelingStep1$stepDf$processes[[1]]
##                                 handle runserverLabel toolLabel toolInstance                                                                                                                                                                    toolArgs   toolStreamablePatterns selected gridTool main name processType position gridArguments
## 1 d768f949-9ede-49ce-80f1-3d3f1dfa9a5d      runserver     R_4.2   renv batch -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59\r\n<command-file> *.txt\r\n*.out\r\n*.Rout     TRUE     TRUE TRUE Main        main        1
Figure 4
Tools and Processes of Step 1 in improve’s client

The second column of stepDf which needs highlighting is remoteFiles. It is again a list-column containing a data frame. This data frame presents details on those files which are inputs into step 1, and get further processed when the step is executed. Critically, it also features the column asLink which indicates whether the file is stored inside the step’s inventory or linked from another step.

Code
class(envATModelingStep1$stepDf$remoteFiles)
## [1] "list"

envATModelingStep1$stepDf$remoteFiles[[1]][c("name", "variableName", "ident", "asLink", "variableProcess")]
##                   name variableName                                          ident asLink variableProcess
## 1 ./remDataSubject.csv         <NA> envhost1.hc.scintecodev.internal-5310:FI-57666   TRUE            <NA>
### getStepInventory

The binding getStepInventory stored inside Step 1’s environment is of class function and contains the function’s definition.

Definition of getStepInventory
class(envATModelingStep1$getStepInventory)
## [1] "function"

Calling the function returns the inventory of the step. Note that in contrast to the above described load() functions related to children and parent, the getStepInventory() function does not load the inventory into the step’s environment, but returns it as a data frame. In other words, while envATModelingStep1$children$load() triggers a ‘side-effect’ to modify the step’s environment, getStepInventory() does not modify the environment but returns its output. The returned data frame contains the list column data which provides the details on each of the inventory’s files.

Apply function
#apply function to Step 1's environment
stepInventory <- envATModelingStep1$getStepInventory()

stepInventoryData <- stepInventory %>%
unnest_longer(data) %>%
unnest_wider(data, names_sep="_")

class(stepInventory)
## [1] "data.frame"
glimpse(stepInventoryData)
## Rows: 10
## Columns: 46
## $ type                           <chr> "inventory", "inventory", "inventory", "inventory", "inventory", "inventory", "inventory", "inventory", "inventory", "inventory"
## $ resourceId                     <chr> "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3"
## $ entityId                       <chr> "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635", "envhost1.hc.scintecodev.internal-5310:ST-54635"
## $ entityVersionId                <chr> "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1", "envhost1.hc.scintecodev.internal-5310:ST-54635-1"
## $ path                           <chr> "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1", "/improve-tutorial/Modeling/Step 1"
## $ name                           <chr> "Step 1", "Step 1", "Step 1", "Step 1", "Step 1", "Step 1", "Step 1", "Step 1", "Step 1", "Step 1"
## $ data_resourceId                <chr> "750761C41599489EB75590A2D8C65414", "46DC00CF0C374BAA8EBDE2A8AB86AAEC", "AEDF60E7E89A433A8E0C02168C553F06", "DB346E816E4C4620BFEE054C312A9BC3", "72F71B64C7E74330B0D7348242E25067", "FDBF80F73533490484C7D4B53B447B70", "A7BA5F26B1444BFDBEBE951FF0102398", "FA88F38A5AC948F19F9852046F356DEE", "9F4766EE0FF04CAEAA1BE36AAE2ACC91", "C3328A2F9AE54F3D832D5382566C32E8"
## $ data_resourceVersionId         <chr> "05BE7AB1F1974AABB6881233DBBEE609", "53E099ABB47E4418ADF45FF0A9103998", "513CC08D48DD40108455273F207E8E1C", "4EA772CCE97C4BAB97CEA1E8D99BBB3F", "EE4DC056338643F1B6BE1A5FBB1B04AB", "B511FB89DD2841E6A530C6D529A9596B", "9721B56F4B2C44A19A57B44FB6831E86", "D5A8B2DBAEEA4F91A7C6C3C365B61553", "B1B04FFFA6464789A7BD8B9689B35794", "6DACC761B1BF418C80D034C65AB535DA"
## $ data_nodeType                  <chr> "Link", "File", "File", "File", "File", "File", "File", "File", "File", "File"
## $ data_name                      <chr> "remDataSubject.csv", "graphPerformanceModWt.png", "Rplots.pdf", "_STDERR.txt", ".gridhost", "tabmodWtEstimates.png", "_STDOUT.txt", "Model.r", "modWt.RDS", "tabmodWtEstimates.html"
## $ data_parentId                  <chr> "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3", "70BF16ADD9484B7EA0A933B72544C2A3"
## $ data_deleted                   <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
## $ data_entityId                  <chr> "envhost1.hc.scintecodev.internal-5310:LI-59204", "envhost1.hc.scintecodev.internal-5310:FI-114626", "envhost1.hc.scintecodev.internal-5310:FI-114735", "envhost1.hc.scintecodev.internal-5310:FI-114625", "envhost1.hc.scintecodev.internal-5310:FI-114624", "envhost1.hc.scintecodev.internal-5310:FI-114736", "envhost1.hc.scintecodev.internal-5310:FI-114623", "envhost1.hc.scintecodev.internal-5310:FI-54636", "envhost1.hc.scintecodev.internal-5310:FI-114627", "envhost1.hc.scintecodev.internal-5310:FI-114628"
## $ data_entityVersionId           <chr> "envhost1.hc.scintecodev.internal-5310:LI-59204-4", "envhost1.hc.scintecodev.internal-5310:FI-114626-4", "envhost1.hc.scintecodev.internal-5310:FI-114735-3", "envhost1.hc.scintecodev.internal-5310:FI-114625-8", "envhost1.hc.scintecodev.internal-5310:FI-114624-8", "envhost1.hc.scintecodev.internal-5310:FI-114736-1", "envhost1.hc.scintecodev.internal-5310:FI-114623-8", "envhost1.hc.scintecodev.internal-5310:FI-54636-13", "envhost1.hc.scintecodev.internal-5310:FI-114627-4", "envhost1.hc.scintecodev.internal-5310:FI-114628-4"
## $ data_fullEntityId              <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:LI-59204", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114626", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114735", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114625", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114624", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114736", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114623", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-54636", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114627", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114628"
## $ data_fullEntityVersionId       <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:LI-59204-4", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114626-4", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114735-3", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114625-8", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114624-8", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114736-1", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114623-8", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-54636-13", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114627-4", "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-114628-4"
## $ data_revisionId                <chr> "9571CB8F8F37462AB69CA1C7394BF73F", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE", "68682DACBCB440D29ABE3216DA951BAC", "29E506A49244436591E58827B0C6E3DE", "29E506A49244436591E58827B0C6E3DE"
## $ data_createdByName             <chr> "Wolfgang Schwarzenbrunner", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Wolfgang Schwarzenbrunner", "Administrator", "Administrator"
## $ data_createdById               <chr> "98E5D50FCFE64B6B8128C35ADA89BA4D", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "98E5D50FCFE64B6B8128C35ADA89BA4D", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C"
## $ data_createdAt                 <dbl> 1.746012e+12, 1.760527e+12, 1.760539e+12, 1.760527e+12, 1.760527e+12, 1.760541e+12, 1.760527e+12, 1.745397e+12, 1.760527e+12, 1.760527e+12
## $ data_lastModifiedOn            <dbl> 1.760539e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12, 1.760541e+12
## $ data_lastModifiedById          <chr> "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C", "1594E8ED57E6C30BE063030011ACA58C"
## $ data_lastModifiedByName        <chr> "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator", "Administrator"
## $ data_fileSize                  <int> 0, 348598, 123674, 44977, 10, 26115, 227, 1820, 3135, 15601
## $ data_hasChildren               <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
## $ data_hasChildrenIncludingFiles <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
## $ data_path                      <chr> "/improve-tutorial/Modeling/Step 1/remDataSubject.csv", "/improve-tutorial/Modeling/Step 1/graphPerformanceModWt.png", "/improve-tutorial/Modeling/Step 1/Rplots.pdf", "/improve-tutorial/Modeling/Step 1/_STDERR.txt", "/improve-tutorial/Modeling/Step 1/.gridhost", "/improve-tutorial/Modeling/Step 1/tabmodWtEstimates.png", "/improve-tutorial/Modeling/Step 1/_STDOUT.txt", "/improve-tutorial/Modeling/Step 1/Model.r", "/improve-tutorial/Modeling/Step 1/modWt.RDS", "/improve-tutorial/Modeling/Step 1/tabmodWtEstimates.html"
## $ data_targetId                  <chr> "18EB65D95A0A43ED9213EEEAB0A94764", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetVersionId           <chr> "688EF5807FD9433E84FE40BC53A602B4", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetNodeType            <chr> "File", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetResourceName        <chr> "remDataSubject.csv", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetFileSize            <int> 2885, NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetEntityId            <chr> "envhost1.hc.scintecodev.internal-5310:FI-57666", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetEntityVersionId     <chr> "envhost1.hc.scintecodev.internal-5310:FI-57666-12", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_fullTargetEntityId        <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-57666", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_fullTargetEntityVersionId <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:FI-57666-12", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetLastModified        <chr> "1760538857759", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_targetRevisionId          <chr> "2EAC5A1501AD4BE2B36527B9E0F447EF", NA, NA, NA, NA, NA, NA, NA, NA, NA
## $ data_outdatedLink              <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
## $ data_finishedStatus            <chr> "unfinished", "unfinished", "unfinished", "unfinished", "unfinished", "unfinished", "unfinished", "unfinished", "unfinished", "unfinished"
## $ data_lastModifiedOnDate        <dttm> 2025-10-15 16:36:32, 2025-10-15 17:07:46, 2025-10-15 17:07:46, 2025-10-15 17:07:46, 2025-10-15 17:07:46, 2025-10-15 17:07:46, 2025-10-15 17:07:46, 2025-10-15 17:07:07, 2025-10-15 17:07:46, 2025-10-15 17:07:46
## $ data_createdAtDate             <dttm> 2025-04-30 13:23:35, 2025-10-15 13:18:30, 2025-10-15 16:37:57, 2025-10-15 13:13:15, 2025-10-15 13:13:15, 2025-10-15 17:07:46, 2025-10-15 13:13:15, 2025-04-23 10:25:08, 2025-10-15 13:18:30, 2025-10-15 13:18:30
## $ data_isVersion                 <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
## $ data_status                    <chr> NA, "Complete", "Complete", "Complete", "Complete", "Complete", "Complete", "Complete", "Complete", "Complete"
## $ data_fileHash                  <chr> NA, "F7099CD1D479ACD3CD53038EB1108FD1BFAEC6520B15424842AD0F7905A2F56A", "A822E148B0D91A98742BB4FDEBD173E3A06D18F63D32465329847CF3B706B8EB", "E228B6A0854A8862D859298ADC5AA40865686E4920E03BE817A72D87E23F634A", "346840D5A3D9FE9B61CE99955BB98DF3DB872090732C96AA5DF1D83CB1F3E85A", "0526BDE7F84406FA4AF32B339375B5B3A48D902561EB9AC1DFA9A43004AC2669", "C9452C17C06E516FCD1F211F9604431EA2F6855E5A5034CD7A2F99617EB9CD97", "6DF66C52DE8526A52A5B84751969FC5776B9795BD9201796FA12DC749DBE0C1C", "427EE643143FE32F11E5195A3CDB78E10F7FA117F0D428E50B1D3317AD673A08", "67301F65A1270020B8CFF6FA22DF38CF30DE090110C2E4BD1A843F89D0903699"
## $ data_inventoryPath             <chr> "remDataSubject.csv", "graphPerformanceModWt.png", "Rplots.pdf", "_STDERR.txt", ".gridhost", "tabmodWtEstimates.png", "_STDOUT.txt", "Model.r", "modWt.RDS", "tabmodWtEstimates.html"

stepInventoryData %>% 
select(
  data_name
)
## # A tibble: 10 × 1
##    data_name                
##    <chr>                    
##  1 remDataSubject.csv       
##  2 graphPerformanceModWt.png
##  3 Rplots.pdf               
##  4 _STDERR.txt              
##  5 .gridhost                
##  6 tabmodWtEstimates.png    
##  7 _STDOUT.txt              
##  8 Model.r                  
##  9 modWt.RDS                
## 10 tabmodWtEstimates.html

To demonstrate getStepInventory()’s connection to the improve client, below is the pertaining inventory represented in the client.

Figure 5
Improve client: inventory of Step 1

### getStepResource()

Similar to getStepInventory(), getStepResource() is a binding in envATModelingStep1 of class function. Calling it returns a data frame containing the resource details on Step 1. Under the hood, it calls ‘improveR::loadResource()’.

Get step resources
listviewer::jsonedit(as.list(envATModelingStep1))
Get step resources
stepResource <- envATModelingStep1$getStepResource()
glimpse(stepResource)
## Rows: 1
## Columns: 43
## $ resourceId                <chr> "70BF16ADD9484B7EA0A933B72544C2A3"
## $ description               <chr> "Model 1: Duration ~ Wt"
## $ rationale                 <chr> "Investigate linear relationship"
## $ resourceVersionId         <chr> "2D539FBA2314464F8E79E3A8BCC76D06"
## $ nodeType                  <chr> "Step"
## $ name                      <chr> "Step 1"
## $ parentId                  <chr> "A0D580FB7DE64E5690BCEBAEC951141C"
## $ deleted                   <lgl> FALSE
## $ entityId                  <chr> "envhost1.hc.scintecodev.internal-5310:ST-54635"
## $ entityVersionId           <chr> "envhost1.hc.scintecodev.internal-5310:ST-54635-1"
## $ fullEntityId              <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635"
## $ fullEntityVersionId       <chr> "http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635-1"
## $ revisionId                <chr> "F33610474FF54B07970CABD4B3987F7D"
## $ createdByName             <chr> "Wolfgang Schwarzenbrunner"
## $ createdById               <chr> "98E5D50FCFE64B6B8128C35ADA89BA4D"
## $ createdAt                 <dbl> 1.745397e+12
## $ lastModifiedOn            <dbl> 1.745397e+12
## $ lastModifiedById          <chr> "98E5D50FCFE64B6B8128C35ADA89BA4D"
## $ lastModifiedByName        <chr> "Wolfgang Schwarzenbrunner"
## $ fileSize                  <int> 0
## $ hasChildren               <lgl> FALSE
## $ hasChildrenIncludingFiles <lgl> TRUE
## $ path                      <chr> "/improve-tutorial/Modeling/Step 1"
## $ outdatedLink              <lgl> FALSE
## $ finishedStatus            <chr> "unfinished"
## $ toolCategory              <chr> "rlang"
## $ toolId                    <chr> "CDB597C3EBF64B27AE573C3A70B85ADB"
## $ runStatus                 <chr> "FINISHED"
## $ keyStep                   <lgl> FALSE
## $ baseModel                 <lgl> FALSE
## $ fullModel                 <lgl> FALSE
## $ finalModel                <lgl> FALSE
## $ referenceModel            <lgl> FALSE
## $ ownedById                 <chr> "1594E8ED57E6C30BE063030011ACA58C"
## $ processType               <chr> "main"
## $ processName               <chr> "Main"
## $ runserverUrl              <chr> "http://envhost1.hc.scintecodev.internal:5330/runserver/run"
## $ runserverLocal            <lgl> FALSE
## $ runserverReproducible     <lgl> FALSE
## $ runserver                 <chr> "http://envhost1.hc.scintecodev.internal:5330/runserver/run"
## $ lastModifiedOnDate        <dttm> 2025-04-23 10:25:08
## $ createdAtDate             <dttm> 2025-04-23 10:25:08
## $ isVersion                 <lgl> FALSE
### retrieveMainProcess

retrieveMainProcess is of class function. When called it extracts the process of type ‘main’ from the step’s processes.

Call function retrieveMainProcess
envATModelingStep1$retrieveMainProcess()
##                                 handle runserverLabel toolLabel toolInstance                                                                                                                                                                    toolArgs   toolStreamablePatterns selected gridTool main name processType position gridArguments
## 1 d768f949-9ede-49ce-80f1-3d3f1dfa9a5d      runserver     R_4.2   renv batch -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59\r\n<command-file> *.txt\r\n*.out\r\n*.Rout     TRUE     TRUE TRUE Main        main        1

The output is the filtered result of the processes stored in the stepDf binding. In the present case of Step 1, there is only the main process.

Get process ‘Main’ from stepDf
envATModelingStep1$stepDf %>%
select(processes) %>%
unnest_wider(processes) %>%
select(processType, name)
## # A tibble: 1 × 2
##   processType name 
##   <chr>       <chr>
## 1 main        Main
### getStepState

The binding getStepState inside the obtained step environment holds a function which returns the state of the step: “Initial”, “Running”, “Terminated”, “Finished”, “Error”, “Outdated Link”, or “Outdated”.

Call getStepState
envATModelingStep1$getStepState() 
## [1] "FINISHED"
### getStepWithoutCache

The function getStepWithoutCache() loads the step resource directly from the server (using improveR:::internalLoadResourceFromServer()), bypassing any local cache. It returns up-to-date information about a step from the server, ignoring any cached or potentially stale local data.

Call getStepWithoutCache
envATModelingStep1$getStepWithoutCache()
##                         resourceId            description                       rationale                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId             createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById        lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                              path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName                                               runserverUrl runserverLocal runserverReproducible                                                  runserver  lastModifiedOnDate       createdAtDate isVersion
## 1 70BF16ADD9484B7EA0A933B72544C2A3 Model 1: Duration ~ Wt Investigate linear relationship 2D539FBA2314464F8E79E3A8BCC76D06     Step Step 1 A0D580FB7DE64E5690BCEBAEC951141C   FALSE envhost1.hc.scintecodev.internal-5310:ST-54635 envhost1.hc.scintecodev.internal-5310:ST-54635-1 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635-1 F33610474FF54B07970CABD4B3987F7D Wolfgang Schwarzenbrunner 98E5D50FCFE64B6B8128C35ADA89BA4D 1.745397e+12   1.745397e+12 98E5D50FCFE64B6B8128C35ADA89BA4D Wolfgang Schwarzenbrunner        0       FALSE                      TRUE /improve-tutorial/Modeling/Step 1        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB  FINISHED   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main http://envhost1.hc.scintecodev.internal:5330/runserver/run          FALSE                 FALSE http://envhost1.hc.scintecodev.internal:5330/runserver/run 2025-04-23 10:25:08 2025-04-23 10:25:08     FALSE
### this

The this binding is a self-reference of the step’s environment. It enables function calls to make a reference to the environment itself.

Use of ‘this’ binding
x <- envATModelingStep1$this$getStepInventory()
y <- envATModelingStep1$getStepInventory()
identical(x, y)
## [1] TRUE

3 attachStep

3.1 Purpose of the function

The attachStep function establishes hierarchical relationships between steps in improveR workflows by attaching a step to another step that serves as its parent. This function is essential for creating structured hierarchies that reflect the logical flow and dependencies between analytical steps. It provides flexibility to reorganize existing workflows, insert new steps into established processes, or correct relationships that were initially configured incorrectly, while maintaining workflow integrity and enabling proper execution planning and dependency tracking.

3.2 Relation to other functions

Within the step functions family, attachStep forms a complementary pair with detachStep for managing step hierarchy, working together with createStep to provide complete workflow structure control. The function integrates closely with navigation functions like getStep, loadParentStep, and loadChildSteps by ensuring cached relationships are updated through unloadParentStep calls. In the broader improveR ecosystem, it connects with the resource management system via loadResource.

3.3 Under the hood

In broad terms, the function works in three steps: First, it validates both the step and parent exist (loadResource). This confirms the entities are valid and retrieves the workflow context information. Second, it creates the parent-child relationship through an API request. This updates the hierarchy on the server by linking the step to its new parent. Third, it clears cached relationship data (unloadParentStep). This ensures that subsequent navigation operations see the updated hierarchy instead of outdated information.

3.4 Example

Attach Step 2 to Step 1
step1Parent <- "/improve-tutorial/demoSteps/Step 1"
step2Child <- "/improve-tutorial/demoSteps/Step 2"

attachStep(ident=step2Child, parent=step1Parent)
##                         resourceId       description                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                               path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName  lastModifiedOnDate       createdAtDate isVersion
## 1 1155C0A2461349788335BB7903EF765B step now attached 3AC34A4EC3AC423BA52332FC89D9493F     Step Step 2 22F1F10302A74DB686B30D4CE41703EF   FALSE envhost1.hc.scintecodev.internal-5310:ST-91833 envhost1.hc.scintecodev.internal-5310:ST-91833-3 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91833 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91833-3 7178470414C7483E8413D997B1184A0E Administrator 1594E8ED57E6C30BE063030011ACA58C 1.756309e+12   1.758054e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/demoSteps/Step 2        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB   INITIAL   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main 2025-09-16 22:18:32 2025-08-27 17:42:01     FALSE

#Verify new structure
loadResource(ident=step1Parent)
##                         resourceId         description                                                                          rationale                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                               path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName  lastModifiedOnDate       createdAtDate isVersion
## 1 F9965BC0D03C42FA8C90ABBFD4CA9706 changed description Updated rationale explaining the scientific justification for this analytical step 4B813CD4B2174EAB998A5BC1883CA4F0     Step Step 1 22F1F10302A74DB686B30D4CE41703EF   FALSE envhost1.hc.scintecodev.internal-5310:ST-91832 envhost1.hc.scintecodev.internal-5310:ST-91832-3 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91832 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91832-3 7178470414C7483E8413D997B1184A0E Administrator 1594E8ED57E6C30BE063030011ACA58C 1.756309e+12   1.758054e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/demoSteps/Step 1        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB   INITIAL   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main 2025-09-16 22:18:32 2025-08-27 17:41:37     FALSE

step1ParentChild <- loadChildSteps(ident=step1Parent)
step1ParentChild$data[[1]]$name #'Step 2' is shown as child
## [1] "Step 2"
Figure 6: Steps before and after calling ‘attachStep’
(a) before…
(b) … and after calling attachStep

4 detachStep

4.1 Purpose of the function

The detachStep() function is the counterpart to attachStep() and removes the hierarchical relationship between a step and its parent. This function is essential for workflow reorganization, allowing users to isolate steps that were incorrectly attached, flatten complex hierarchies, or prepare steps for reassignment to different parents. It provides the flexibility to modify workflow structures without deleting steps or losing their content, while maintaining data integrity and ensuring that cached relationships are properly updated throughout the system.

4.2 Relation to other functions

Within the step functions family, detachStep works as the complementary counterpart to attachStep, providing the opposite operation for managing step hierarchies. It integrates with navigation functions like loadParentStep and loadChildSteps by updating cached parent-child relationships through unloadChildSteps and unloadParentStep calls. The function works seamlessly with createStep and other step management functions to provide complete control of the analysis’ structure. In the broader improveR ecosystem, it connects with the resource management system via loadResource for step validation and uses the authentication infrastructure to make REST API calls that persist structural changes across the distributed system.

4.3 Under the hood

In broad terms, the function works in three steps: First, it validates the step exists and retrieves parent information (loadResource). This confirms the step is valid and retrieves the workflow context and current parent relationship. Second, it removes the parent-child relationship through an API request. This updates the hierarchy on the server by breaking the link between step and parent. Third, it clears cached relationship data on both sides (unloadChildSteps and unloadParentStep). This ensures that subsequent navigation operations see the updated hierarchy instead of outdated information.

4.4 Example

Detach step from parent step
#Check presence of child step
loadChildSteps(ident=step1Parent)$data[[1]] #data framew ith nrow 0
##                         resourceId       description                resourceVersionId nodeType   name                         parentId deleted entityId entityVersionId fullEntityId fullEntityVersionId                       revisionId lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                               path outdatedLink finishedStatus runStatus keyStep baseModel fullModel finalModel referenceModel  lastModifiedOnDate
## 1 1155C0A2461349788335BB7903EF765B step now attached 3AC34A4EC3AC423BA52332FC89D9493F     Step Step 2 22F1F10302A74DB686B30D4CE41703EF   FALSE ST-91833      ST-91833-3     ST-91833          ST-91833-3 7178470414C7483E8413D997B1184A0E   1.758054e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/demoSteps/Step 2        FALSE     unfinished   INITIAL   FALSE     FALSE     FALSE      FALSE          FALSE 2025-09-16 22:18:32


step2Child <- "/improve-tutorial/demoSteps/Step 2"
detachStep(ident=step2Child)
##                         resourceId       description                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                               path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName  lastModifiedOnDate       createdAtDate isVersion
## 1 1155C0A2461349788335BB7903EF765B step now attached 3AC34A4EC3AC423BA52332FC89D9493F     Step Step 2 22F1F10302A74DB686B30D4CE41703EF   FALSE envhost1.hc.scintecodev.internal-5310:ST-91833 envhost1.hc.scintecodev.internal-5310:ST-91833-3 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91833 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91833-3 7178470414C7483E8413D997B1184A0E Administrator 1594E8ED57E6C30BE063030011ACA58C 1.756309e+12   1.758054e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/demoSteps/Step 2        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB   INITIAL   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main 2025-09-16 22:18:32 2025-08-27 17:42:01     FALSE

#Verify new structure
loadChildSteps(ident=step1Parent)$data[[1]] #data framew ith nrow 0
## data frame with 0 columns and 0 rows

Note that when calling loadChildStep, the details on the child step(s) are stored in the list column data and not on the dataframe’s top level.

Figure 7: Steps before and after
(a) before…
(b) … and after calling detachStep

5 changeStepDescription

5.1 Purpose of the function

The changeStepDescription function modifies the description field of an existing step, allowing users to update documentation and clarify the purpose of analytical steps after they have been created. This function is essential for maintaining clear and accurate documentation as analyses evolve, requirements change, or when steps need better descriptions for collaboration and reproducibility. It enables dynamic updating of step metadata without requiring recreation of the entire step or disruption of existing workflow structures and dependencies.

5.2 Relation to other functions

Within the step functions family, changeStepDescription works alongside changeStepRationale to provide comprehensive metadata editing capabilities for workflow steps. Both functions share similar implementation patterns and complement getStep for retrieving step information before modification. The function integrates with improveR’s resource management system through loadResource and updateResource, ensuring that description changes are properly persisted and cached correctly. It connects to the broader {improveR} package’s authentication and REST API infrastructure, making authenticated calls to update step metadata on the server while maintaining data consistency across the distributed system.

5.3 Under the hood

The function follows a straightforward workflow: First, it retrieves the current step information (loadResource). This confirms the step exists and loads its current metadata. Second, it modifies the description property directly on the step entity object. This prepares the updated step data. Third, it sends the modified step to the server via an API request. This persists the new description in the central repository. Finally, it refreshes the local cache (updateResource). This ensures subsequent operations see the updated description rather than stale data.

5.4 Example

Change description of Step 1
stepIdent <- "/improve-tutorial/demoSteps/Step 1"

loadResource(stepIdent)$description
## [1] "changed description"

changeStepDescription(ident=stepIdent, description="changed description")
##                         resourceId         description                                                                          rationale                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                               path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName  lastModifiedOnDate       createdAtDate isVersion
## 1 F9965BC0D03C42FA8C90ABBFD4CA9706 changed description Updated rationale explaining the scientific justification for this analytical step 4B813CD4B2174EAB998A5BC1883CA4F0     Step Step 1 22F1F10302A74DB686B30D4CE41703EF   FALSE envhost1.hc.scintecodev.internal-5310:ST-91832 envhost1.hc.scintecodev.internal-5310:ST-91832-3 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91832 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-91832-3 7178470414C7483E8413D997B1184A0E Administrator 1594E8ED57E6C30BE063030011ACA58C 1.756309e+12   1.758054e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/demoSteps/Step 1        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB   INITIAL   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main 2025-09-16 22:18:32 2025-08-27 17:41:37     FALSE

loadResource(stepIdent)$description
## [1] "changed description"

6 changeStepRationale

6.1 Purpose of the function

The changeStepRationale function modifies the rationale field of an existing step, allowing users to update the reasoning and justification for why analytical steps were created and included in the workflow. This function is essential for maintaining clear analytical documentation that explains the scientific or methodological rationale behind each step, supporting reproducible research practices and regulatory compliance. It enables dynamic updating of step justification without requiring recreation of the entire step or disruption of existing workflow structures and dependencies, ensuring that analytical decisions remain well-documented as projects evolve.

6.2 Relation to other functions

Within the step functions family, changeStepRationale works as a companion to changeStepDescription to provide comprehensive metadata editing capabilities for steps. Both functions share identical implementation patterns and complement getStep for retrieving step information before modification. The function integrates seamlessly with {improveR}’s resource management system through loadResource and updateResource, ensuring that rationale changes are properly persisted and cached correctly. It connects to the broader {improveR} package’s authentication and REST API infrastructure, making authenticated calls to update step metadata on the server while maintaining data consistency and version control across the distributed system.

6.3 Under the hood

The implementation follows the same load-modify-save pattern as changeStepDescription: first calling loadResource to retrieve the current step entity and validate it exists, then directly modifying the rationale property of the step entity object. The function makes an authenticated PUT request to the /resources/{resourceId}/ endpoint, sending the modified step as the request payload to persist changes on the server. Finally, it calls updateResource to refresh the local cache with the updated step information, ensuring that subsequent operations work with the most current data and maintaining consistency between local and server state.

6.4 Example

Change rationale of Step 1
stepIdent <- "/improve-tutorial/Modeling/Step 1"
loadResource(stepIdent)$rationale
## [1] "Investigate relationship"

changeStepRationale(ident=stepIdent, rationale="Investigate linear relationship")
##                         resourceId            description                       rationale                resourceVersionId nodeType   name                         parentId deleted                                       entityId                                  entityVersionId                                                                                                                         fullEntityId                                                                                                                    fullEntityVersionId                       revisionId             createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById        lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                              path outdatedLink finishedStatus toolCategory                           toolId runStatus keyStep baseModel fullModel finalModel referenceModel                        ownedById processType processName                                               runserverUrl runserverLocal runserverReproducible                                                  runserver  lastModifiedOnDate       createdAtDate isVersion
## 1 70BF16ADD9484B7EA0A933B72544C2A3 Model 1: Duration ~ Wt Investigate linear relationship 2D539FBA2314464F8E79E3A8BCC76D06     Step Step 1 A0D580FB7DE64E5690BCEBAEC951141C   FALSE envhost1.hc.scintecodev.internal-5310:ST-54635 envhost1.hc.scintecodev.internal-5310:ST-54635-1 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:ST-54635-1 F33610474FF54B07970CABD4B3987F7D Wolfgang Schwarzenbrunner 98E5D50FCFE64B6B8128C35ADA89BA4D 1.745397e+12   1.745397e+12 98E5D50FCFE64B6B8128C35ADA89BA4D Wolfgang Schwarzenbrunner        0       FALSE                      TRUE /improve-tutorial/Modeling/Step 1        FALSE     unfinished        rlang CDB597C3EBF64B27AE573C3A70B85ADB  FINISHED   FALSE     FALSE     FALSE      FALSE          FALSE 1594E8ED57E6C30BE063030011ACA58C        main        Main http://envhost1.hc.scintecodev.internal:5330/runserver/run          FALSE                 FALSE http://envhost1.hc.scintecodev.internal:5330/runserver/run 2025-04-23 10:25:08 2025-04-23 10:25:08     FALSE

loadResource(stepIdent)$rationale
## [1] "Investigate linear relationship"

The createStepEnv function constructs a specialized R environment object that encapsulates a step’s complete context and provides programmatic access to all step-related data and operations. This environment serves as a comprehensive interface containing the step’s metadata, file relationships, navigation capabilities, and workflow context in a structured, object-like format. The function creates an environment that includes nested sub-environments for children, parent, usage, and lineage relationships, along with functional bindings for operations like getStepInventory(), getStepResource(), and getStepState(). This environment-based approach enables intuitive navigation through workflow hierarchies using R’s $ operator and provides a unified API for step manipulation and introspection that supports both interactive analysis and programmatic workflow management.

6.5 Relation to other functions

Within the step functions family, createStepEnv serves as the foundational building block that underlies getStep(), which calls createStepEnv internally to generate the rich environment objects that users interact with. The function works closely with navigation functions like loadChildSteps, loadParentStep, and workflow analysis functions by providing the structured environment that contains lazy-loading mechanisms for these relationships. It integrates with resource management functions through embedded loadResource calls and connects with the broader improveR ecosystem by creating environments that interface with authentication systems, caching mechanisms, and REST API endpoints. The environments created by createStepEnv also support workflow execution functions by providing access to process definitions, file dependencies, and execution state information necessary for step orchestration and dependency tracking.

6.6 Under the hood

The function builds a step environment in stages. First, it loads the step’s basic information and confirms it exists. Then it creates organized sections for the step’s relationships: children, parent, usage, and lineage. These sections load their data only when needed to improve performance.

The function adds helpful methods like getStepInventory() and getStepWithoutCache() that you can call directly on the step. It also sets up a workflow environment for managing execution and dependencies. The result contains both the step’s data and the tools you need to work with it.

Code
stepIdent <- "/improve-tutorial/Modeling/Step 1"

# First, get the stepDf (step metadata) using the internal function
# Note: Users typically use getStep() instead of calling createStepEnv directly
stepDf <- improveR:::getStepDf(stepIdent)
workflow <- createWorkflow()

# Create the step environment with the stepDf
step_env <- createStepEnv(stepDf, workflow)

# Examine the environment structure
ls(step_env)
##  [1] "children"            "createTemplate"      "getStepInventory"    "getStepResource"     "getStepState"        "getStepWithoutCache" "lineage"             "parent"              "retrieveMainProcess" "stepDf"              "this"                "usage"               "workflow"

7 createStepTemplateEnv

7.1 Purpose of the function

The createStepTemplateEnv() function takes an existing step as an input and uses it as a blueprint for the creation of new steps. The created template can further be adapted to its actual use case by modifying all the step properties—like description, rationale, parent relationships, input files, and tool settings—using simple setter methods. These setter methods are part of the environment created by the createStepTemplateEnv() call. Once everything is configured, a new step will be created by calling the realise() function. This approach is essential for automated workflows, batch step creation, and reproducible analyses where you want to script the entire process.

7.2 Relation to other functions

Within the step functions family, createStepTemplateEnv() is the creation counterpart to getStep. While getStep() retrieves existing steps, createStepTemplateEnv() builds new ones. The template’s realise() method calls createStep() internally to save the configured step on the server. The setter methods use loadResource to validate file references and parent step identifiers. The function also supports workflow import and export operations through importWorkflow() and exportWorkflow(). This allows you to save workflow definitions and recreate them in different repository instances. For the creation of workflow templates see here.

7.3 Under the hood

createStepTemplateEnv() builds a template through several stages: First, it generates a unique identifier and creates a data frame to store the step configuration. This provides the foundation for tracking all step properties. Second, it creates an environment containing setter methods for every configurable property. These methods update the internal data frame without contacting the server. Third, it attaches a realise() method that transforms the template into an actual step. When called, realise() validates the configuration, prepares process definitions, creates the step via an API request, uploads any local files, and returns a complete step environment. The template stays inactive until you call realise(), letting you build the complete configuration first.

7.4 Example

Create template

Create and configure a step template
# get StepDf of the step for which a template environment should be created
stepStepDf <- getStep(ident="/improve-tutorial/Modeling/Step 1")$stepDf

# create step template environment
stepTemplateEnv <- createStepTemplateEnv(
  treeIdent = "/improve-tutorial/Modeling/",
  stepDf=stepStepDf
)

# show class of environment's bindings
tibble(
  name = ls(stepTemplateEnv),
  class = purrr::map_chr(name, \(x) class(get(x, envir = stepTemplateEnv)))
) %>%
  arrange(class) 
## # A tibble: 47 × 2
##    name                class      
##    <chr>               <chr>      
##  1 step                NULL       
##  2 workflow            NULL       
##  3 stepDf              data.frame 
##  4 this                environment
##  5 addExtLink          function   
##  6 addProcessValue     function   
##  7 addStepGridArgument function   
##  8 addStepLineage      function   
##  9 addStepLocalFile    function   
## 10 addStepRemoteFile   function   
## # ℹ 37 more rows

Use setter functions to adapt step template

For each property of a step, there is are corresponding setter functions:

## [1] "addExtLink, addProcessValue, addStepGridArgument, addStepLineage, addStepLocalFile, addStepRemoteFile, addStepValue"
## [1] "changeStepLocalFile, changeStepProcessDf, changeStepRemoteFile, changeStepRemoteFileDf"
## [1] "removeProcessValue, removeStepGridArguments, removeStepLocalFile, removeStepRemoteFile, removeStepValue"
## [1] "setProcessValue, setStepBreakpoint, setStepCommandLine, setStepDescription, setStepFinishCondition, setStepName, setStepParent, setStepRationale, setStepReuse, setStepRunserverLabel, setStepToolInstance, setStepToolLabel, setStepTree, setStepValue, setStepWorkflow"

Modify the template as needed, e.g., by defining a new description, new rationale, or adding remote files.

Use of setter functions - change name of template step
# change description and rationale
stepTemplateEnv$setStepDescription(description="Step template")

stepTemplateEnv$setStepRationale(rationale="Step for new analysis")
Add remote file as link to template step
dfRemoteFiles <- stepTemplateEnv$stepDf$remoteFiles[[1]]
dfRemoteFiles %>% select(name, asLink)
##                   name asLink
## 1 ./remDataSubject.csv   TRUE

# add a new remote file; use file from a preceding step ()
envStepEDA15 <- getStep("improve-tutorial/EDA/Step 15")

graphIdent <- loadChildResources("improve-tutorial/EDA/Step 15")$data[[1]] %>%
  filter(name=="tableStatsAll.png") %>%
  select(resourceId)
graphIdent
##                         resourceId
## 1 4C824A7CE5A74DE3B2170C9DCBE99C3C

# add table "tableStatsAll.png" from Step 15 of the Analysis Tree EDA to the new step template which is based on Step 1 of Analysis Tree Modeling
stepTemplateEnv$addStepRemoteFile(ident=graphIdent) #use setter function addStepRemoteFile
#check whether file was added
stepTemplateEnv$stepDf$remoteFiles[[1]] %>%
  select(name, asLink)
## # A tibble: 2 × 2
##   name                 asLink
##   <chr>                <lgl> 
## 1 ./remDataSubject.csv TRUE  
## 2 tableStatsAll.png    TRUE

#remove remote file again
stepTemplateEnv$removeStepRemoteFile(ident=graphIdent)
stepTemplateEnv$stepDf$remoteFiles[[1]] %>%
  select(name, asLink)
##                   name asLink
## 1 ./remDataSubject.csv   TRUE

Realise step

Calling realise() transforms the template to an actual step.

Code
stepTemplateEnv$realise(run=FALSE)
## 2025-10-17 00:26:20.77174 INFO::Using realise_deprecated for repository version 4.3.5-15
## <environment: 0x000001be22e95818>

It is also possible to ‘realize’ the step template into a different analysis tree than that of the step’s origin.

Code
#Create new analysis tree
createAnalysisTree(targetIdent="improve-tutorial/", treeName="newTree", comment="created by improveR")
##                         resourceId                resourceVersionId      nodeType    name                         parentId deleted                                        entityId                                   entityVersionId                                                                                                                          fullEntityId                                                                                                                     fullEntityVersionId                       revisionId createdByName                      createdById    createdAt lastModifiedOn                 lastModifiedById lastModifiedByName fileSize hasChildren hasChildrenIncludingFiles                      path outdatedLink finishedStatus  lastModifiedOnDate       createdAtDate isVersion
## 1 123A8564F07B4C69BC5547421420EB9D EB8501F48E99499EA63C39A8F43B881E Analysis Tree newTree 26E2FA0879E0451B977903F33872F274   FALSE envhost1.hc.scintecodev.internal-5310:AT-115099 envhost1.hc.scintecodev.internal-5310:AT-115099-1 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:AT-115099 http://envhost1.hc.scintecodev.internal:5310/provider/provide?client=local&resourceId=envhost1.hc.scintecodev.internal-5310:AT-115099-1 E03958534A88479BA938440D0A0D8072 Administrator 1594E8ED57E6C30BE063030011ACA58C 1.760654e+12   1.760654e+12 1594E8ED57E6C30BE063030011ACA58C      Administrator        0       FALSE                     FALSE /improve-tutorial/newTree        FALSE     unfinished 2025-10-17 00:26:43 2025-10-17 00:26:43     FALSE
#Show folder with all its analysis trees; 'newTree' is among them
loadChildResources(ident="improve-tutorial/")$data[[1]] %>% arrange(desc(createdAt)) %>% select(nodeType, name, path)
##        nodeType        name                          path
## 1 Analysis Tree     newTree     /improve-tutorial/newTree
## 2 Analysis Tree newWorkflow /improve-tutorial/newWorkflow
## 3 Analysis Tree   demoSteps   /improve-tutorial/demoSteps
## 4 Analysis Tree      Review      /improve-tutorial/Review
## 5 Analysis Tree   Reporting   /improve-tutorial/Reporting
## 6 Analysis Tree    Modeling    /improve-tutorial/Modeling
## 7 Analysis Tree   DataOrder   /improve-tutorial/DataOrder
## 8 Analysis Tree         EDA         /improve-tutorial/EDA

#Check analysis tree "newTree"; does not contain any steps
loadChildResources(ident="improve-tutorial/newTree")$data[[1]] 
## data frame with 0 columns and 0 rows

#Define analysis tree in stepTemplateEnv call
stepTemplateEnv$setStepTree(treeIdent="improve-tutorial/newTree")
stepTemplateEnv$stepDf$treeIdent #confirm the changes made
## [1] "123A8564F07B4C69BC5547421420EB9D"
loadResource(stepTemplateEnv$stepDf$treeIdent)$path #confirm that treeIdent is equivalent to the tree's path
## [1] "/improve-tutorial/newTree"

stepTemplateEnv$realise(run=FALSE) #realise the step with modified treeIdent
## 2025-10-17 00:26:43.017562 INFO::Using realise_deprecated for repository version 4.3.5-15
## <environment: 0x000001be27d5dba0>

#Check analysis tree "newTree" for presence of new step
loadChildResources(ident="improve-tutorial/newTree")$data[[1]] %>%
    select("name", "entityId", "path")
##     name                                        entityId                             path
## 1 Step 1 envhost1.hc.scintecodev.internal-5310:ST-115100 /improve-tutorial/newTree/Step 1

#Check contained step for step description and rationale
getStep("improve-tutorial/newTree/Step 1")$stepDf %>%
  select(description, rationale) 
##     description             rationale
## 1 Step template Step for new analysis

8 getToolInstances

8.1 Purpose of the function

Tools are engines that orchestrate the execution of steps. They define how scripts are run, which external software to use (like R, NONMEM, or Monolix), and how to handle inputs and outputs. The getToolInstances() function returns an environment containing all available tool instances. For each tool instance, the environment contains a specific data frame with pertaining details (e.g., toolId, runserverId, url, gridArguments, parameters). getToolInstances() is instructive for understanding which computational tools are available in the system, their configurations, and their associated parameters and grid arguments.

8.2 Relation to other functions

Within the step functions family, getToolInstances() contributes the tool configuration data that underlies step execution and workflow orchestration. The function connects with getMainProcess() which retrieves the specific tool instance assigned to a step.

The relevant tool instances returned by getToolInstances() are also referenced in the stepDf$processes data structure within step environments created by getStep(). In the broader {improveR} ecosystem, the function loads available computational resources and their configurations, including parameters and grid arguments for tools that support distributed computing. When tool configurations change, calling resetToolInstances() clears the cache.

In the improve client the relevant information is displayed as shown below.

Figure 8
Improve client: Step tool definition

8.3 Under the hood

Under the hood the function checks for cached tool instances first, returning them immediately if available. Otherwise, it loads tool configuration data from the server, including runservers, tools, parameters, and grid arguments. It creates a structured environment where each tool instance is accessible by its full name, caches the result, and returns it for use.

8.4 Example

Retrieve all tool instances
#Get the tool instances environment
toolInstances <- getToolInstances()
## 2025-10-17 00:26:49.606157 INFO::load toolInstances
## 2025-10-17 00:26:49.606774 INFO::load gridValues
## 2025-10-17 00:26:50.10461 INFO::load parameterValues
#Check class
class(toolInstances)
## [1] "environment"

#Get names of tools
toolNames <- ls(toolInstances)
toolNames
##  [1] "10403385440682004161taWnc53ROW report-341f4024-db2e-4968-af5b-a54e6b645714 report-341f4024-db2e-4968-af5b-a54e6b645714 metworx-25-02.00.00" "1041272041893000Mboc3oMkJhjQXG report-a2f5f70a-9618-4694-8de3-8fe70eaf5066 report-a2f5f70a-9618-4694-8de3-8fe70eaf5066 metworx-25-02.00.00" "1041531060628500l3vDLGtZkjKKGU report-a84989f8-7210-4250-a908-7956215df767 report-a84989f8-7210-4250-a908-7956215df767 metworx-25-02.00.00" "1218914689246800cA61Clqvj0zy9c report-ae7bef35-38af-4e23-a759-175af003d497 report-ae7bef35-38af-4e23-a759-175af003d497 metworx-25-02.00.00" "12190940796282005sgeDEUMm1zBxn report-64ef2999-5956-4599-9e7b-7b560fe3f579 report-64ef2999-5956-4599-9e7b-7b560fe3f579 metworx-25-02.00.00" "1219144984899200Qh03o1AhO7yAEv report-12daa268-15fc-49be-b13c-a032b58f1fc9 report-12daa268-15fc-49be-b13c-a032b58f1fc9 metworx-25-02.00.00" "1219388148078000rhs5zrP88VJzOu report-ed3ebe32-1158-41d3-9058-1a99313640ad report-ed3ebe32-1158-41d3-9058-1a99313640ad metworx-25-02.00.00" "1219423553124100pEvxWrcP4pOzae report-9c8fd5b3-007d-48ec-85fa-7a316705fd42 report-9c8fd5b3-007d-48ec-85fa-7a316705fd42 metworx-25-02.00.00" "1224769495604900sg7l6o2SQgI5uz report-ce15782e-9b47-4178-bf3b-9f28c4788d6a report-ce15782e-9b47-4178-bf3b-9f28c4788d6a metworx-25-02.00.00" "1225316086313500rNNW7EvOUc3366 report-89195b63-f572-4485-913f-6da99ff9e935 report-89195b63-f572-4485-913f-6da99ff9e935 metworx-25-02.00.00" "1225464793403500Le13WeovDzwQbY report-284675bc-72ce-44c3-91c1-6cc1abcd1db3 report-284675bc-72ce-44c3-91c1-6cc1abcd1db3 metworx-25-02.00.00" "1225707584068500YHtB5xgCzjQj0Y report-88768ad8-1c02-45a3-bff7-4831e1be9eb7 report-88768ad8-1c02-45a3-bff7-4831e1be9eb7 metworx-25-02.00.00" "12273308629441000o01pjEbof49cP report-280bf98a-9cb0-489c-a348-d3c5119fa3ca report-280bf98a-9cb0-489c-a348-d3c5119fa3ca metworx-25-02.00.00" "1313506541771500O59BAd1CmvnKvC report-72806606-332a-40de-af60-59e18b532514 report-72806606-332a-40de-af60-59e18b532514 metworx-25-02.00.00" "1740756222579800Cwmc3qoXmyyZAz report-67dacec8-551b-4f4a-b1ce-995c15521f90 report-67dacec8-551b-4f4a-b1ce-995c15521f90 metworx-25-02.00.00" "1740805256351100cHnCOLlYOiUYt9 report-506edaa2-c61d-4fee-8e6c-dbdc7a2cc6e1 report-506edaa2-c61d-4fee-8e6c-dbdc7a2cc6e1 metworx-25-02.00.00" "1740859841364700MQpB6PyvC9Hwsg report-65eda87f-d791-41f8-8667-4c93defd46d9 report-65eda87f-d791-41f8-8667-4c93defd46d9 metworx-25-02.00.00" "1741481276270700bHfiZjs2j1dF9j report-780e19c9-5be9-45ad-b5b1-1ceb678f71ce report-780e19c9-5be9-45ad-b5b1-1ceb678f71ce metworx-25-02.00.00" "1826550172731600k9DTdwEJzB6Ele report-997c5a11-1dde-423d-85ab-9e3ff04a877d report-997c5a11-1dde-423d-85ab-9e3ff04a877d metworx-25-02.00.00" "1831719374657600JWxCUOdvDkHE1y report-cefee32a-b28c-4c5e-ace7-ababde91bce5 report-cefee32a-b28c-4c5e-ace7-ababde91bce5 metworx-25-02.00.00" "1837228852132800I90gB0PY5jNCYc report-7abe6030-9a0d-4dce-87f7-f855a1e3c54c report-7abe6030-9a0d-4dce-87f7-f855a1e3c54c metworx-25-02.00.00" "18373607720221005LmH2SYEM4dKVI report-765ecca4-9b10-44b5-8653-9e69fbd3aeb2 report-765ecca4-9b10-44b5-8653-9e69fbd3aeb2 metworx-25-02.00.00" "18374046613104000nO4owNgrHFV22 report-8da67e1e-f1b0-4e89-825e-876f8fddaa27 report-8da67e1e-f1b0-4e89-825e-876f8fddaa27 metworx-25-02.00.00" "187440956381500orT6rueLWzDyrGf report-812a14b6-3117-4d37-9917-1fc78546c715 report-812a14b6-3117-4d37-9917-1fc78546c715 metworx-25-02.00.00" "1903246918120100mCBBfgz082bPbr report-a5a93c08-62e3-4574-9b4e-70404fe74c10 report-a5a93c08-62e3-4574-9b4e-70404fe74c10 metworx-25-02.00.00" "1916543602741600pX0mtFDL7WYZxW report-31bb7b0a-9a75-43ae-83cd-c0f1da095a75 report-31bb7b0a-9a75-43ae-83cd-c0f1da095a75 metworx-25-02.00.00" "1917819507787500icJGBWfDsJFz6I report-022d4254-05cf-48ce-a8e0-71b05e25b07f report-022d4254-05cf-48ce-a8e0-71b05e25b07f metworx-25-02.00.00" "1921815855879000msw55bLleUJ3In report-34b24b05-ec55-4238-a475-9fbb70b98d02 report-34b24b05-ec55-4238-a475-9fbb70b98d02 metworx-25-02.00.00" "192912862035200XhwX0umNhVxRSbA report-63483dee-921b-4a79-ba7e-22f5273dd1ed report-63483dee-921b-4a79-ba7e-22f5273dd1ed metworx-25-02.00.00" "192952975935900C9mjVKK7C2EfMmc report-7cd9450a-7de4-44a0-b65e-a4da727bb3a5 report-7cd9450a-7de4-44a0-b65e-a4da727bb3a5 metworx-25-02.00.00" "193375660922300NhB8iB2zCxWeUwV report-2b95ae98-811e-4a7c-a47e-94d129bbe428 report-2b95ae98-811e-4a7c-a47e-94d129bbe428 metworx-25-02.00.00" "193498000284500WAWeFrHotN0dDRV report-a248d1dd-12c7-4f6c-b263-90a83a2e41ca report-a248d1dd-12c7-4f6c-b263-90a83a2e41ca metworx-25-02.00.00" "193908564704800sFftbcl9UaXi6RV report-f13b75ed-af3e-493c-9594-c5f5e1cd4763 report-f13b75ed-af3e-493c-9594-c5f5e1cd4763 metworx-25-02.00.00" "1988827297953000IeiPwvBcTj6F8Y report-c7a5b4a1-2dd5-49e9-9f95-512ce94212e6 report-c7a5b4a1-2dd5-49e9-9f95-512ce94212e6 metworx-25-02.00.00" "1990410867608300rNKilR1Vmls7gX report-4282df40-85ce-4173-ae82-fa30fea80ea7 report-4282df40-85ce-4173-ae82-fa30fea80ea7 metworx-25-02.00.00" "1999153001244800XbVlIkrDdbV65D report-18c76c50-9d10-4e4b-9868-cf9e8d605e7a report-18c76c50-9d10-4e4b-9868-cf9e8d605e7a metworx-25-02.00.00" "286956720236700x9MgUjPAsLIFIFV report-84dc874a-7ef8-4b7a-b0da-445719d52c65 report-84dc874a-7ef8-4b7a-b0da-445719d52c65 metworx-25-02.00.00" "289937595977000WyLUnXHeGo0JVMo report-bba098f7-aff8-4013-93a9-5a9ea7ac83ae report-bba098f7-aff8-4013-93a9-5a9ea7ac83ae metworx-25-02.00.00" "290029340434600MZHmOBv6IgiLDkh report-2a9879a6-8b93-4161-a1f6-25b89bf984eb report-2a9879a6-8b93-4161-a1f6-25b89bf984eb metworx-25-02.00.00" "2901322011332007asEsBYEq9r3Uix report-e875e2e9-eee1-4c84-a8ea-6a21cf5a5355 report-e875e2e9-eee1-4c84-a8ea-6a21cf5a5355 metworx-25-02.00.00" "291322008024100Ez4pMlKCMFGX2L5 report-b5611ba0-99b1-453d-aff4-46fbfdd16cc0 report-b5611ba0-99b1-453d-aff4-46fbfdd16cc0 metworx-25-02.00.00" "2914750414463009kNB0Ud1sUJ58n4 report-1b4bcf76-495d-4ce4-9fcc-3cdb16de59ba report-1b4bcf76-495d-4ce4-9fcc-3cdb16de59ba metworx-25-02.00.00" "4475608261334003WMouVqiuOwfPL9 report-adb7d5a0-2633-46a0-9948-a51f751b01e2 report-adb7d5a0-2633-46a0-9948-a51f751b01e2 metworx-25-02.00.00" "4506589161660000rwZRcWlGauAqjc report-5646662d-4b89-4bac-b34b-4c354e25e578 report-5646662d-4b89-4bac-b34b-4c354e25e578 metworx-25-02.00.00" "451883756016300XGTKpNwIecIurKY report-89a15e08-ff7c-4885-8a33-fd1ebca20d5e report-89a15e08-ff7c-4885-8a33-fd1ebca20d5e metworx-25-02.00.00" "452467563721000FzDF09jO4bU3Xc5 report-fabf5ce9-35a9-4c7e-8749-96c7e45c94e0 report-fabf5ce9-35a9-4c7e-8749-96c7e45c94e0 metworx-25-02.00.00" "452559120549400dj8ddfu9mWnev8L report-88d2df71-7cbb-44e5-a4af-64bee38ea827 report-88d2df71-7cbb-44e5-a4af-64bee38ea827 metworx-25-02.00.00" "453146023373200z8mvYogA4fiDKbx report-2a65ac5d-5b84-4e50-a7b5-606805ee087b report-2a65ac5d-5b84-4e50-a7b5-606805ee087b metworx-25-02.00.00" "454236547148500uRB5QBbNY0vZFA9 report-eaa9a555-e987-4a03-b63d-7f639f92e79d report-eaa9a555-e987-4a03-b63d-7f639f92e79d metworx-25-02.00.00" "EntimICE EntimICE Importer EntimICE Importer runserver"                                                                                     "improve improvePath improvePath runserver"                                                                                                  "Monolix 2024R1 mlx_new_project (Copy) runserver"                                                                                            "Monolix 2024R1 mlx_new_project runserver"                                                                                                   "Nonmem nm4robot_desktop-pmalkg2_cflandorfer nmLsf_desktop-pmalkg2_cflandorfer runserver"                                                    "Nonmem nm4robot_desktop-pmalkg2_cflandorfer nmSlurm_desktop-pmalkg2_cflandorfer runserver"                                                  "Nonmem nonmem_7.5 nonmem_7.4 native runserver"                                                                                              "Nonmem nonmem_7.5 nonmem_7.4 runserver"                                                                                                     "Nonmem nonmem_7.5 nonmem_7.4_native_slurm runserver"                                                                                        "Nonmem nonmem_7.5 nonmem_7.5 slurm metworx-25-02.00.00"                                                                                     "Nonmem nonmem_7.5 nonmem_7.5 ssh metworx-25-02.00.00"                                                                                       "NonmemWithoutParsing 7.4 7.4 runserver"                                                                                                     "Ocean Ocean Ocean runserver"                                                                                                                "PsN Bootstrap PsN Bootstrap PsN-bootstrap runserver"                                                                                        "PsN Execute PsN Execute PsN Execute (Copy) runserver"                                                                                       "PsN Execute PsN Execute PsN Execute runserver"                                                                                              "PsN Parallel Retries PsN Parallel Retries PsN Parallel Retries runserver"                                                                   "R R_4.2 rbatch (Copy) runserver"                                                                                                            "R R_4.2 rbatch LSF runserver"                                                                                                               "R R_4.2 rBatch metworx-25-02.00.00"                                                                                                         "R R_4.2 rbatch runserver"                                                                                                                  
## [71] "R R_4.2 renv batch runserver"                                                                                                               "R R_4.2 renv rstudio runserver"                                                                                                             "R R_4.2 renvBatch runserver"                                                                                                                "R R_4.2 rstudio runserver"                                                                                                                  "R r4robot_desktop-pmalkg2_cflandorfer rLsf_desktop-pmalkg2_cflandorfer runserver"                                                           "R r4robot_desktop-pmalkg2_cflandorfer rSlurm_desktop-pmalkg2_cflandorfer runserver"                                                         "R rBatch rBatch metworx-25-02.00.00"                                                                                                        "R rBatch rScript runserver"                                                                                                                 "R rs4robot_desktop-pmalkg2_cflandorfer rs4robot_desktop-pmalkg2_cflandorfer runserver"                                                      "R rStudio rStudio-workaround runserver"                                                                                                     "R rStudio rStudio metworx-25-02.00.00"                                                                                                      "SAS SAS9.4 SAS 9.4 runserver"                                                                                                               "SAS SAS9.4r SAS9.4r runserver"                                                                                                              "Shell bash bash -c metworx-25-02.00.00"                                                                                                     "Shell bash bash -c slurm metworx-25-02.00.00"                                                                                               "Shell bash bash metworx-25-02.00.00"                                                                                                        "Shell bash date runserver"                                                                                                                  "Shell bash R metworx-25-02.00.00"                                                                                                           "Shell bash4robot_desktop-pmalkg2_cflandorfer bashDocker_desktop-pmalkg2_cflandorfer runserver"                                              "Shell bash4robot_desktop-pmalkg2_cflandorfer bashLsf_desktop-pmalkg2_cflandorfer runserver"                                                 "Shell bash4robot_desktop-pmalkg2_cflandorfer bashSlurm_desktop-pmalkg2_cflandorfer runserver"

To access a specific tool instance and examine its configuration, address it e.g., via its name.

Inspect specific tool
#Inspect one specific tool
toolNonmem <- toolInstances$`Nonmem nonmem_7.5 nonmem_7.4 runserver` 
class(toolNonmem)
## [1] "data.frame"

#Retrieve tool's parameters
toolNonmem$parameters[[1]]
##   lovType                        name                                 description                                              value
## 1    TEXT    Streamable File Patterns          File patterns for streamable files                            out*\r\n*STD*\r\nOUTPUT
## 2    TEXT             Delete Patterns Patterns for files or folders to be deleted                            nonmem*\r\nF*\r\n*temp*
## 3    TEXT              Tool Arguments                              Tool arguments              <command-file>\r\noutput<process>.txt
## 4    TEXT         Termination Handler                         Termination handler at.rufus.run.service.tool.NonmemTerminationHandler
## 5    TEXT Standard Open File Patterns   Patterns for inventory files to be opened                                     <command-file>

The tool instances retrieved by getToolInstances() are referenced when steps define their execution processes. In the improve client’s tool tab (as shown in Figure 8), users configure which tool instance to use for each step. This configuration is stored in stepDf$processes and determines how the step will be executed when called.

If we are interested in the tooling of a specific step calling getMainProcess is straightforward.

Get tooling of specific step
mainProcessModelingStep1 <- getMainProcess("improve-tutorial/Modeling/Step 1")
mainProcessModelingStep1
##                                 id processType position name                      runserverId runserverLabel                                               runserverUrl gridTool main repoTool toolLabel toolInstance                                                                                                                                                                    toolArgs toolDeletePatterns   toolStreamablePatterns runStatus deleted selected                            runId runResult     startedAt     stoppedAt                           toolId                  runserverToolId subProcesses                                                                                    variables gridArguments runs                           stepId
## 1 1F604DC1F4024F67A9B205E6A2D849E7        main        1 Main 1D8922E7206D4E0D9BE8BB162E1BBA0E      runserver http://envhost1.hc.scintecodev.internal:5330/runserver/run     TRUE TRUE    FALSE     R_4.2   renv batch -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59\r\n<command-file>               renv *.txt\r\n*.out\r\n*.Rout  FINISHED   FALSE     TRUE BCFBFD900E0C42D3B6455A30954B7FA6 COMPLETED 1760540827298 1760540866604 CDB597C3EBF64B27AE573C3A70B85ADB B1288BE39B174E259BA2E4575B5375CA              B3AD69D6E59D4E6DAB93A82541C98AE6, 1, command-file, fileRef, 1F604DC1F4024F67A9B205E6A2D849E7                    70BF16ADD9484B7EA0A933B72544C2A3

Using the step’s toolId, as returned by getMainProcess(), allows retrieving the pertaining data from the environement returned by getToolInstances().

Match step’s main process with tool data
#Get all tools...
toolInstances <- getToolInstances()
#... and combine them into one single data frame
toolInstancesCombined <- dplyr::bind_rows(as.list(toolInstances), .id = "source")

# return all tool instances with the same toolId, here R instances.
toolInstancesCombined %>%
  filter(toolId == mainProcessModelingStep1$toolId)
##                               source                      runserverId                                                        url               label local deleted generic reproducible sshPort hostname                           toolId toolName deleted.x repoTool                       categoryId categoryName categoryIdentifier identifier                               id          name                                                                                                                                                                                                                    command deleted.y gridProviderInstance gridProvider                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      parameters                  gridArguments                           fullName
## 1        R R_4.2 renvBatch runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 3CEE3C3262CD4DA48F6B1EEDA7033A6E     renvBatch                       -v <workdir>:/home/rstudio/workspace -v /scinteco/envhost2-environments/oq-pgsql-base-8000/deployment/runserver1/storage/runserver_data/data/r-env:/home/rstudio/.cache/R/renv  --entrypoint Rscript     FALSE              docker1       DOCKER                                                                                                      TEXT, TEXT, TEXT, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, renv, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59\r\n<command-file>, NA, <command-file>                           NULL        R R_4.2 renvBatch runserver
## 2 R R_4.2 rBatch metworx-25-02.00.00 E20BA99E09ED412186EB10FC6BFC0C09 http://envhost1.hc.scintecodev.internal:6318/runserver/run metworx-25-02.00.00 FALSE   FALSE   FALSE        FALSE    6312     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 0F381FB7078044C89D41EAE3C59F8780        rBatch                                                                                                                                                                                                     /usr/local/bin/Rscript     FALSE               slurm1        SLURM                                                                                                                                                                                                                                                                                        TEXT, TEXT, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, NA, <command-file>, <command-file>                           NULL R R_4.2 rBatch metworx-25-02.00.00
## 3          R R_4.2 rstudio runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 1D7603EA02D540F18F6A7C16195ED4B2       rstudio                                                                                                                                           -v <workdir>:/home/rstudio/workspace/ -e USERID="$(id -u)" -e GROUPID="$(id -g)"     FALSE              docker1       DOCKER    BOOLEAN, TEXT, TEXT, TEXT, TEXT, TEXT, Docker WS normalize, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, Docker WS normalize, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, true, *.txt\r\n*.out\r\n*.Rout, .config\r\n.local\r\n.RData\r\n.Rhistory\r\nconf.json, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:1.2.0blatest, http://<runid>.<host>:<port>, <command-file>                           NULL          R R_4.2 rstudio runserver
## 4           R R_4.2 rbatch runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 54C6C093BF554F18BD0C1C4BA1B2A49D        rbatch                                                                                                                         -v <workdir>:/home/rstudio/workspace/ --user "$(id -u)" -e GROUPID="$(id -g)" --entrypoint Rscript     FALSE              docker1       DOCKER TEXT, TEXT, TEXT, NUMBER, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, Wait Time After Run, URL, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, Time in seconds to wait after run, NA, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, .config\r\n.local\r\n.RData\r\n.Rhistory\r\nconf.json, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:1.2.0blatest\r\n<command-file>, NA, NA, <command-file>                           NULL           R R_4.2 rbatch runserver
## 5     R R_4.2 renv rstudio runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> AAD85D2716C94677BF6A887A41259C6C  renv rstudio -v <workdir>:/home/rstudio/workspace -v /scinteco/envhost2-environments/oq-pgsql-base-8000/deployment/runserver1/storage/runserver_data/data/r-env:/home/rstudio/.cache/R/renv  -e USERID="$(id -u)" -e GROUPID="$(id -g)"     FALSE              docker1       DOCKER                                                                                              TEXT, TEXT, TEXT, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, renv, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59, http://<runid>.<host>:<port>, <command-file>                           NULL     R R_4.2 renv rstudio runserver
## 6       R R_4.2 rbatch LSF runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 08374FACFDD44E79BE8438E88F124972    rbatch LSF                                                                                  docker run -v <workdir>:/home/rstudio/ -w  /home/rstudio/  -e USERID="$(id -u)" -e GROUPID="$(id -g)" --entrypoint /usr/local/bin/Rscript     FALSE                  lsf          LSF                                                                     TEXT, TEXT, TEXT, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, .config\r\n.local\r\n.RData\r\n.Rhistory\r\nconf.json, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:1.2.0blatest\r\n<command-file>, NA, <command-file> stdout, stderr, stdout, stderr       R R_4.2 rbatch LSF runserver
## 7       R R_4.2 renv batch runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> B1288BE39B174E259BA2E4575B5375CA    renv batch                       -v <workdir>:/home/rstudio/workspace -v /scinteco/envhost2-environments/oq-pgsql-base-8000/deployment/runserver1/storage/runserver_data/data/r-env:/home/rstudio/.cache/R/renv  --entrypoint Rscript     FALSE              docker1       DOCKER                                                                                                      TEXT, TEXT, TEXT, TEXT, TEXT, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, *.txt\r\n*.out\r\n*.Rout, renv, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:rockerrstudio4.4.2ir1.3.0b59\r\n<command-file>, NA, <command-file>                           NULL       R R_4.2 renv batch runserver
## 8    R R_4.2 rbatch (Copy) runserver 1D8922E7206D4E0D9BE8BB162E1BBA0E http://envhost1.hc.scintecodev.internal:5330/runserver/run           runserver FALSE   FALSE   FALSE        FALSE    5340     <NA> CDB597C3EBF64B27AE573C3A70B85ADB    R_4.2     FALSE    FALSE CD0D9F3C78B94E10BDCB1C3777088115            R              rlang       <NA> 4209CE548C8C46DBA40720844BFC58E3 rbatch (Copy)                                                                                                                        -v <workdir>:/home/rstudio/workspace/  -e USERID=<userid> -e GROUPID=<groupid> --entrypoint Rscript     FALSE              docker1       DOCKER            BOOLEAN, TEXT, TEXT, TEXT, TEXT, TEXT, Docker WS normalize, Streamable File Patterns, Delete Patterns, Tool Arguments, URL, Standard Open File Patterns, Docker WS normalize, File patterns for streamable files, Patterns for files or folders to be deleted, Tool arguments, NA, Patterns for inventory files to be opened, true, *.txt\r\n*.out\r\n*.Rout, .config\r\n.local\r\n.RData\r\n.Rhistory\r\nconf.json, -e\r\nIMPROVER_TOKEN=<jwt>\r\n-e\r\nIMPROVER_STEP=<step-entityId>\r\n-e\r\nIMPROVER_REPO_URL=<repoUrl>\r\nscinteco/imrstudio:1.2.0blatest\r\n<command-file>, NA, <command-file>                           NULL    R R_4.2 rbatch (Copy) runserver