humanish 0.77.0 → 0.79.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.
@@ -13,6 +13,19 @@ export interface StopWhenRule {
13
13
  export interface StopWhen {
14
14
  any: StopWhenRule[];
15
15
  }
16
+ /**
17
+ * A declared observation window (#510): once `when` matches (or at the start, when `when` is
18
+ * absent), the harness holds the page for `ms`, captures a frame every `everyMs`, takes no action
19
+ * and requests no model turn, then hands control back to the participant (`then: continue`) or
20
+ * ends the session (`then: stop`). Bounded by the session budget: a window that would outlast it
21
+ * is cut to fit. The study is observing; the participant is not "waiting".
22
+ */
23
+ export interface DwellWindow {
24
+ when?: StopWhen;
25
+ ms: number;
26
+ everyMs: number;
27
+ then: "continue" | "stop";
28
+ }
16
29
  export interface StopConditionObservation {
17
30
  url?: string;
18
31
  text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stop-conditions.js","sourceRoot":"","sources":["../src/stop-conditions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stop-conditions.js","sourceRoot":"","sources":["../src/stop-conditions.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Date: 2026-06-02 (current-state note updated 2026-07-14)
4
4
 
5
5
  Status: reference map for the major contracts shipped through source version
6
- `0.77.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.79.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
7
7
  schema constants, parsers, and validators in `src/` are authoritative. Rows
8
8
  marked "reserved" name layering intent only — no code emits or validates them
9
9
  yet. Do not emit a reserved schema.
@@ -29,7 +29,7 @@ study completed, reproduced, and produced a real accessibility finding via a
29
29
  keyboard-first participant
30
30
  ([docs/goals/email-gated-signup/receipts/](email-gated-signup/receipts/)).
31
31
 
32
- ## Current Program Truth (source `0.77.0`)
32
+ ## Current Program Truth (source `0.79.0`)
33
33
 
34
34
  The package source and repository implementation in this tree agree on these
35
35
  points:
@@ -463,6 +463,31 @@ Stop and correct course if:
463
463
 
464
464
  ## Best Next Work
465
465
 
466
+ **2026-09-04, evening (0.79.0).** Two of the operator's own asks, each with a live receipt. A
467
+ declared observation window (#510): `dwell` on an actor or a lane holds the page once its condition
468
+ matches (or from the start), captures a frame on a cadence, takes no action and requests no model
469
+ turn, then hands control back with a hint or ends the session; the window is recorded in the trace
470
+ as deliberate and never outlasts the session budget. On TodoMVC the window opened when "1 item
471
+ left" matched, held 60.6 s, captured six frames with no model turn inside, and the participant then
472
+ added the second task (`receipts/dwell-window-2026-09-04.md`). The first live attempt found the
473
+ option dropped between the lane and the loop by a spread the type checker cannot see; a plumbing
474
+ test now pins it. A participant with a camera (#509, first slice): `execution.desktop.media.camera`
475
+ gives a hosted Chrome lane a capture device (ffmpeg's test pattern generated in the sandbox, or a
476
+ `.y4m` of the adopter's) behind the browser's own permission dialog by default;
477
+ `policies.mediaPermission: granted` bypasses it; the bundle records the feed and the flags under
478
+ `desktopBrowser.media`; a microphone is refused without an image that has an audio stack, before
479
+ any spend. Live, Chrome raised its real dialog with a preview of the feed, the participant chose
480
+ "Allow this time" and read back 640x480 (`receipts/participant-camera-2026-09-04.md`). Under
481
+ mobile emulation the TodoMVC rename now blocks 3 of 3 phone participants; Excalidraw stays clean
482
+ at 12 of 12.
483
+
484
+ **2026-09-04, later (0.78.0).** `@e2b/desktop` moved from 2.2.3 to 2.3.3 (#638): its 2.3.1
485
+ changelog names the socket #581 found today, a background command's event stream the SDK kept
486
+ open after `Xvfb` and `startxfce4` were launched, which held the CLI process alive twelve minutes
487
+ past a run's written result. `doctor` now prints the installed desktop SDK version on its row and
488
+ attaches an advisory with the fix below 2.3.1 (#639). A live try-live on the new SDK reached its
489
+ goal in 104 s and settled with no active resources.
490
+
466
491
  **2026-09-04 (0.77.0).** Four fixes found by runs and one by a scanner. A phone-emulated lane now
467
492
  follows the participant into a tab that opens later: the hold-mode applier attaches to every page
468
493
  target Chrome creates, paused before its first navigation, so the new tab lays out at the phone
@@ -529,9 +554,10 @@ and a Claude participant with no memory across turns (#520). `humanish stats` (#
529
554
 
530
555
  The standing queue, in rough order:
531
556
 
532
- 1. #581: after a failed terminal run the CLI process lingered sixteen minutes past its result;
533
- the lane is clean in-process, so the holder is the SDK or the shell (`HUMANISH_DEBUG_HANDLES=1`
534
- now names it on the next occurrence);
557
+ 1. #581, the remaining half: a `Sandbox.create` that fails after the API allocated the sandbox
558
+ (the desktop SDK's own startup) leaves a sandbox this run never learned the id of, reclaimed only
559
+ by the provider's timeout; the linger itself is the SDK's held command stream, closed by the
560
+ 2.3.3 bump (0.78.0), and `doctor` names an older SDK;
535
561
  2. #513: there is still nowhere to read the docs on humanish.dev (site copy is locked; a docs
536
562
  route needs the operator's sign-off);
537
563
  3. the TUI views over `stats` and `export` (#455's metrics screen and `s` key), design-gated;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Status: public-safe contributor and agent ramp.
4
4
 
5
- Package/source version in this tree: `0.77.0` (2026-09-04). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
5
+ Package/source version in this tree: `0.79.0` (2026-09-04). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
6
6
  `0.15.1` remains in force: managed run and output paths bind to validated
7
7
  physical filesystem identities, and stored provider IDs are evidence, not
8
8
  cleanup authority. The bundled OSS meta-lab is dry-run only until
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.77.0",
3
+ "version": "0.79.0",
4
4
  "description": "Open-source-safe CLI for persona simulation, observer review, and public-safe feedback drafts.",
5
5
  "author": "Daniel G Wilson <daniel@danielgwilson.com>",
6
6
  "keywords": [
@@ -103,7 +103,7 @@
103
103
  },
104
104
  "devDependencies": {
105
105
  "@anthropic-ai/claude-agent-sdk": "^0.3.0",
106
- "@e2b/desktop": "^2.2.3",
106
+ "@e2b/desktop": "^2.3.3",
107
107
  "@types/node": "^20.19.41",
108
108
  "@types/pngjs": "^6.0.5",
109
109
  "tsx": "^4.22.4",