Holarch

Behavior

Action Diagrams

Model a functional flow with sequence, parallel, decision, loop and exit constructs, the items that pass between actions, the resources they use and the assets that perform them, then simulate it.

How to use it →

On this page
  1. Overview
  2. Concepts
    1. The flow
    2. Items around the flow
    3. What each shape shows
    4. How the diagram maps to LML
  3. How to use it
    1. When and why
    2. Build a flow from scratch
    3. Build a flow by dragging from the palette
    4. Connect Input/Outputs and Resources
    5. Assign performers
    6. Decompose and drill down
    7. Simulate and validate
    8. Worked example: the CubeSat EO-1 imaging pass
    9. Tips and good practice
    10. Common mistakes
    11. How it connects to other features
  4. The editor
    1. Top bar
    2. Toolbar
    3. ⚙ Diagram settings
    4. Palette
    5. Canvas gestures
    6. Inspector
  5. Simulation scripts
  6. Delete and remove
  7. Keyboard shortcuts
  8. Options and settings
  9. Messages
  10. Limits
  11. Related pages

Overview

An Action Diagram shows how a parent Action is carried out: its child Actions in order, the points where the flow splits into parallel paths or alternatives, the loops, the Input/Outputs that pass from one Action to another, the Resources each Action uses, and the Assets that perform the work. It is the LML behavior diagram and the executable model of Holarch: the Simulator runs exactly what the diagram shows.

The diagram is a view of the model. Every Action on it is a child of the root Action (decomposed by), every line to an Input/Output is a generates or receives relationship, and every line to a Resource is a consumes, produces or seizes relationship. Adding, moving or deleting shapes changes those entities and relationships, and every change is one undo step.

The same flow drives three other views: the Functional Flow Block Diagram (FFBD), the SysML Activity Diagram and the Timeline Diagram. Edit the flow in any of them and the others follow.

Concepts

The flow

A flow runs from a green Start pill on the left to a red End pill on the right. Between them is a sequence of elements joined by arrows. An element is one of:

ElementShapeWhat it meansEntity
Action (serial step)Rounded blue box with number and nameA step that starts when the previous element endsA child Action of the root (decomposed by)
ParallelA fork bar labelled parallel and a closing barTwo or more branches that run at the same time; the flow continues when all branches finishNone
SYNCA block marked SYNC with a point on the right, and a closing barParallel branches with an entity of their own; its Duration is a timeout that stops unfinished branchesAn Action named "Sync Action" (control type SYNC)
ORA block marked OR with a point on the left, and a closing circleA decision: exactly one branch runsAn Action named "Or Action" (control type OR)
LOOPAn entry circle, the loop body, a block marked LOOP, a dashed return arrowThe body repeats while the continue condition holds; the condition is checked before each passAn Action named "Loop Action" (control type LOOP)
EXITA red box marked EXITEnds the enclosing LOOP (or the flow it sits in) when reachedNone

Parallel, SYNC and OR elements hold branches: each branch is its own sequence and can hold any element, including further constructs. A LOOP holds one sequence, its body.

The OR, SYNC and LOOP construct entities are decomposed under the root like the steps, but they are not steps: they never appear as Action boxes, and views such as the Timeline skip them. They exist so a decision, synchronization point or loop can carry a name, a script and (for SYNC) a timeout.

Items around the flow

ItemShapeRelationshipMeaning
Input/OutputParallelogram above the flow; green when it triggers an Action, grey otherwiseAction generates I/O; Action receives I/OInformation, data or material passed between Actions. A received I/O with Trigger set (the default) makes the receiving Action wait for it; with Trigger off it is Optional and the Action does not wait.
Parent Input/OutputParallelogram labelled parent input (left of Start) or parent output (right of End)The root Action receives or generates itThe interface of the parent Action. Drawn dashed while no child Action uses it.
ResourcePurple hexagon below the flowAction consumes, produces or seizes Resource, with an AmountA quantity that Actions use up, return or create. The line is labelled with the relationship and the amount, for example consumes 1.5. A Resource that is only seized is drawn lighter.
Performing Asset⟂ and the Asset name under the Action nameAsset performs ActionWho or what carries out the Action. Shown when Assets is on.
Branch Asset⟂ and the Asset name on a Parallel or SYNC branchAsset performs every Action on the branchA performer for a whole branch; kept in step on every edit.

What each shape shows

  • Action box: the number (top), the name, and one line below: the Duration (for example 1 minute), or the performing Assets when Assets is on.
  • { } in purple at the lower left: the Action or construct has a simulation script.
  • A small decomposed icon at the upper right: the Action has its own child flow. Click the icon to open it.
  • Branch labels: for an OR, the guard name and its probability (Yes (75%)) or condition (Low [< 20], [else]); for Parallel and SYNC, the branch name and its Branch Asset.
  • Loop text under the return arrow: Continue (×4), Continue (50%), Continue while Battery Charge > 20, Continue (script) or Continue (ask). Exit marks the way out.
  • The construct's name is shown in italics next to OR, SYNC and LOOP blocks.

How the diagram maps to LML

On the diagramIn the model
Root of the diagramThe parent Action
Action boxChild Action: parent decomposed by child
OR, SYNC, LOOP blockChild Action with a control type, decomposed by the parent
Order, branches, loopsThe flow structure saved with the parent (the order in which children run)
Line from an Action to an I/OAction generates Input/Output
Line from an I/O to an ActionAction receives Input/Output, with the relationship attribute Trigger (Yes = trigger, No = optional)
Line between an Action and a Resourceconsumes, produces or seizes, each with the attribute Amount
⟂ AssetAsset performs Action (inverse performed by); the relationship attribute Amount is the number of that Asset the Action occupies
Duration on a boxThe Action's Duration attribute (a number or a distribution, with a unit)
Child flowThe child Action's own Action Diagram

The Action class has three attributes: Start (date and time), Duration (value or distribution plus Seconds, Minutes, Hours, Days, Weeks, Months or Years) and Percent Complete. A Resource has Units, Initial Amount, Minimum Amount and Maximum Amount. An Input/Output has Size, Units, Type and Value.

How to use it

When and why

Build an Action Diagram after you have a set of functions, usually from Functional Analysis of the requirements, and before you allocate them to the physical architecture. It answers: in what order do the functions run, which run in parallel, where does the system decide, what does each function need and produce, and how long does the whole thing take?

Use it at each level of decomposition: a top-level operational scenario (a mission timeline, a use case), then one diagram per function that needs its own detail. Because the diagram is executable, it is also the place to check timing and resource requirements early, with the Simulator, before hardware exists.

Build a flow from scratch

  1. Open Diagrams at the bottom of the rail and click + Create Diagram. In Choose Which Type of Diagram to Create, pick Action Diagram (on the All or LML tab).
  2. In Specify New Root, keep Root Entity Class = Action, enter a Number and Name (for example OPS and Run Nominal Imaging Pass) and click Create. Result: the diagram opens with Start and End and the hint Drag a construct here or use + Action.
  3. Click + Action ▾ → New Action…, type the name in Add Action and click OK (or press Enter). Result: a numbered Action box appears in the flow (numbers continue from the parent's number: OPS.1, OPS.2, …) and the new Action is a child of the root.
  4. Keep the new Action selected and add the next one the same way: + Action always inserts after the selected element.
  5. To run steps at the same time, select the step after which they start and click + SYNC (or + Action ▾ → Parallel (no entity) when you do not need a timeout or a name). Two empty branches appear. Click a branch line to select it, then + Action ▾ → New Action… to add a step to that branch. Click + Branch for a third branch.
  6. For a decision, click + OR and enter the question (for example Contact in view?). Two branches, Yes and No at 50% each, appear. Select the OR to set the guard names and probabilities in the inspector.
  7. To repeat a step, select it and click + LOOP, then enter the loop name. Result: the step is wrapped in a loop that runs twice. Set the number of iterations, or another condition, in the inspector.
  8. Set durations: select an Action and fill in Duration under Attributes in the inspector, or Shift-click several Actions and click Duration… to give them one value.
  9. Choose ⚙ → Check Diagram… to list Actions without a Duration and items that are not connected.

Build a flow by dragging from the palette

The palette on the left holds the constructs and the item types.

  1. Drag Serial (Action) onto any line of the flow. The drop line highlights while the item is over a valid place. Result: a "New Action" is inserted at that point and its name field in the inspector is selected so you can type the name.
  2. Drag Parallel, Or, Sync, Loop or Exit onto a line in the same way.
  3. Drag Input/Output onto an Action to create an I/O that the Action generates, or onto empty canvas to place an unconnected I/O.
  4. Drag Resource onto an Action to create a Resource that the Action consumes (Amount 1), or onto empty canvas.
  5. Drag Branch Asset onto a branch line of a Parallel or SYNC and choose the Asset. Result: the Asset performs every Action on that branch.
  6. Type in the Existing box to find Actions, Input/Outputs, Resources and Assets already in the model, then drag one in: an Action onto a line, an I/O or Resource onto an Action or the canvas, an Asset onto a Parallel or SYNC branch line.

With the keyboard, focus a palette item and press Enter or Space: constructs are added at the end of the main flow, Input/Outputs and Resources at the center of the view.

Connect Input/Outputs and Resources

Select an Action: a green handle appears above it. Drag the handle:

  • onto another Action: Holarch creates a new Input/Output that the first Action generates and the second receives. While you hover, the target box shows two halves: release on the Trigger (top) half for a triggering input, or on the Optional (bottom) half for an optional one;
  • onto an existing Input/Output: the Action generates it;
  • onto a Resource: the Action produces it (Amount 1);
  • onto empty canvas: Holarch creates a new output of the Action.

Select an Input/Output and drag its handle (below the shape) onto an Action to make that Action receive it; the top half sets Trigger, the bottom half Optional. Dragging onto an Action that already receives it changes only the Trigger setting.

Select a Resource and drag its handle (above the shape) onto an Action: the Consumes (top) half creates consumes, the Seizes (bottom) half seizes. Switching between them keeps the amount.

After a connection that creates a new I/O, the I/O is selected and its name field is ready for typing. Set the amount of a resource link in the Action's Relationships tab in the inspector (the relationship attribute Amount), or in the Resource's.

Drag an Input/Output or Resource shape to place it where you want; the position is saved with the diagram. Reset Placement in its inspector (or ⚙ → Reset I/O & Resource Placement for all) returns it to the automatic layout above or below the Actions that use it.

Assign performers

  • Select an Action, open the Relationships tab in the inspector and add performed by an Asset; or
  • Drag a Branch Asset onto a Parallel or SYNC branch, or select the Parallel/SYNC and click + Asset next to the branch in the inspector.

Turn on Assets in the toolbar to show performers under each Action name.

Decompose and drill down

  • Decompose one Action: select it and click Decompose (or double-click a decomposed Action, or click its decomposed icon). Result: that Action's own Action Diagram opens; build its child flow there. ▲ Parent in the top bar returns to the parent diagram.
  • Group steps into a new child: Shift-click two or more elements that are next to each other on the same line, then click Decompose (group). Result: the elements move into a new child Action named "New Action" with its own flow, and the toast Grouped into a new child Action — rename it in the panel. appears with the name field selected.
  • Flatten: select a decomposed Action and click Flatten (or Flatten in the inspector). Its child flow replaces it in this diagram. Choose Keep Entity to keep the emptied Action in the model (outside this diagram) or Delete Entity to delete it.

A decomposed Action runs its child flow in the Simulator; its own Duration is not used.

Simulate and validate

  1. Click ▶ Simulate ▾ → Discrete Event to watch one timed run, or Monte Carlo for many runs. The Simulator opens with this Action as the root.
  2. Before the first run, ⚙ → Check Diagram… shows what the Simulator will treat as missing: Actions without a Duration simulate as 0, I/Os that no Action generates leave their receivers waiting (a deadlock), Resources that nothing uses are listed.
  3. In the Simulator, a run that waits forever is reported as a deadlock with the reason (waiting for I/O … (never generated) or waiting for … (never available)). Fix the diagram, for example by turning a trigger into an optional input, and run again.

Worked example: the CubeSat EO-1 imaging pass

The demo project (Manage Projects → Project Files ▾ → Create Demo Project) contains the Action Diagram OPS Run Nominal Imaging Pass. Open it from Behavior → Action Diagrams.

The flow:

  1. OPS.1 Transmit Imaging Plan (Ground Station, triangular 4–9 minutes, most likely 6), OPS.2 Receive Imaging Plan (UHF Transceiver, 1 minute) and OPS.3 Load Command Schedule (C&DH, 2 minutes) run in sequence.
  2. A Parallel runs OPS.4 Rotate to Target (ADCS, normal 3 ± 0.5 minutes) and OPS.5 Prepare Camera (Payload Camera, 5 minutes) at the same time; both receive Command Schedule as a trigger.
  3. A LOOP named Each target runs OPS.6 Capture Image Strip and OPS.7 Encode and Store Image four times (Continue (×4)).
  4. An OR named Contact in view? sends the flow to OPS.8 Transmit Image Data on Yes (75%) or OPS.9 Hold Data Onboard on No (25%).
  5. A final Parallel recharges the battery (OPS.10) while the ground receives and processes the data (OPS.11, OPS.12).

Resources: Battery Charge (Wh, initial 62, minimum 23, maximum 77) is consumed by OPS.4 (1.5), OPS.5 (0.8), OPS.6 (2), OPS.7 (0.3) and OPS.8 (6) and produced by OPS.10 (30). Data Storage (GB) is produced by OPS.7 (2.5) and consumed by OPS.8 (8). Image Data Package is an optional input of OPS.11, so a pass without contact does not deadlock the ground segment.

Try these changes:

  1. Select the OR and change Yes to 60 and No to 40. Result: the branch labels read Yes (60%) and No (40%) and the inspector shows Total 100%.
  2. Select the LOOP and set Iterations (count) to 6. Result: the loop text reads Continue (×6).
  3. Choose ▶ Simulate ▾ → Monte Carlo and run it: more targets per pass consume more battery, and the Statistics panel shows the longer pass time.
  4. Turn on Assets to see each performer, then choose ⚙ → Generate Asset Diagram. Result: a new Asset "Run Nominal Imaging Pass (Physical Context)" with the performing Assets as children and Conduits for every I/O that passes between two of them, and its Asset Diagram opens.

Tips and good practice

  • Name Actions as verb + object (Capture Image Strip), I/Os as nouns (Image Strip), and OR guards as answers to the OR's question.
  • Keep each diagram to about seven to twelve elements. Group detail into child Actions with Decompose (group).
  • Use Parallel (no entity) unless you need a timeout, a name or a script; use SYNC for those.
  • An OR in probability mode must total 100%. When probabilities are unknown, choose None (prompt or random) and let the Simulator ask, or let Monte Carlo use equal probabilities.
  • Give every leaf Action a Duration before simulating. Use a distribution (for example =norm.dist(40,6) Seconds) where the time varies.
  • Turn a received I/O into Optional when the Action can start without it; otherwise a branch that never produces it deadlocks the run.
  • Number children in flow order with ⚙ → Auto Number… and Number in action-flow order.

Common mistakes

SymptomCauseFix
Drop it onto a line of the flow.A construct or Action was released on a shape or empty canvasRelease it on an arrow between elements
Branches must total 100% but currently total 90%.OR probabilities do not add upCorrect the percentages, or add a branch
The simulation never ends (deadlock)An Action waits for a triggering I/O that nothing generates on this pathMake the input Optional, or generate it on every path
An Action takes no time in the simulationNo Duration, or the Action is decomposed (its child flow runs instead)Set its Duration, or add durations to its children
A step seems to vanishIt was removed from the diagram but kept in the modelFind it in the Existing palette list and drag it back onto a line
Generate Asset Diagram reports No performing Assets found…No Action has a performed by Asset and no branch has a Branch AssetAssign performers first

How it connects to other features

  • Fed by: Functional Analysis creates the functions (child Actions) and their flow; requirements reach the Actions through satisfied by. Assets and Resources come from the architecture.
  • Feeds: the Simulator (time, cost, resource levels, Asset utilization, requirement checks), the FFBD and Activity Diagram (same flow), the Timeline Diagram (schedule from Start and Duration), the Sequence Diagram (lifelines are the performing Assets, messages the I/Os), Generate Asset Diagram (physical context and Conduits), the N² Diagram (I/Os between functions) and IDEF0 (inputs and outputs).
  • Traceability: every Action shows its requirements in the inspector's Relationships tab (satisfies); the RVTM and Traceability Matrix read the same relationships.

The editor

The Action Diagram uses the shared diagram editor (see Diagrams): the toolbar row, the palette on the left, the canvas and the inspector on the right.

Top bar

  • Diagram type selector: the same root Action in another diagram type that applies to Actions (Hierarchy, Spider, Tree, Risk, Timeline, Action, Sequence, Use Case, N2, IDEF0, ICOM (A0), Activity, FFBD).
  • ▲ Parent: opens the Action Diagram of the parent Action. Shown only when the root has a parent Action.

Toolbar

The toolbar is one row in groups. When the window is narrow, items move into ⋯ (More actions); Export ▾ and ⚙ always stay visible.

GroupControlWhat it does
ModePanDrag the background to move the view (the default).
ModeBox selectNot available on Action Diagrams (This diagram has no box selection); use Shift-click.
Insert+ Action ▾New Action… (asks for the name; default New Action), Existing Action… (pick an Action that is not the root, one of its ancestors or already in this diagram), Parallel (no entity). Inserts after the selection, at the end of a selected branch, or at the end of the flow.
Insert+ SYNCAdds a SYNC with two empty branches.
Insert+ ORAsks for the Decision name (question) (default Or Action), then adds an OR with branches Yes and No at 50%.
Insert+ LOOPAsks for the Loop name (condition) (default Loop Action). With an element selected it wraps that element in the loop (Wrap the selected element in a LOOP); otherwise it adds an empty loop (Add an empty LOOP). New loops run 2 iterations.
Insert+ EXITAdds an EXIT after the selection.
Insert+ BranchAdds a branch to the selected Parallel, SYNC or OR (or the one whose branch is selected). An OR's probabilities are re-split evenly. Disabled otherwise.
Insert+ I/OWith an Action selected: pick the receiving Action (Input/Output from "…" to…), then name the new I/O. The I/O is generated by the first Action and received as a trigger by the second.
EditUndo, Redo⌘Z, ⇧⌘Z.
Edit◀, ▶Move the selected element one place left or right within its sequence.
EditDeleteDelete the selection (see Delete and remove).
View−, zoom %, +, ⤢Zoom out, type a zoom level (10–400%), zoom in, fit the diagram.
ViewSearch diagram with ‹ ›Highlights Actions, I/Os and Resources whose name, number, description, id or attribute values match; Enter / ⇧+Enter move between matches.
ViewI/O, Resources, Assets, Parent I/OShow or hide Input/Outputs, Resources, performing Assets and parent Input/Outputs. The choice is saved with the diagram and becomes the default for new Action Diagrams.
Type actionsDecompose / Decompose (group)One Action selected: open its child Action Diagram. Several elements: group them into a new child Action.
Type actionsFlattenReplace the selected decomposed Action by its child flow.
Type actionsDuration…Group Apply Duration Attribute: one Duration for all selected Actions (needs two or more).
Type actionsOpenOpens the Entity View of the selected entity, or of the root.
Type actions▶ Simulate ▾Discrete Event or Monte Carlo: opens the Simulator with this root.
OutputExport ▾Opaque Image (PNG), Transparent Image (PNG), Vector Graphic (SVG), Web Page (HTML), Microsoft Word (DOCX), Print….
More⚙Diagram settings (below).
More⋯Overflowed items, then Open Entity View, All Diagrams, Help for Action Diagram and Delete Diagram….

⚙ Diagram settings

ItemWhat it does
Reset DiagramClears manual I/O and Resource positions.
Show / HideHide/Show Resources, Hide/Show All Input/Outputs, Hide/Show Parent Input/Outputs, Hide/Show Performing Assets, Hide/Show Palette.
Reset I/O & Resource PlacementReturns every moved I/O and Resource to the automatic layout.
Generate Asset DiagramCreates "root (Physical Context)", an Asset that performs the root and is decomposed by every performing Asset (from performed by and Branch Assets, at all levels below the root). For each pair of Assets whose Actions exchange an I/O it reuses or creates a Conduit ("A to B", or "A / B" when the I/O goes both ways) that transfers those I/Os, then opens the Asset Diagram.
Open as FFBDOpens the same flow as a Functional Flow Block Diagram.
Auto Number…Numbers the children as Prefix.1, Prefix.2, … with Number in action-flow order on by default, and Number direct children only (one level). One undo step.
Check Diagram…Decomposition cycles below the root, plus the Action Diagram checks (see Messages).
Hide Sidebar / Show SidebarHides the left sidebar (palette and annotations) in every diagram.

Palette

The palette (title Palette, hint Drag onto a line or a shape) lists:

ItemDrop onCreates
Serial (Action)A lineA new Action "New Action"
ParallelA lineParallel branches (no entity)
OrA lineAn OR Action entity with Yes/No branches
SyncA lineA SYNC Action entity
LoopA lineA LOOP Action entity (empty body, 2 iterations)
ExitA lineAn EXIT
Input/OutputAn Action, or anywhereA new I/O named "I/O", generated by the Action when dropped on one
ResourceAn Action, or anywhereA new Resource named "Resource", consumed (Amount 1) when dropped on an Action
Branch AssetA Parallel or SYNC branch lineAsks for the Asset (Branch Asset (performs this branch)); it then performs the branch

Under Existing, type to find Actions, Input/Outputs, Resources and Assets (up to 80 matches, root and construct entities excluded) and drag them in. Below the palette is the Annotations section shared by all diagrams. × in the palette header hides it (⚙ → Show Palette brings it back).

Canvas gestures

GestureResult
Click a shapeSelect it; the inspector shows it
Shift+clickAdd or remove an element from the selection
Click a lineSelect the branch it belongs to (or clear the selection on the main line)
Click the backgroundClear the selection
Drag an Action or construct onto a lineMove it there (with everything inside it)
Drag an I/O or ResourcePlace it freely
Drag the green handleConnect (see Connect Input/Outputs and Resources)
Double-click an ActionOpen its child Action Diagram when it is decomposed, else its Entity View
Double-click an I/O or ResourceOpen its Entity View
Click the decomposed iconOpen the child Action Diagram
Drag the backgroundPan
Scroll / ⌘+scrollPan / zoom at the pointer

Inspector

Action, Input/Output, Resource or Asset selected: the shared entity panel with Name, Number, Description, Open Entity View, Open ▾ (Entity View and every other diagram of this entity), the actions below, Attributes (open for Actions), and the Relationships, Metadata and Comments tabs. The relationships this diagram manages (consumed by, decomposed by, generated by, performed by, produced by, received by, seized by) are locked in the Relationships tab so the diagram and model stay in step.

SelectionExtra actions
ActionAction Diagram, Edit Action Script…, Flatten (when decomposed), Delete…
Input/Output or Resource that was movedReset Placement
Parent I/O that is decomposed into child I/OsDecomposed Parent IO shows its children in place of it; Collapse Decomposed Parent IO returns
AnyDelete…

OR selected (OR (Decision)):

  • Decision name: the OR entity's name.
  • Decision type: Probability, Resource condition, Script or None (prompt or random).
  • Resource (Resource condition only): the Resource whose amount is compared.
  • Branches: a guard name per branch and, by type, a probability (0–100 %) or an operator (==, !=, >, <, >=, <=, else) and a value. The total line reads Total 100% or the warning Branches must total 100% but currently total N%.
  • Edit Script…/Add Script… (Script type): onEnd() returns the name of the branch to take.
  • None type: With "Prompt" decisions the simulator asks which path to take; when automated it picks a branch at random.
  • + Add Branch, Open Entity.

SYNC selected: Name, Duration (timeout) (Optional: the SYNC ends after this time and stops any branch still running), the note N branches run concurrently; flow continues when all finish., one row per branch with the branch name and + Asset (or ⟂ Asset name and × to remove it), Edit Script…/Add Script…, + Add Branch, Open Entity. Parallel selected shows the same without the entity fields. When a branch is selected: Branch N selected — + Action adds to it.

LOOP selected:

  • Name / condition.
  • Continue condition: Iterations, Probability, Resource condition, Script or None (prompt or random).
  • Iterations (count) (minimum 1), Probability to continue (%), or Resource plus continue while amount with an operator and value.
  • Script: Before each pass onEnd() is called; returning true runs the body again.
  • None: With "Prompt" decisions the simulator asks for the number of iterations; when automated it runs 0–2 passes at random.
  • Edit Script…/Add Script…, the note An EXIT inside the body ends the loop early., Open Entity.

EXIT selected: Ends the enclosing LOOP (or this flow) when reached.

Several elements selected: N elements selected, Decompose (group into new child Action), Group Apply Duration…, Remove from Diagram.

Simulation scripts

Edit Action Script… (Action) and Edit Script…/Add Script… (OR, SYNC, LOOP) open the script editor. Add onStart(), Add prompt(), Add onEnd() and Add duration() insert empty hook functions; Tab inserts two spaces; Save stores the script (an empty script removes it). The hooks:

  • onStart() runs when the element starts.
  • prompt(p) builds a question for the user: p.setTitle(), p.addEnumInput(title, name, choices, default), addTextInput, addNumberInput, addBooleanInput.
  • onEnd(response) runs at the end. An OR returns the name of the branch to take; a LOOP returns true to run the body again.
  • duration() returns the duration of the Action.

Scripts can call Sim.getEntityByName(n), Sim.getAmount(name), Sim.setResourceByName(name, v), Sim.getCurrentTime(), Sim.getCurrentCost(), print(x) and globals.put(k, v) / globals.get(k). Top-level variables persist for the run and Math.random uses the run's seeded generator. The full API, the sandbox and the trust prompt are in Simulation.

Delete and remove

Deleting never removes more than you confirm, and every choice is one undo step.

SelectionDialogChoices
Action, OR, SYNC or LOOPDelete Action (or Delete OR, …): Remove "name" [and the N element(s) inside it] from this diagram (keeps the entities), or delete the … entity entirely?Remove from Diagram, Delete Entity
Parallel with contentDelete Parallel: Remove the Parallel and the N element(s) inside it from the diagram? (Entities are kept.) An empty Parallel and an EXIT are removed without a dialog.Remove
A branchDelete Branch: Remove this branch [and its N element(s)] from the diagram? (Entities are kept.) Removing the last branch, or a loop body, removes the whole construct.Remove
Several elementsRemove Selection: Remove the N selected elements from this diagram? (Entities are kept.)Remove
Input/Output, Resource or AssetRemove Input/Output (or Resource, Asset): Remove "name" from this diagram (drops its links to the Actions shown here, keeps the entity), or delete the entity entirely?Remove from Diagram, Delete Entity
Branch Asset (× in the inspector)Remove Branch Asset: "name" performs N Action(s) on this branch. Unlink those as well?Keep Relationships, Remove Relationships

Removing an Action from the diagram also removes its decomposed by link to the root, so it is no longer a child; the entity and its other relationships stay.

Keyboard shortcuts

KeyAction
Delete or BackspaceDelete the selection (with the dialogs above)
EscClear the selection
Shift+clickAdd to or remove from the selection
⌘Z / ⇧⌘ZUndo / Redo
Enter or Space on a palette itemInsert it (constructs at the end of the main flow, I/Os and Resources at the center)
⌘+scrollZoom
Enter in the zoom fieldApply the typed zoom level
Enter / ⇧+Enter in Search diagramNext / previous match; Esc clears the search

Options and settings

  • Show/hide (toolbar toggles and ⚙): I/O, Resources, Assets, Parent I/O and Palette. Saved per diagram and remembered in this browser as the default for new Action Diagrams. Defaults: I/O, Resources, Parent I/O and Palette on; Assets off.
  • I/O and Resource positions: saved per diagram; reset with Reset Placement or Reset I/O & Resource Placement.
  • Zoom and position: saved per diagram; a diagram opens fitted but at no less than 70%.
  • Read-only display: people with the Viewer role see the diagram without the toolbar edit groups, palette, handles or selection panel. They can pan, zoom, search and export.

Messages

MessageMeaning
Drop it onto a line of the flow.Constructs and Actions can only be inserted on an arrow.
An element cannot be placed inside itself. Drop it elsewhere.You dropped a construct inside its own branch, or tried to add the root or one of its ancestors.
"name" is already in this diagram.That Action is already in the flow.
Select a Parallel, SYNC or OR first+ Branch needs one of them (or one of its branches) selected.
Select the producing Action first+ I/O needs an Action selected.
Select an Action to decompose (shift-click several to group them)Decompose needs an Action (not a construct).
Cannot decompose: select elements on the same line.The grouped elements must share one sequence.
Cannot decompose: select elements that are next to each other.The grouped elements must be contiguous.
Grouped into a new child Action — rename it in the panel.Decompose (group) succeeded.
Select a decomposed Action to flattenFlatten needs an Action with a child flow.
Nothing to flatten: the child diagram is empty.The child Action has no children.
Cannot flatten: child control flow is malformed.The child flow refers to deleted entities; open it to repair it.
This group cannot be flattened: one of its children already appears at this level.Flattening would place an Action twice.
Shift-click two or more Actions firstDuration… needs at least two Actions.
A loop needs at least 1 iteration. Enter 1 or more.Iterations below 1 are refused.
Branches must total 100% but currently total N%.Correct the OR probabilities.
"name" now performs the Actions on this branch.A Branch Asset was set.
No performing Assets found. Relate Actions to Assets (performed by) or add Branch Assets first.Generate Asset Diagram has nothing to place.
Created "name (Physical Context)" with N Asset(s) and M Conduit(s).Generate Asset Diagram succeeded.
Drag a construct here or use + ActionThe flow is empty.
This Action no longer exists.The root was deleted.
No orphans or cycles found in this Action Diagram.Check Diagram found nothing.
The following entities have no relationships within this diagram (orphans):Check Diagram lists, per entity: Input/Output "name" is not generated or received by any Action in this diagram., Resource "name" is not consumed, produced or seized by any Action in this diagram., Action "name" has no Duration (simulates as 0).
The following entities form a cycle or many cycles in the decomposition:An Action is (indirectly) its own child.
View only: ask an owner for edit access.Your role on this project is Viewer.

Limits

  • One flow per parent Action; an Action can appear only once in a given flow (use a LOOP to repeat it).
  • The palette's Existing list shows the first 80 matches; type more of the name to narrow it.
  • OR probabilities are whole percentages from 0 to 100; loop iterations are whole numbers of at least 1.
  • Durations are never negative in simulation: a sampled negative value is drawn again.
  • Box select is not available; use Shift-click.

Last updated October 7, 2026