humanish 0.120.0 → 0.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -172,6 +172,25 @@ Every surface that shows whether a run passed calls `runDisplay`
172
172
  `outcome` line. A run
173
173
  shows as `passed` only when its verdict is `pass` and its `ok` is not false.
174
174
 
175
+ ## Host suspensions
176
+
177
+ The run's status cadence, every 5 s, is also its heartbeat. A wall-clock gap of 30 s or more
178
+ between two ticks, or between the last tick and a bundle write, is a host suspension: the machine
179
+ slept, or the process was stopped, and every participant loop on it stopped too. The wall clock
180
+ counts suspended time on macOS and Linux; Node's timers and `performance.now()` count it on macOS
181
+ only. Every bundle write records each suspension as a `host.suspended` warn event, `at` its start,
182
+ whose message names its start, end, length and offset into the run (`src/run/host-suspension.ts`).
183
+
184
+ On a computer-use run, a participant that failed in the harness or at its session time limit, and
185
+ was in flight across a suspension, likely failed because of it. So did a participant skipped after
186
+ such a failure (the pipeline gate, fail-fast). When any did, the outcome's first failure has
187
+ `kind: run` and one sentence, such as "The host was suspended for 6m 5s at +1m; the 34
188
+ participant failures after it are likely its effect.", ahead of each participant's own failure.
189
+ `review.summary` starts with the same sentence, the attributed participants share one gap line,
190
+ and the study result's `hostSuspension` holds the sentence, the participant ids and the
191
+ suspensions. Participant records, streams and traces stay as they ended. The other routes record
192
+ the events only.
193
+
175
194
  ## Recorded session stop causes
176
195
 
177
196
  An actor trace may include `stopCause` alongside its unchanged `status`,
@@ -461,7 +461,8 @@ mirror the first participant and `subject.commit` is unanimity-gated across part
461
461
  (omitted with a divergence warning when participants resolve different commits). At N=1
462
462
  the run bundle is byte-stable with the pre-fan-out output; only the result
463
463
  projection changed. A fan-out run records a `cua-lab.fanout.plan` bundle event
464
- (and a `cua-lab.fanout.fail-fast` event when a harness error skips queued participants);
464
+ (and a `cua-lab.fanout.fail-fast` event when a harness error in a participant's session skips
465
+ queued participants);
465
466
  `ok = observer.ok ∧ every participant ok ∧ no failed adapter or declared-scorer verdict`,
466
467
  where a dry-run participant is ok as synthetic and a live participant must pass
467
468
  `participantPassed` (`src/run/judge.ts`): not skipped, status `passed`, no harness
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.120.0",
3
+ "version": "0.121.0",
4
4
  "description": "Synthetic user research for apps, CLIs, and agent-facing product flows.",
5
5
  "keywords": [
6
6
  "cli",