humanish 0.83.2 → 0.84.1

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.
@@ -34,6 +34,12 @@ safe. A verified run bundle is not automatically public-promotable: feedback
34
34
  commands also require `humanish verify` to report
35
35
  `shareSafety.status: share_ready`.
36
36
 
37
+ For an otherwise valid run whose only sharing restriction is raw screenshots,
38
+ `humanish export --run RUN --format bundle --redact-screenshots --out ./shared-study`
39
+ produces a separate, reverified workspace. Feedback commands use
40
+ `--cwd ./shared-study --run RUN`; the source retains its original local-only grade
41
+ and readable frames. Exported thumbnails do not replace local visual adjudication.
42
+
37
43
  ## Command Stages
38
44
 
39
45
  ```bash
@@ -150,6 +156,15 @@ Generating a public issue draft is blocked when:
150
156
 
151
157
  ## GitHub Issue Semantics
152
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
+
153
168
  GitHub issues filed from feedback should say `contributes to` unless the
154
169
  acceptance proof closes the full product claim. The public issue should include
155
170
  only redacted evidence pointers and reproduction instructions that a maintainer
@@ -410,6 +410,53 @@ bundle is safe to promote into a public issue. Public promotion should branch on
410
410
  - `local_only`: keep the run local or generate a redacted replacement bundle;
411
411
  - `blocked`: fix the verification or public-safety failure first.
412
412
 
413
+ The local-evidence check includes screenshots declared only by
414
+ `streams[].actor.items[].screenshotRef` or `streams[].liveActor.items[].screenshotRef`,
415
+ as well as every feedback candidate's evidence. Actor frame paths are relative
416
+ to the run root; missing, malformed or nonlocal references fail verification.
417
+ Screenshots use the existing bounded PNG decoder. Nonimage candidate evidence
418
+ may be an empty regular file, consistent with feedback verification, but that
419
+ permission cannot relax another consumer's nonempty-file requirement. The
420
+ qualified zero-event terminal-log exception remains unchanged.
421
+
422
+ An explicit `screenshotRef.redaction: none` on either final or live actor items
423
+ contributes the existing `RAW_SCREENSHOTS` reason and keeps otherwise valid
424
+ evidence `local_only`. Either an aggregate raw declaration or a raw frame wins
425
+ over a blurred declaration. Missing or unknown per-frame metadata retains the
426
+ existing permissive compatibility behavior; verification does not infer pixel
427
+ privacy from that absence.
428
+
429
+ ## Redacted Derivative Workspace
430
+
431
+ `humanish export --run RUN --format bundle --redact-screenshots --out DIRECTORY`
432
+ creates a new workspace at `DIRECTORY/.humanish/runs/RUN/`. The source remains
433
+ unchanged, including its latest pointer and statistics. The derivative retains the
434
+ original run ID and measured outcomes; it is not a new attempt. Standard commands
435
+ select it with `--cwd DIRECTORY --run RUN`.
436
+
437
+ Its `derivation.json` uses schema `humanish.redacted-derivation.v1` and records:
438
+
439
+ - `sourceRunId`, `createdAt` (export time), and `transformation` (`png-blur-at-export-v1`);
440
+ - `sourceInventorySha256`: SHA256 of the JSON array of `[path, byteLength, sha256]`
441
+ rows, sorted by path using JavaScript string order;
442
+ - `files[]`: source-relative `path`, `sourceSha256`, action (`copied`, `updated`,
443
+ `blurred`, or `omitted`), and `outputSha256` for retained files or a reason for
444
+ omission;
445
+ - `generated[]`: paths and SHA256s of rebuilt Observer projections.
446
+
447
+ The receipt describes the transformation; it does not attest that a participant's
448
+ finding is true. Its own bytes are not included in its hash inventory. Feedback
449
+ commands can subsequently generate new derivative-local artifacts.
450
+
451
+ PNG files are re-encoded as blurred thumbnails, including unreferenced images.
452
+ Known actor screenshot declarations describe export-time blur while retaining the
453
+ original redaction notes. Observer is rebuilt; old feedback outputs, local process
454
+ status and the operational sandbox journal are omitted and inventoried. A derivative
455
+ does not inherit resource cleanup authority. Unsupported images, binary formats,
456
+ inline image payloads, invalid evidence and references to omitted files are refused.
457
+ The original and derivative are independently verified. Text still requires human
458
+ review before sharing; screenshot blur does not certify natural-language privacy.
459
+
413
460
  ## Contract Fixture Proof
414
461
 
415
462
  The core fixture proves:
@@ -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.83.2`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.84.1`; 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.
@@ -1,6 +1,6 @@
1
1
  # Current Goals
2
2
 
3
- Status date: 2026-09-07 (rev 21)
3
+ Status date: 2026-09-07 (rev 22)
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,17 @@ 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.83.2`)
32
+ ## Current Program Truth (source `0.84.1`)
33
33
 
34
34
  The package source and repository implementation in this tree agree on these
35
35
  points:
36
36
 
37
+ **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).
38
+
39
+ **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.
40
+
41
+ **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.
42
+
37
43
  **Narrow desktop and shared-study correction, 2026-09-07.** A minimum-width Chrome window can remain outside a 500px desktop after move/resize. A state-checked fullscreen fallback now proves physical containment before participant entry. Concurrent shared-world actors share the declared model-study budget, and a host ending before lobby handoff retains its actual failure rather than being reported as a timeout. See [bounded desktop receipt](computer-use-actor/receipts/narrow-desktop-containment-2026-09-07.md). This does not establish physical mobile fidelity or external adoption.
38
44
 
39
45
  **Mobile input correction, 2026-09-05 (#676).** The historical 4/4 TodoMVC phone-lane rename
@@ -23,8 +23,8 @@ certify (see the conformance suite).
23
23
  scan additionally blocks them from commit; downstream projects do not get that scan — their
24
24
  protection is the init-scaffolded `.gitignore` plus their own review. To share a bundle
25
25
  as-is, set `policies.redactScreenshots: true` (blurs
26
- at capture); a redact-on-export step for already-captured raw bundles is planned, not yet
27
- shipped. (See "the capture-vs-publish rule" below — blurring frames at *capture* was a
26
+ at capture), or use `humanish export --format bundle --redact-screenshots` to create a
27
+ separately verified copy while preserving readable local evidence. (See "the capture-vs-publish rule" below — blurring frames at *capture* was a
28
28
  default mistaken for this invariant.)
29
29
  - Scope note: the literal scrub of KNOWN provisioned values runs on harness log-tails,
30
30
  errors, AND model-authored narration (reasoning/message) before it persists; secret-SHAPED
@@ -85,7 +85,7 @@ silently drifting from one is not.
85
85
  | Per-lane worlds | Isolation, attribution, reproducibility | `subject.topology: shared-world` — N seats against ONE provisioned, mutable plane for scenarios that ARE about interaction between roles (#164). `execution.concurrency: 1` (an explicit choice) = SEQUENTIAL turns (one sandbox); higher = CONCURRENT — and since #350 an omitted concurrency fills to the seat count, so every declared seat runs live at once by default (one getHost-exposed subject sandbox + N actor sandboxes driving it at once, synthetic-subject only). The bundle declares the weaker `attributionClass: shared-world` + a verify-enforced `attributionLimits` ceiling (the concurrent set drops `sequential-only` and adds `best-effort-causal-attribution` etc.), so the looser per-role attribution is honest, not hidden. |
86
86
  | External key placement | Smallest blast radius: when the keyed process (e.g. a computer-use provider loop) runs outside the sandbox, its key never enters | In-sandbox placement when the keyed process runs inside (an agent harness under test); declared per actor type, with a spend budget |
87
87
  | Loopback entry URLs | Public-safety: never drive third-party sites unbidden | `policies.allowPublicTargets` for an owner-declared deployment/preview (a Vercel preview of your own app). Multi-lane public/preview fan-out needs explicit `actors[0].lanes[].target` for every lane, so the adapter-owned topology is declared rather than inferred. Provisioned clone subjects always serve in-sandbox on loopback |
88
- | Full-fidelity screenshots, local | The common case is watching a sim of your OWN app locally; blur destroys the deliverable. Raw frames live in gitignored `.humanish/` (this repo's CI adds a binary-asset commit scan; downstream projects rely on the scaffolded `.gitignore` and their own review) | `policies.redactScreenshots: true` blurs at capture for share-as-is bundles (a redact-on-export step for raw bundles is planned) |
88
+ | Full-fidelity screenshots, local | The common case is watching a sim of your OWN app locally; blur destroys the deliverable. Raw frames live in gitignored `.humanish/` (this repo's CI adds a binary-asset commit scan; downstream projects rely on the scaffolded `.gitignore` and their own review) | `policies.redactScreenshots: true` blurs at capture; `export --format bundle --redact-screenshots` produces a separate verified copy of a completed run |
89
89
  | Synthetic, seeded state | Pinned provenance; no real user data in evidence paths | Declared external state, recorded as UNPINNED in provenance |
90
90
  | Single lane | Cost + evidence simplicity | Declared fan-out where the backend supports it — `actors[0].count: N` (homogeneous), explicit `actors[0].lanes[]` (differentiated persona/device/instruction), or compact `actors[0].roster[]` groups that normalize into lanes on the computer-use E2B route (per-lane worlds, cap 16; `execution.concurrency` bounds concurrent paid lanes) |
91
91
  | Stock `desktop` template | The stock E2B desktop image is right for most subjects; absent `execution.desktop.template` keeps `Sandbox.create(opts)` byte-stable | `execution.desktop.template` names a custom E2B desktop image (any name/id, no allowlist) for a subject needing baked-in runtimes the stock image lacks (e.g. node/bun/a local Postgres) — threaded to `Sandbox.create(template, opts)` on every desktop-creating route and recorded in the bundle as `desktopTemplate` (public-safe) |
@@ -140,8 +140,9 @@ threat. The corrected principle:
140
140
  Consequences:
141
141
 
142
142
  - Screenshots are retained **raw and full-fidelity** by default, in gitignored `.humanish/`.
143
- `policies.redactScreenshots: true` blurs at capture for a share-as-is bundle; a
144
- redact-on-export step for already-captured raw bundles is planned (not yet shipped). The
143
+ `policies.redactScreenshots: true` blurs at capture for a share-as-is bundle;
144
+ `humanish export --format bundle --redact-screenshots` blurs a separately verified
145
+ copy of a completed raw bundle without changing the original. The
145
146
  frame sent to the provider is always raw regardless — the model must see the screen to act.
146
147
  - The loopback wall and the synthetic-data stance were the same error: enforcing at
147
148
  capture/runtime (rejecting a public target outright; banning realistic local input) what
@@ -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.83.2` (2026-09-06). 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.84.1` (2026-09-07). 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,42 @@
1
+ # Humanish 0.84.0: share evidence while keeping readable originals
2
+
3
+ `humanish export --format bundle --redact-screenshots` creates a separate
4
+ workspace containing a redacted copy of a completed run. The original screenshots
5
+ remain readable for local adjudication. The copied run keeps the same ID,
6
+ participants, findings, task results, subject pins, settings and cost records.
7
+
8
+ ```bash
9
+ humanish export --run RUN --format bundle --redact-screenshots --out shared-study
10
+ humanish verify --cwd shared-study --run RUN
11
+ humanish feedback draft --cwd shared-study --run RUN
12
+ humanish feedback issue --cwd shared-study --run RUN --repo OWNER/REPO
13
+ ```
14
+
15
+ The exporter verifies frozen source bytes, transforms every PNG, rebuilds the
16
+ Observer and verifies the resulting workspace before publishing it. Its receipt
17
+ records copied, changed and omitted files. Unsupported image or binary formats,
18
+ unsafe paths, unfinished runs, changing source files and existing destinations
19
+ are refused. Operational journals do not give the derivative a resource lease
20
+ or create another study attempt.
21
+
22
+ The existing full-frame blur makes screenshots unsuitable for detailed visual
23
+ adjudication. Keep the original, and review text and findings before sharing.
24
+
25
+ Ordinary `verify` also checks declared actor and partial-trace screenshots and
26
+ feedback candidate evidence. Missing, unsafe or invalid referenced files fail.
27
+ Explicitly raw frames retain `local_only`, including partial traces and a raw
28
+ frame under a conflicting blurred declaration. Empty nonimage feedback files
29
+ remain valid when no other consumer requires content. Missing or unknown
30
+ per-frame redaction metadata keeps existing compatibility behavior; this is
31
+ not a pixel audit or certification of absent metadata.
32
+
33
+ Static Observer renders now display their actual verification grade. HTML
34
+ attachments retain screenshot playback and grid thumbnails; generic artifact
35
+ links retain their containment restrictions.
36
+
37
+ The [workflow receipt](../goals/computer-use-actor/receipts/redacted-evidence-workflow-2026-09-07.md)
38
+ records four real sessions, 67 unchanged original files and 31 transformed frames.
39
+ All four moved workspaces passed published 0.83.2 verification and feedback
40
+ commands with the originals unavailable. Browser inspection covered bundle and
41
+ HTML playback at desktop and mobile sizes. This was an operator rehearsal using
42
+ a known TodoMVC repair; external maintainer adoption remains unproven.
@@ -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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.83.2",
3
+ "version": "0.84.1",
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": [