experiment: server-host launcher flag + MI runner abort toggle - #8
Merged
Merged
Conversation
…r.py; document both account types The server-host launcher started monitor/storage/detection/api but never the experiment node, so a notebook or the MCP server driving a growth against the production stack had nothing to talk to. Add an opt-in --with-experiment flag (matching start_simulation.sh) that starts it with the same broker credentials, sequenced after storage/detection and before api, with a preflight check for a missing [experiment] config block. Account creation was asymmetric: broker accounts have scripts/apply_broker_ permissions.py, but the API user store (cfg/users.db) was only reachable via the python -m lumi.api.manage module CLI. Add scripts/create_api_user.py, a thin wrapper over that CLI's create-user kept next to the broker script so both account types are discoverable together; it adds --database for targeting a non-default users.db. README gains an "Accounts" section laying out the two independent credential systems (API vs broker) side by side, with the commands for each. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UyxfY7uJetWk4KxVSEDTpZ
The PASCAL firmware writes the `Aborted_*` assist file for some MI scripts that actually ran to completion, so `MiCommandRunner.execute` raising MIExecutionFailed on `is_aborted` fails ops whose commands the controller did carry out. A multi-command op like `to_temperature` (Temperature Control / Temperature Ramp / Temperature Set) dies on the first spurious abort and never sends the setpoint. Add `raise_on_abort` (default True -- behaviour unchanged): a constructor arg on MiCommandRunner and a per-call override on execute(), mirroring the existing `timeout` option. When off, an aborted execution is returned with a WARNING instead of raising; `is_stopped` (a deliberate `$stop`) still always raises. Wire it through nodes/experiment.py as `--ignore-mi-abort` and `experiment.mi_ignore_abort` (default false). The physical result must be verified against the chamber log whenever this is on. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UyxfY7uJetWk4KxVSEDTpZ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two changes on this branch:
start_server_host.sh --with-experiment+ account docs (ad1856c, already reviewed context)--with-experimentflag to also start the PLD growth driver nodescripts/create_api_user.pyMI runner: accept PASCAL's spurious aborts (
ef3de87)The PASCAL firmware writes the
Aborted_*assist file for some MI scripts that actually ran to completion, soMiCommandRunner.executeraisingMIExecutionFailedonis_abortedfails ops whose commands the controller did carry out. Observed on the production rig: everyto_temperature(350, rate)call aborts atTemperature Ramp <rate>and never reachesTemperature Set, while the chamber log shows no fault.raise_on_abort— constructor arg onMiCommandRunnerand per-call override onexecute(), mirroring the existingtimeoutoption. DefaultTrue, so current behaviour is unchanged.WARNINGinstead of raising.is_stopped(a deliberate$stop) still always raises.nodes/experiment.pyas--ignore-mi-abortandexperiment.mi_ignore_abort(defaultfalse), with a startup warning when active.Tests:
tests/experiment/test_mi_runner.py+3 (per-call off returns the aborted execution + warns; runner-wide off;$stopstill raises when off). Fulltests/experiment/suite passes (48).🤖 Generated with Claude Code