Skip to content

Verified: Online edits

Each claim the Online edits page makes, with the tests that prove it in the last green CI run: 12 of 12 verified. The claims live in docs/claims/online-edits.yaml.

Last green CI run 16 Oct 2026, 14:48 UTC on c7618d3 · all runtime claims

OE-001 verified

A warm swap carries retained state (integrators, timers, counters) across by name and type, and reports what could not carry over (new variables, changed types) as resets.

where the docs say so · TestSwapWarmCarriesRetainedState carries an integrator, a running TON (its preset lands 10 s after the original start), a CTU's count and edge memory and a user FB's internal sum, and reports the new variable as a reset; TestSwapWarmTypeChangeResets reports a retyped one.

  • pass TestSwapWarmCarriesRetainedState in runtime
  • pass TestSwapWarmTypeChangeResets in runtime
  • pass TestSwapWarmFBDCarriesRetainedState in runtime
  • pass TestSwapWarmLadderCarriesRetainedState in runtime

OE-002 verified

A program that fails to compile leaves the running program untouched, so a typo cannot fault the controller.

where the docs say so

  • pass TestSwapWarmCompileErrorLeavesRunning in runtime
  • pass TestSwapWarmFBDCompileErrorLeavesRunning in runtime
  • pass TestProgramOnlineEditFlow in server

OE-003 verified

Online edits are off by default: a controller refuses a pushed program unless online edits are enabled for it (server.Options{OnlineEdits: true}).

where the docs say so

  • pass TestProgramEndpointsGated in server
  • pass TestProgramOnlineEditFlow in server

OE-004 verified

With a token configured, tag writes and online edits require it while reads (and naut pull) stay open.

where the docs say so

  • pass TestWriteAuthToken in server
  • pass TestWriteAuthBaseLayer in server
  • pass TestOnlineEditsRequireTheTokenButReadsStayOpen in server

OE-005 verified

Without a retain store a restart reverts to the program the binary embeds. With retain: configured, online edits survive a restart of the same build; a deploy of a different build replaces them (the edit is discarded, logged and named in retainDiscardedEdits, its source kept in the store under discardedPrograms), so committing the program to git is the only way an edit becomes permanent.

where the docs say so · A restart is a fresh runtime from the same project (and, with retain, the same store) in the test process, not a new OS process; a deploy is a fresh runtime whose built-in program differs. The log line is not asserted; retainDiscardedEdits is.

  • pass TestOnlineEditDoesNotSurviveARestart in internal/project
  • pass TestOnlineEditSurvivesARestartThroughTheStore in runtime
  • pass TestOnlineEditSurvivesARestartOfTheSameBuild in runtime
  • pass TestNewDeployReplacesARetainedOnlineEdit in runtime
  • pass TestBuildContainingTheEditClearsTheRetainedEntry in runtime
  • pass TestRetainedEditWithoutABaseIsDiscarded in runtime

OE-007 verified

An online edit can be rolled back, restoring the program that ran before it.

where the docs say so

  • pass TestProgramOnlineEditFlow in server
  • pass TestSwapWarmCarriesRetainedState in runtime

OE-008 verified

naut pull --host writes each running program back into the workspace file that declares its POU (a new program lands in <POU>.st or <POU>.fbd); only program files are rewritten, generated type files are never touched.

where the docs say so

  • pass TestPullMultiTask in cmd/naut
  • pass TestPullSingleProgramRenameTolerant in cmd/naut
  • pass TestPullCreatesFBDFileAndLeavesTypeAndLibraryFilesAlone in cmd/naut

OE-009 verified

naut pull --check reports drift in any of the controller's programs and exits non-zero, so CI can fail on un-pulled edits.

where the docs say so

OE-010 verified

A download sends the program's composition: the project's library prelude (PROGRAM-less .st files verbatim, then .ld/.fbd libraries transpiled to ST) followed by the program file as written, and naut compose prints it, with --json splitting prelude, program, POU and library paths.

where the docs say so

  • pass TestComposeMatchesTheRuntime in cmd/naut
  • pass TestComposeJSON in cmd/naut
  • pass TestComposeGraphicalProgramUsesLadderLibrary in cmd/naut
  • pass TestComposeCoversRootLevelLibrariesAndBothGraphicalLibraries in cmd/naut

OE-011 verified

Composition is a single definition shared by the runtime, the language server, download and pull, so a program round-trips losslessly.

where the docs say so

  • pass TestComposeMatchesTheRuntime in cmd/naut
  • pass TestDownloadThenPullRoundTripsLosslessly in cmd/naut (3 of 3 passed)
  • pass TestComposeCoversRootLevelLibrariesAndBothGraphicalLibraries in cmd/naut

OE-012 verified

Programs are addressed by POU name: GET /api/program lists every program, a PUT routes by the POU in the submitted source, ?pou= and ?task= select one for GET and rollback.

where the docs say so

  • pass TestProgramTaskRouting in server
  • pass TestProgramTaskSelectorOnGetAndRollback in server

OE-013 verified

Retained state carries across a swap of a non-main task's program the same way as the main task's.

where the docs say so

  • pass TestTaskProgramOnlineEditCarriesRetainedState in server