humanish 0.84.0 → 0.85.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.
- package/dist/cua-actor-lab.js +3 -2
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/export.js +17 -10
- package/dist/export.js.map +1 -1
- package/dist/feedback-proof.d.ts +8 -0
- package/dist/feedback-proof.js +44 -0
- package/dist/feedback-proof.js.map +1 -0
- package/dist/feedback.js +6 -5
- package/dist/feedback.js.map +1 -1
- package/dist/observer-app.html +55 -9
- package/dist/observer-data.d.ts +12 -0
- package/dist/observer-data.js +8 -0
- package/dist/observer-data.js.map +1 -1
- package/dist/observer-library.d.ts +2 -0
- package/dist/observer-library.js.map +1 -1
- package/dist/observer-static.js +52 -1
- package/dist/observer-static.js.map +1 -1
- package/dist/observer.d.ts +5 -0
- package/dist/observer.js +90 -34
- package/dist/observer.js.map +1 -1
- package/dist/oss-meta-lab.js +6 -5
- package/dist/oss-meta-lab.js.map +1 -1
- package/dist/program.js +48 -47
- package/dist/program.js.map +1 -1
- package/dist/serve-http.d.ts +4 -0
- package/dist/serve-http.js +9 -1
- package/dist/serve-http.js.map +1 -1
- package/dist/tui-actions.d.ts +12 -7
- package/dist/tui-actions.js +72 -56
- package/dist/tui-actions.js.map +1 -1
- package/dist/tui-app.js +1 -1
- package/dist/tui-contract.d.ts +1 -1
- package/docs/architecture/observer-review.md +130 -0
- package/docs/architecture/observer.md +88 -2
- package/docs/contracts/feedback.md +9 -0
- package/docs/contracts/schemas.md +1 -1
- package/docs/goals/current.md +6 -2
- package/docs/ramp/README.md +1 -1
- package/docs/release/0.84.1-portable-feedback.md +20 -0
- package/docs/release/0.85.0-observer-review.md +56 -0
- package/package.json +4 -2
|
@@ -65,6 +65,42 @@ The browser polls `observer-data.json` with `no-store` caching. Static
|
|
|
65
65
|
operator path. Agents and CI should use `humanish watch --json --no-open` for
|
|
66
66
|
the same fresh evidence without browser open or a long-running process.
|
|
67
67
|
|
|
68
|
+
### Reopening a run
|
|
69
|
+
|
|
70
|
+
The TUI's **Open Observer** action opens an HTTP view that follows saved captures
|
|
71
|
+
as the run writes them. One loopback evidence server is shared by the session's
|
|
72
|
+
browser tabs; exiting the TUI closes it, including when the UI fails. Opening a
|
|
73
|
+
run does not launch a study. The URL is always shown for manual opening or SSH
|
|
74
|
+
port forwarding, and only contained run paths in the TUI's project are accepted.
|
|
75
|
+
|
|
76
|
+
| Entry point | What updates | Lifetime |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| `watch` during a study | Saved evidence and available in-memory desktop streams | Until the attached command exits |
|
|
79
|
+
| `observe --run <id>` | Saved evidence from the selected run | Until the command exits |
|
|
80
|
+
| TUI Open Observer | Saved evidence in the selected run; shares the project's evidence library | Until the TUI exits |
|
|
81
|
+
| `serve` | Saved evidence across the project's library | Until the server command exits |
|
|
82
|
+
| Static HTML or `file://` | The exported snapshot | Independent of a server |
|
|
83
|
+
|
|
84
|
+
`observe` uses the same current-data projection as the attached viewer, scoped
|
|
85
|
+
to the selected run. Its history cannot enumerate other runs. HTML exports use
|
|
86
|
+
the installed Observer renderer around the recording's saved data and embedded
|
|
87
|
+
images, so older recordings get UI improvements without changing their source.
|
|
88
|
+
|
|
89
|
+
Reopening an active run follows its saved captures; it cannot recover a live
|
|
90
|
+
desktop URL held by another process. Stream credentials are never recovered
|
|
91
|
+
from disk or added to the TUI/library server. Original `watch` attachment is
|
|
92
|
+
what enables a live desktop stream. The loopback library retains its Host
|
|
93
|
+
allowlist, contained file reads, read-only routes and no-store security headers.
|
|
94
|
+
|
|
95
|
+
Served data may also include `runtime` with `state`, `observedAt`, and
|
|
96
|
+
`source: "local-run-status"`. This is a current observation of a contained,
|
|
97
|
+
matching `status.json`; it never changes the run's recorded verdict or participant
|
|
98
|
+
outcomes. A fresh heartbeat means running, an explicitly finalized record means
|
|
99
|
+
finished, and stale or invalid timing means unknown. Missing, malformed, or
|
|
100
|
+
mismatched records omit the observation. A stale heartbeat alone does not prove
|
|
101
|
+
interruption, and stored PIDs are neither probed nor returned. Static rendering
|
|
102
|
+
and export do not create this served-only observation.
|
|
103
|
+
|
|
68
104
|
Local `codex-exec` actor runs now publish an initial running `run.json` and
|
|
69
105
|
`observer/observer-data.json` before actor completion, then refresh both after
|
|
70
106
|
sanitized transcripts, traces, and verdict events are available. This gives a
|
|
@@ -81,13 +117,15 @@ stream URLs in any mode; remote viewers see persisted evidence only. See
|
|
|
81
117
|
### Exposed hardening and `watch --expose`
|
|
82
118
|
|
|
83
119
|
The live `serveObserver` server binds `127.0.0.1` and, by default, is a
|
|
84
|
-
|
|
120
|
+
local-dev server without a Host allowlist. Every response carries security
|
|
121
|
+
headers, including `X-Frame-Options: DENY` and CSP `frame-ancestors 'none'`.
|
|
122
|
+
Under its
|
|
85
123
|
`exposed` option — set by `watch --expose` — it enforces the SAME
|
|
86
124
|
DNS-rebinding defense as the library surface: a strict Host allowlist (loopback
|
|
87
125
|
names at bind, extended by `addPublicOrigin(tunnel.url | public-url)`, `421
|
|
88
126
|
Misdirected Request` otherwise) and the shared `buildServeSecurityHeaders()` on
|
|
89
127
|
every response (both live in `src/serve-http.ts`, shared without a module cycle).
|
|
90
|
-
|
|
128
|
+
The Host allowlist applies in exposed mode; frame-denial headers apply in both modes.
|
|
91
129
|
|
|
92
130
|
Exposed mode also SCOPES the surface to the attached live run (`result.run`): the
|
|
93
131
|
`/_humanish/history.json` index is filtered to that one run, and `/_humanish/runs/<id>/…`
|
|
@@ -108,8 +146,45 @@ attached server comes up DURING the run and survives a `timed_out`/`failed` run
|
|
|
108
146
|
to Ctrl-C. `serve` still never injects stream URLs. See
|
|
109
147
|
[Serve: the run library surface](serve.md).
|
|
110
148
|
|
|
149
|
+
### Live desktop iframe authority
|
|
150
|
+
|
|
151
|
+
Only a URL in the attached server's in-memory runtime map receives
|
|
152
|
+
`stream.embed.runtimeDesktop: true`. Persisted markers are removed when building
|
|
153
|
+
Observer data and again when reading served fallback projections. Cross-run
|
|
154
|
+
library routes do not inherit the attached run's runtime URLs, even when their
|
|
155
|
+
stream ids match. Ended or invalid runtime entries do not receive the grant.
|
|
156
|
+
The generic static-server helper strips this marker and saved `runtime` state
|
|
157
|
+
from Observer JSON and inline data. Static responses carry the same framing
|
|
158
|
+
denial headers; they never grant active desktop attachment.
|
|
159
|
+
|
|
160
|
+
The browser can preserve a cross-origin provider's origin for its desktop viewer
|
|
161
|
+
modules only with this grant. Ordinary stored embeds remain isolated. Every
|
|
162
|
+
Observer/library response, including raw run HTML, refuses framing, so a provider
|
|
163
|
+
redirect or scripted navigation back to an Observer-origin document cannot load
|
|
164
|
+
it inside the iframe and gain access to the parent. This protects the receiving
|
|
165
|
+
origin without a fixed provider allowlist that becomes stale as desktops start.
|
|
166
|
+
The underlying standards are [iframe sandbox permissions](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe)
|
|
167
|
+
and [CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/frame-ancestors).
|
|
168
|
+
|
|
169
|
+
Raw artifact responses also carry `sandbox allow-scripts` in their CSP. Opening
|
|
170
|
+
a saved HTML or SVG document directly gives its scripts an opaque origin, so
|
|
171
|
+
they cannot read the Observer's other evidence or browser storage. The policy
|
|
172
|
+
applies to every raw file, including unknown extensions, alongside `nosniff`.
|
|
173
|
+
Generated Observer HTML and JSON routes retain normal same-origin access for
|
|
174
|
+
updates. The generic static helper serves raw documents under the sandbox;
|
|
175
|
+
origin-dependent scripts and modules in those artifacts may require independent
|
|
176
|
+
hosting. See the [CSP sandbox standard](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/sandbox).
|
|
177
|
+
|
|
178
|
+
History entries may include `runtimeState` from the same contained local status
|
|
179
|
+
read as the Observer. Their existing `status` remains the recorded verdict.
|
|
180
|
+
Running filters should use runtime state when present, preserving the difference
|
|
181
|
+
between an active study and its provisional evidence outcome.
|
|
182
|
+
|
|
111
183
|
## UI Shape
|
|
112
184
|
|
|
185
|
+
See [Watching and reviewing evidence](observer-review.md) for current controls,
|
|
186
|
+
entry-point capabilities, timing limits and browser acceptance commands.
|
|
187
|
+
|
|
113
188
|
The Observer shell has:
|
|
114
189
|
|
|
115
190
|
- top mission-control band with run status and metrics;
|
|
@@ -119,6 +194,17 @@ The Observer shell has:
|
|
|
119
194
|
- terminal/TUI transcript stage;
|
|
120
195
|
- right evidence rail for events, artifacts, and known gaps.
|
|
121
196
|
|
|
197
|
+
The participant grid uses equal-height previews whose widths follow each screen's
|
|
198
|
+
aspect ratio. A 44px identity/source/outcome caption sits below the captured pixels;
|
|
199
|
+
no badges or controls cover the screen. Generated computer-use lane labels display
|
|
200
|
+
the recorded persona identity; repeated identities gain a lane or stream qualifier.
|
|
201
|
+
A stable details button opens labeled Pin/Compare actions, recorded notices, final
|
|
202
|
+
messages, dimensions, duration and exact identifiers. Exceptional outcomes remain
|
|
203
|
+
in the caption. Icon controls have visible hover/focus hints and touch-sized targets. Search, preview size and monitor mode
|
|
204
|
+
share the view/filter popover. Monitor mode keeps its exit beside the run status.
|
|
205
|
+
Live previews remain bounded to four visible cards, with the hovered or focused
|
|
206
|
+
participant taking priority when the grid shows more than four eligible cards.
|
|
207
|
+
|
|
122
208
|
## Codex UI Contract
|
|
123
209
|
|
|
124
210
|
`codex-ui` streams are normalized session/event projections. Public artifacts
|
|
@@ -156,6 +156,15 @@ Generating a public issue draft is blocked when:
|
|
|
156
156
|
|
|
157
157
|
## GitHub Issue Semantics
|
|
158
158
|
|
|
159
|
+
Generated acceptance commands use the installed `humanish` CLI from the workspace
|
|
160
|
+
containing the evidence. They require no repository package script or manifest.
|
|
161
|
+
When regenerating feedback from a retained first-party candidate, exact legacy
|
|
162
|
+
`pnpm humanish -- verify/watch` templates for the same run are projected to direct
|
|
163
|
+
CLI commands. Recognition checks the existing candidate/stream identity and
|
|
164
|
+
idempotency conventions; it is a compatibility rule, not provenance attestation.
|
|
165
|
+
Custom candidates and instructions remain unchanged. Source bundles, candidates
|
|
166
|
+
and receipts are never rewritten by this projection.
|
|
167
|
+
|
|
159
168
|
GitHub issues filed from feedback should say `contributes to` unless the
|
|
160
169
|
acceptance proof closes the full product claim. The public issue should include
|
|
161
170
|
only redacted evidence pointers and reproduction instructions that a maintainer
|
|
@@ -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.
|
|
6
|
+
`0.85.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.
|
package/docs/goals/current.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Current Goals
|
|
2
2
|
|
|
3
|
-
Status date: 2026-09-
|
|
3
|
+
Status date: 2026-09-09 (rev 23)
|
|
4
4
|
|
|
5
5
|
This page is the current public-safe operating goal for `humanish`. Keep it
|
|
6
6
|
short enough to reread before a coding session and concrete enough that future
|
|
@@ -29,11 +29,15 @@ 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.
|
|
32
|
+
## Current Program Truth (source `0.85.0`)
|
|
33
33
|
|
|
34
34
|
The package source and repository implementation in this tree agree on these
|
|
35
35
|
points:
|
|
36
36
|
|
|
37
|
+
**Observer watching and review, 2026-09-09 (#723, #724, #726, #728).** Grid previews preserve complete screens at a shared height, with compact captions and controls below the evidence. Run activity, live viewing, recorded replay and update freshness are distinct. Seeking, refresh and incoming captures preserve the selected viewing intent. The player adds elapsed-time review, zoom, saved moments and participant/cross-run comparison. The built TUI and observe serve existing evidence; exports contain no runtime desktop grants. See the [0.85.0 release note](../release/0.85.0-observer-review.md) for capabilities, acceptance evidence and limits.
|
|
38
|
+
|
|
39
|
+
**Portable feedback acceptance commands, 2026-09-07 (#720).** Generated proof commands use the installed CLI from the evidence workspace, including standalone exports without a package manifest. Redrafting recognized first-party candidates projects exact legacy command templates without rewriting source candidates or receipts. Custom instructions remain unchanged. See the [0.84.1 release note](../release/0.84.1-portable-feedback.md).
|
|
40
|
+
|
|
37
41
|
**Readable evidence and shareable feedback, 2026-09-07 (#136).** `export --format bundle --redact-screenshots` creates a separate verified workspace while retaining the readable original. Four real operator-run recordings preserved all measured findings and costs through export and ordinary feedback commands; all 31 frames played in both bundle and HTML views. Static Observer grades now reflect their actual verification result. See the [retained workflow receipt](computer-use-actor/receipts/redacted-evidence-workflow-2026-09-07.md). External maintainer use and acceptance remain unproven.
|
|
38
42
|
|
|
39
43
|
**Declared evidence verification (#715).** Ordinary verification checks final/partial actor frame references and feedback candidate files. Explicit raw frame declarations keep partial traces `local_only`; valid zero-event terminal logs remain supported. Missing or unknown per-frame redaction metadata retains existing compatibility behavior, and unreferenced files are outside this check.
|
package/docs/ramp/README.md
CHANGED
|
@@ -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.
|
|
5
|
+
Package/source version in this tree: `0.85.0` (2026-09-09). 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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Humanish 0.84.1: feedback commands work in exported workspaces
|
|
2
|
+
|
|
3
|
+
Feedback acceptance commands now call the installed `humanish` CLI directly.
|
|
4
|
+
They work from a standalone exported evidence workspace without a package
|
|
5
|
+
manifest or repository script:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
humanish verify --run RUN --json
|
|
9
|
+
humanish watch --run RUN --no-open
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Run them from the directory containing `.humanish/`, with the CLI on `PATH`.
|
|
13
|
+
The watch command serves the Observer until stopped. These commands do not
|
|
14
|
+
download a different package version.
|
|
15
|
+
|
|
16
|
+
Redrafting feedback from recognized first-party candidates also updates exact
|
|
17
|
+
legacy command templates. Custom acceptance instructions and all original
|
|
18
|
+
candidate evidence and receipts remain unchanged. Unusual run IDs are quoted
|
|
19
|
+
for shell use. The [feedback contract](../contracts/feedback.md) describes the
|
|
20
|
+
compatibility boundary.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Humanish 0.85.0: watch and review complete screens
|
|
2
|
+
|
|
3
|
+
Observer now shows portrait and desktop captures at their original proportions,
|
|
4
|
+
with equal-height grid previews and a compact caption below each screen. Live
|
|
5
|
+
labels and controls leave the captured pixels clear. A stable Info button opens
|
|
6
|
+
participant details, labeled Pin/Compare actions and recorded notices.
|
|
7
|
+
|
|
8
|
+
Run activity, viewing mode and evidence freshness are distinct. Finished studies
|
|
9
|
+
say they are finished; failed updates preserve the last evidence and offer retry.
|
|
10
|
+
Seeking, keyboard controls, moment links and refresh agree about the displayed
|
|
11
|
+
capture. Paused replay stays on its selected frame as new evidence arrives.
|
|
12
|
+
|
|
13
|
+
The review tools include:
|
|
14
|
+
|
|
15
|
+
- elapsed-time playback, capture-gap labels, Skip waits and action/finding navigation;
|
|
16
|
+
- fit, actual size, zoom/pan, fullscreen and a hideable/resizable inspector;
|
|
17
|
+
- copyable moment links, original-frame inspection and local saved moments;
|
|
18
|
+
- preview size, filtering, pinning, monitoring and reachable participant pages;
|
|
19
|
+
- participant and cross-run comparison with explicit capture age and missing coverage;
|
|
20
|
+
- consistent icons, keyboard hints, explicit popover dismissal and larger touch targets.
|
|
21
|
+
|
|
22
|
+
`observe` and the built TUI open existing evidence through a local viewer. Live
|
|
23
|
+
desktop access remains owned by the attached process; opening an existing study
|
|
24
|
+
cannot recover another process's credentials. Offline exports keep the current
|
|
25
|
+
renderer and saved images without runtime desktop authority. The
|
|
26
|
+
[Observer review guide](../architecture/observer-review.md) explains these paths.
|
|
27
|
+
|
|
28
|
+
## Updating
|
|
29
|
+
|
|
30
|
+
Install this version using your usual package manager. For a global installation:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g humanish@0.85.0
|
|
34
|
+
humanish --version
|
|
35
|
+
humanish observe --run RUN
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run the last command from the workspace containing the existing study. Previously
|
|
39
|
+
generated HTML embeds its viewer: reopen the run with the updated CLI, or
|
|
40
|
+
regenerate its HTML export, to get the new interface.
|
|
41
|
+
|
|
42
|
+
## Verification and limits
|
|
43
|
+
|
|
44
|
+
The implementation was exercised with five hosted two-participant studies and
|
|
45
|
+
140 retained screenshots. A separate check opened all 28 frames through observe,
|
|
46
|
+
the built headed TUI and HTML export: 84 of 84 opens passed. The
|
|
47
|
+
[implementation receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/observer-qol/receipts/2026-09-08-observer-review.md)
|
|
48
|
+
distinguishes failed probes, accepted runs and cleanup evidence.
|
|
49
|
+
|
|
50
|
+
Regression coverage includes 156 Observer tests, 33 production-artifact browser
|
|
51
|
+
scenarios and 15 iframe/artifact isolation checks. Browser acceptance covers
|
|
52
|
+
Chromium on Linux, including touch emulation; physical devices and other engines
|
|
53
|
+
remain unverified. Screenshot replay remains sparse evidence, without a
|
|
54
|
+
continuous video track or guaranteed before/after capture for every action.
|
|
55
|
+
The pre-existing source-checkout TUI loader limitation remains; the built CLI
|
|
56
|
+
is the tested installation path.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanish",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.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": [
|
|
@@ -76,7 +76,9 @@
|
|
|
76
76
|
"tui:test": "pnpm --filter humanish-tui test",
|
|
77
77
|
"release:dogfood": "node scripts/release-dogfood.mjs",
|
|
78
78
|
"docs:generate": "tsx scripts/generate-cli-docs.ts",
|
|
79
|
-
"docs:check": "tsx scripts/generate-cli-docs.ts --check"
|
|
79
|
+
"docs:check": "tsx scripts/generate-cli-docs.ts --check",
|
|
80
|
+
"observer:browser:proof": "node scripts/observer-browser-proof.mjs",
|
|
81
|
+
"observer:iframe:proof": "node scripts/observer-iframe-proof.mjs"
|
|
80
82
|
},
|
|
81
83
|
"repository": {
|
|
82
84
|
"type": "git",
|