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.
On this page
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:
| Element | Shape | What it means | Entity |
|---|---|---|---|
| Action (serial step) | Rounded blue box with number and name | A step that starts when the previous element ends | A child Action of the root (decomposed by) |
| Parallel | A fork bar labelled parallel and a closing bar | Two or more branches that run at the same time; the flow continues when all branches finish | None |
| SYNC | A block marked SYNC with a point on the right, and a closing bar | Parallel branches with an entity of their own; its Duration is a timeout that stops unfinished branches | An Action named "Sync Action" (control type SYNC) |
| OR | A block marked OR with a point on the left, and a closing circle | A decision: exactly one branch runs | An Action named "Or Action" (control type OR) |
| LOOP | An entry circle, the loop body, a block marked LOOP, a dashed return arrow | The body repeats while the continue condition holds; the condition is checked before each pass | An Action named "Loop Action" (control type LOOP) |
| EXIT | A red box marked EXIT | Ends the enclosing LOOP (or the flow it sits in) when reached | None |
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
| Item | Shape | Relationship | Meaning |
|---|---|---|---|
| Input/Output | Parallelogram above the flow; green when it triggers an Action, grey otherwise | Action generates I/O; Action receives I/O | Information, 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/Output | Parallelogram labelled parent input (left of Start) or parent output (right of End) | The root Action receives or generates it | The interface of the parent Action. Drawn dashed while no child Action uses it. |
| Resource | Purple hexagon below the flow | Action consumes, produces or seizes Resource, with an Amount | A 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 name | Asset performs Action | Who or what carries out the Action. Shown when Assets is on. |
| Branch Asset | ⟂ and the Asset name on a Parallel or SYNC branch | Asset performs every Action on the branch | A 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 diagram | In the model |
|---|---|
| Root of the diagram | The parent Action |
| Action box | Child Action: parent decomposed by child |
| OR, SYNC, LOOP block | Child Action with a control type, decomposed by the parent |
| Order, branches, loops | The flow structure saved with the parent (the order in which children run) |
| Line from an Action to an I/O | Action generates Input/Output |
| Line from an I/O to an Action | Action receives Input/Output, with the relationship attribute Trigger (Yes = trigger, No = optional) |
| Line between an Action and a Resource | consumes, produces or seizes, each with the attribute Amount |
| ⟂ Asset | Asset performs Action (inverse performed by); the relationship attribute Amount is the number of that Asset the Action occupies |
| Duration on a box | The Action's Duration attribute (a number or a distribution, with a unit) |
| Child flow | The 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
- 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).
- In Specify New Root, keep Root Entity Class = Action, enter a Number and Name (for example
OPSandRun Nominal Imaging Pass) and click Create. Result: the diagram opens with Start and End and the hint Drag a construct here or use + Action. - 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.
- Keep the new Action selected and add the next one the same way: + Action always inserts after the selected element.
- 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.
- 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. - 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.
- 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.
- 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.
- 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.
- Drag Parallel, Or, Sync, Loop or Exit onto a line in the same way.
- 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.
- Drag Resource onto an Action to create a Resource that the Action consumes (Amount 1), or onto empty canvas.
- 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.
- 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
- Click ▶ Simulate ▾ → Discrete Event to watch one timed run, or Monte Carlo for many runs. The Simulator opens with this Action as the root.
- 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.
- 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:
- 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.
- 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.
- A LOOP named Each target runs OPS.6 Capture Image Strip and OPS.7 Encode and Store Image four times (Continue (×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%).
- 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:
- 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%.
- Select the LOOP and set Iterations (count) to 6. Result: the loop text reads Continue (×6).
- Choose ▶ Simulate ▾ → Monte Carlo and run it: more targets per pass consume more battery, and the Statistics panel shows the longer pass time.
- 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
| Symptom | Cause | Fix |
|---|---|---|
| Drop it onto a line of the flow. | A construct or Action was released on a shape or empty canvas | Release it on an arrow between elements |
| Branches must total 100% but currently total 90%. | OR probabilities do not add up | Correct the percentages, or add a branch |
| The simulation never ends (deadlock) | An Action waits for a triggering I/O that nothing generates on this path | Make the input Optional, or generate it on every path |
| An Action takes no time in the simulation | No Duration, or the Action is decomposed (its child flow runs instead) | Set its Duration, or add durations to its children |
| A step seems to vanish | It was removed from the diagram but kept in the model | Find 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 Asset | Assign 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.
| Group | Control | What it does |
|---|---|---|
| Mode | Pan | Drag the background to move the view (the default). |
| Mode | Box select | Not 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 | + SYNC | Adds a SYNC with two empty branches. |
| Insert | + OR | Asks for the Decision name (question) (default Or Action), then adds an OR with branches Yes and No at 50%. |
| Insert | + LOOP | Asks 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 | + EXIT | Adds an EXIT after the selection. |
| Insert | + Branch | Adds 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/O | With 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. |
| Edit | Undo, Redo | ⌘Z, ⇧⌘Z. |
| Edit | ◀, ▶ | Move the selected element one place left or right within its sequence. |
| Edit | Delete | Delete the selection (see Delete and remove). |
| View | −, zoom %, +, ⤢ | Zoom out, type a zoom level (10–400%), zoom in, fit the diagram. |
| View | Search diagram with ‹ › | Highlights Actions, I/Os and Resources whose name, number, description, id or attribute values match; Enter / ⇧+Enter move between matches. |
| View | I/O, Resources, Assets, Parent I/O | Show 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 actions | Decompose / Decompose (group) | One Action selected: open its child Action Diagram. Several elements: group them into a new child Action. |
| Type actions | Flatten | Replace the selected decomposed Action by its child flow. |
| Type actions | Duration… | Group Apply Duration Attribute: one Duration for all selected Actions (needs two or more). |
| Type actions | Open | Opens 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. |
| Output | Export ▾ | 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
| Item | What it does |
|---|---|
| Reset Diagram | Clears manual I/O and Resource positions. |
| Show / Hide | Hide/Show Resources, Hide/Show All Input/Outputs, Hide/Show Parent Input/Outputs, Hide/Show Performing Assets, Hide/Show Palette. |
| Reset I/O & Resource Placement | Returns every moved I/O and Resource to the automatic layout. |
| Generate Asset Diagram | Creates "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 FFBD | Opens 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 Sidebar | Hides the left sidebar (palette and annotations) in every diagram. |
Palette
The palette (title Palette, hint Drag onto a line or a shape) lists:
| Item | Drop on | Creates |
|---|---|---|
| Serial (Action) | A line | A new Action "New Action" |
| Parallel | A line | Parallel branches (no entity) |
| Or | A line | An OR Action entity with Yes/No branches |
| Sync | A line | A SYNC Action entity |
| Loop | A line | A LOOP Action entity (empty body, 2 iterations) |
| Exit | A line | An EXIT |
| Input/Output | An Action, or anywhere | A new I/O named "I/O", generated by the Action when dropped on one |
| Resource | An Action, or anywhere | A new Resource named "Resource", consumed (Amount 1) when dropped on an Action |
| Branch Asset | A Parallel or SYNC branch line | Asks 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
| Gesture | Result |
|---|---|
| Click a shape | Select it; the inspector shows it |
| Shift+click | Add or remove an element from the selection |
| Click a line | Select the branch it belongs to (or clear the selection on the main line) |
| Click the background | Clear the selection |
| Drag an Action or construct onto a line | Move it there (with everything inside it) |
| Drag an I/O or Resource | Place it freely |
| Drag the green handle | Connect (see Connect Input/Outputs and Resources) |
| Double-click an Action | Open its child Action Diagram when it is decomposed, else its Entity View |
| Double-click an I/O or Resource | Open its Entity View |
| Click the decomposed icon | Open the child Action Diagram |
| Drag the background | Pan |
| Scroll / ⌘+scroll | Pan / 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.
| Selection | Extra actions |
|---|---|
| Action | Action Diagram, Edit Action Script…, Flatten (when decomposed), Delete… |
| Input/Output or Resource that was moved | Reset Placement |
| Parent I/O that is decomposed into child I/Os | Decomposed Parent IO shows its children in place of it; Collapse Decomposed Parent IO returns |
| Any | Delete… |
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 returnstrueto 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.
| Selection | Dialog | Choices |
|---|---|---|
| Action, OR, SYNC or LOOP | Delete 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 content | Delete 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 branch | Delete 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 elements | Remove Selection: Remove the N selected elements from this diagram? (Entities are kept.) | Remove |
| Input/Output, Resource or Asset | Remove 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
| Key | Action |
|---|---|
| Delete or Backspace | Delete the selection (with the dialogs above) |
| Esc | Clear the selection |
| Shift+click | Add to or remove from the selection |
| ⌘Z / ⇧⌘Z | Undo / Redo |
| Enter or Space on a palette item | Insert it (constructs at the end of the main flow, I/Os and Resources at the center) |
| ⌘+scroll | Zoom |
| Enter in the zoom field | Apply the typed zoom level |
| Enter / ⇧+Enter in Search diagram | Next / 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
| Message | Meaning |
|---|---|
| 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 flatten | Flatten 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 first | Duration… 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 + Action | The 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.
Related pages
- Diagrams: the shared editor, exports and annotations.
- Functional Analysis: functions, the FFBD and its tables.
- Simulation: Discrete Event and Monte Carlo runs, scripts and results.
- SysML Diagrams: the Activity and Sequence Diagrams built on the same Actions.
- Other Diagrams: Asset, Timeline, IDEF0 and N² Diagrams.
- Help: Build an Action Diagram, Action Diagram, Simulation Scripts.
Last updated October 7, 2026