An Activity node ({node}/_Activity/{id}) is the record of one run: a script, an import, a sync. Its page is ActivityViews.Overview in MeshWeaver.Graph.Views, and the code cell's output pane is the sibling Progress area built from the same pieces.

What was wrong

A script that sent a mail and returned a dictionary rendered as:

The type name had one cause: the kernel logged returnValue.ToString() for every result that was not a control, and the page's headline was "the latest log line".

The page now

In the order a reader asks:

  1. Header — status chip in the shared vocabulary (StatusGlyph: ✓ Done / ✗ Failed / …), what ran in words (Humanize(category)), then who · when · how long. Who falls back from the log's user to the node's creator before it says "System". The time is the viewer's zone, written yyyy-MM-dd HH:mm.
  2. Origin — a link to the hub that ran it (ActivityLog.HubPath).
  3. Status line — only while running (the live bar) or when the run did not succeed (the loud headline). A succeeded run says so once, in the chip.
  4. Result — the returned control when the kernel still holds it; otherwise BuildResult(ActivityLog.ReturnValue): one row per property, names in words, a URL as a link named by its host, booleans as ✓ / ✗, empty values omitted, long opaque values cut at ResultValueLimit, at most ResultRowLimit rows. A scalar renders nothing here — its log line is the output.
  5. Log — one row per message with the time it was logged. A line that is nothing but a CLR type name (IsTypeNameNoise) is dropped, so runs recorded before the kernel fix read cleanly too.
  6. Re-run / Cancel — Re-run is a plain button: re-running repeats the run's side effects.

The code cell's output pane (Progress) gets the same result rows, without the header and the per-line time.

The rule

A returned value is rendered from ActivityLog.ReturnValue, never from ToString(). The kernel (KernelExecutor.OutputLine, platform) logs a return value only when it describes itself — a scalar, a string, a record — and logs nothing for a value whose ToString() is its type name. A script that wants its result on the page returns an object with named properties, or a control.

Every builder named above is a pure function of the ActivityLog, pinned in ActivityProgressViewTest without a layout host.