# Menus Every item in the menu bar, in order. An item that has a button too links to where that button is described; the forms only a menu opens are described right here, under their item. ## File | Item | Shortcut | Does | |---|---|---| | **New fleet…** | Ctrl+Shift+N | Start an empty fleet file and make it current. | | **Open fleet…** | Ctrl+O | Switch to another fleet file. The home stays the same. | | **Save working fleet as…** | Ctrl+S | Write the checked devices to a new fleet file you can take to another bench. | | **Quit** | the system's | Close the console — see [Closing it](index.md#closing-it). | *New fleet* and *Open fleet* first stop what the current fleet is running, after asking. ## Edit | Item | Shortcut | Does | |---|---|---| | **Device config…** | Ctrl+E | The selected device's declaration and `.env` — [Device config](devices.md#edit-device-config). | | **Fleet file…** | | The whole fleet as text — below. | | **Remove from fleet** | | Drop the selected device. A running server is stopped; its environment stays. | ### Fleet file… The fleet file, whole, for changes the forms do not offer. **Save** checks it before writing — a mistake is named in the window, not saved — and reloads the bench. The keys are in [Files and settings](../cli/files.md#the-fleet-file). ```{image} ../imgs/gui/dialog-fleet-file.png :width: 640px :alt: The Fleet file dialog showing fleet.yaml ``` ## Device Acts on the device selected in the [Devices tab](devices.md) — except *Add device…*, which is always there. The same items, without the last three, are on the device table's right-click menu. | Item | Shortcut | Same as | |---|---|---| | **Start** | Ctrl+R | ![Start](../imgs/gui/btn-device-start.png){height=22px} | | **Stop** | Ctrl+T | ![Stop](../imgs/gui/btn-device-stop.png){height=22px} | | **Restart** | | ![Restart](../imgs/gui/btn-device-restart.png){height=22px} | | **Install** | | ![Install](../imgs/gui/btn-device-install.png){height=22px} | | **Update** | | ![Update](../imgs/gui/btn-device-update.png){height=22px} | | **Uninstall** | | ![Uninstall](../imgs/gui/btn-device-uninstall.png){height=22px} | | **Control…** | Ctrl+D | ![Control](../imgs/gui/btn-device-control.png){height=22px} — [this device's panel](devices.md#control-the-control-window), in a window of its own | | **Field Test…** | Ctrl+F | ![Field Test](../imgs/gui/btn-device-field_test.png){height=22px} — [Field test](devices.md#field-test) | | **Fleet up** | | ![Fleet up](../imgs/gui/btn-fleet-up.png){height=22px} | | **Fleet down** | | ![Fleet down](../imgs/gui/btn-fleet-down.png){height=22px} | | **Add device…** | Ctrl+N | **Declare** ![Declare](../imgs/gui/btn-fleet-declare.png){height=22px} — [Declare device](devices.md#declare-device) | ## Experiment Acts on the run selected in the [Experiments tab](experiments.md) — except *Add experiment…*, which is always there. | Item | Shortcut | Does | |---|---|---| | **Run** / **Resume** | Ctrl+Shift+R | ![Run](../imgs/gui/btn-experiment-run.png){height=22px} | | **Pause** / **Continue** | | ![Pause](../imgs/gui/btn-experiment-pause.png){height=22px} | | **Stop** | | ![Stop](../imgs/gui/btn-experiment-stop.png){height=22px} | | **Abort** | | ![Abort](../imgs/gui/btn-experiment-abort.png){height=22px} | | **Install** | | ![Install](../imgs/gui/btn-experiment-install.png){height=22px} | | **Update** | | ![Update](../imgs/gui/btn-experiment-update.png){height=22px} | | **Configure…** | | ![Configure](../imgs/gui/btn-experiment-configure.png){height=22px} — [Configure](experiments.md#configure) | | **Report…** | | Asks *What happened?* and records it in the run's journal, between the steps it happened between — the Report pane's **Add report**. | | **Watch run** | | Open the experiment's views of the run. | | **Add note…** | | One more note on the run, open or ended — below. | | **Add experiment…** | | Declare an installed experiment module — below. | | **Remove experiment** | | Drop the experiment from the fleet. Its runs stay on disk. | ### Add experiment… ### Add note… Shows the run's notes so far and adds one, under **By** — proposed from the last operator of this bench. Notes go into the `notes.txt` in the run's folder, each with who wrote it and when; the run table's **Note** column shows the latest. ```{image} ../imgs/gui/dialog-run-note.png :width: 560px :alt: The Add note dialog: the run's earlier notes, who is writing, and the new note ``` ### Add experiment… Declares an installed experiment module under a name: its **Package**, a **Name**, the **Repository** and **Ref** it comes from, the **Config** file its runs start from, and extra **Arguments**. **Package** offers only experiment modules, and modules whose kind is not known yet; a folder loaded with [Load from…](#load-from) is declared by its folder. A name already declared is refused, with a pointer to *Experiment ▸ Configure…*, which changes that declaration. **Create** ![Create](../imgs/gui/btn-exp-create.png){height=22px} does this for you when you pick an experiment not declared yet. ```{image} ../imgs/gui/dialog-add-experiment.png :width: 640px :alt: The Add experiment dialog ``` ## Hub | Item | Shortcut | Does | |---|---|---| | **Browse…** | Ctrl+K | Browse the Hub's modules and install one — below. | | **Load from…** | | Use a module's repository already on this machine, where it is — below. | | **Installed modules…** | | Everything installed on this bench, declared or not, and **Uninstall** — below. | Installing a module declares nothing: afterwards, **Declare** ![Declare](../imgs/gui/btn-fleet-declare.png){height=22px} on the Devices card or **Create** ![Create](../imgs/gui/btn-exp-create.png){height=22px} on the Runs card puts it to use. ### Browse… The Hub's device and experiment modules at the quantum standard. An experiment is listed only once its published check passed on plesty-sdk 0.5 or newer, which shows it publishes the settings the **Configure** dialog is built from; one that does not yet can still be run from a checkout with [Load from…](#load-from). Search by name, vendor or description, and narrow by kind and vendor; the table shows each module's latest release, what this bench already has, and whether it passes its checks and field tests. Choose a source — **Release (PyPI)** at a version, or **Repository (git)** at a ref — and press **Install module**; a window follows the installation, and the main window says how it ended. Each drop-down lists every release on PyPI and every release tag of the repository, newest first. **Refresh** asks the Hub again for a module published a moment ago. The walkthrough is [Install and update modules](../usage/modules.md). ### Load from… A module's repository already on this machine — the one you are editing — used where it is, with its own `.venv`. Nothing is copied. ```{image} ../imgs/gui/dialog-load-from.png :width: 640px :alt: The Load from a local repository dialog ``` | Field | Means | |---|---| | **Folder** | The repository. **Browse…** picks it. The line below says what it is, or why it cannot be loaded. | | **Ref** | The branch to use. Choosing another one checks it out in the folder — refused while the folder has uncommitted changes. Left empty on a checkout that is on no branch, the folder is loaded on the commit it is on. | **Load module** records it; a loaded experiment is offered in *Create run* as `name (local)`. ### Installed modules… One row per installed version of every module on this bench — installed from the Hub, from a repository, or loaded from a folder — with its kind, version, source and the declarations that use it (**Used by**). A module installed and never declared is listed here too. ```{image} ../imgs/gui/dialog-installed-modules.png :width: 760px :alt: The Installed modules dialog: one row per installed module version, with its kind, version, source and the declarations using it ``` **Uninstall** removes the selected version. It is refused while a declaration uses it; remove that device or experiment first. A loaded folder is only forgotten: the folder itself stays. ## Server | Item | Does | |---|---| | **Configure…** | How other machines reach this bench — below. | | **Start agent** / **Stop agent** | Let `plesty-bench` and other benches reach this one while the console is open. Without it, remote commands time out against a bench that looks perfectly healthy. | | **Stop servers outside this fleet** | Stop the device servers a fleet this console no longer has open left running; they are not in the table, so nothing else stops them. Available while there are any — the status line names them. | | **Benches…** | On a *master* bench: the other benches whose devices this console shows — below. Greyed out on a *node*. | ### Configure… **Save** keeps the settings for the next *Start agent*; an agent already running keeps its old ones until you stop and start it. ```{image} ../imgs/gui/dialog-agent.png :width: 330px :alt: The Server configuration dialog ``` | Field | Means | |---|---| | **Bind** | Where the agent listens — `tcp://*:5550` by default. | | **Token** | The shared secret clients must send. **Generate** makes a new one, **Copy** puts it on the clipboard for the other machine; empty means no check. | | **Workers** | How many requests it handles at once. | | **Role** | **node** (the default) or **master** — see [Several benches](../usage/remote.md#driving-other-benches-from-this-console). | | **Plesty share** | The lab's shared disk as this machine mounts it (`Z:\plesty`, `/Volumes/plesty`). Every device and run the bench starts is given it as `PLESTY_DATA`, so a file is recorded relative to it and any machine reads it back. Saved only if it is mounted; it applies from each device's next start. Not set, the devices write under the bench home's `data` folder. | | **Bench folder** | This bench's folder in the share (`platform-a`, any depth), created when missing. Every device the bench starts writes under it: to its `data_dir` from the fleet, or to `tmp/`. | | **Updates** | *Check for updates at start*: once a day, the console asks PyPI for a newer PLESTY Bench when it starts and names it in the status bar. On by default. | | **Home**, **Fleet** | This bench's folder and fleet file, for reference. | ### Benches… A row per other bench — the **Name** this console calls it, the **Address** its agent listens on (`lab-bench-04:5550`), and its **Token** — with **Add** and **Remove**. The first row is this bench itself. Their devices then appear in the device table, their bench named under **Host**. ## View | Item | Shortcut | Does | |---|---|---| | **Fleet** ▸ **All** / *a fleet* / *a bench* | | Which devices the device table shows — each fleet of this bench and each other bench is ticked on its own, so any mix shows; **All** ticks or clears them all, and is the default. The menu stays open while you tick. The **Fleet** column names the fleet of each of this bench's rows. A device declared through the agent shows at the next refresh. | | **Refresh** | F5 | Re-read the bench now. | | **Jobs…** | | Show the selected device's Jobs pane. | | **Messages…** | | Every message of this session, in a window. | | **Control window** | | The [Control window](devices.md#control-the-control-window) with every running device. | ## Help | Item | Does | |---|---| | **Welcome…** | The page the first start opens: install the demo and run it on this PC — see [The welcome demo experiment](../welcome_demo.md). | | **Report a problem…** | A report to paste into a new issue — see [Report an issue](../usage/report_issue.md). | | **Check for updates…** | The version installed and the newest on PyPI, and **Update** — see [Upgrade a bench](../usage/upgrade.md). | | **About** | The running version: how and where it is installed, its Python, the last update and how it went, and a link to this version's changes. | ### Report a problem… A report of this bench to file as a new issue: **Title**, **What happened**, and *What is sent*, the full report to read before it goes. **Copy**, **Save…** or **Copy & open tracker**; the bench sends nothing itself. What the report holds, what it leaves out and how to send it: [Report an issue](../usage/report_issue.md). ## Confirmations Anything that stops, removes or deletes asks first, with **No** as the default: *Remove from fleet*, *Uninstall*, *Clear log*, *Fleet down*, *Stop run*, *Abort run*, *Delete run*, *Remove experiment*, and closing the console while something runs.