humanish 0.112.0 → 0.113.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/CHANGELOG.md +19 -0
- package/README.md +11 -0
- package/TELEMETRY.md +21 -0
- package/dist/actors/codex/restricted-participant-policy.d.ts +21 -1
- package/dist/actors/codex/restricted-participant-policy.js +20 -2
- package/dist/actors/codex/restricted-participant.d.ts +1 -1
- package/dist/actors/codex/restricted-participant.js +2 -1
- package/dist/actors/computer-use/loop/debrief.d.ts +12 -4
- package/dist/actors/computer-use/loop/debrief.js +57 -20
- package/dist/actors/computer-use/loop/ending.d.ts +5 -2
- package/dist/actors/computer-use/loop/impressions.d.ts +14 -0
- package/dist/actors/computer-use/loop/impressions.js +40 -0
- package/dist/actors/computer-use/loop/session.d.ts +3 -1
- package/dist/actors/computer-use/loop/session.js +2 -0
- package/dist/actors/computer-use/loop/trace.js +2 -0
- package/dist/actors/computer-use/loop/types.d.ts +8 -1
- package/dist/actors/computer-use/loop.d.ts +2 -1
- package/dist/actors/computer-use/loop.js +15 -3
- package/dist/actors/computer-use/openai-conversation.d.ts +9 -4
- package/dist/actors/computer-use/openai-conversation.js +53 -24
- package/dist/actors/computer-use/openai-provider.js +18 -12
- package/dist/actors/contract.d.ts +43 -3
- package/dist/actors/contract.js +13 -0
- package/dist/analysis/evidence-sources.d.ts +3 -1
- package/dist/analysis/evidence-sources.js +10 -1
- package/dist/analysis/evidence.js +2 -2
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +3 -1
- package/dist/cli/commands/runs.js +33 -10
- package/dist/cli/commands/setup.js +95 -6
- package/dist/cli/commands/study-format.js +7 -4
- package/dist/cli/commands/study.js +1 -1
- package/dist/cli/commands/tui.js +1 -1
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.js +18 -0
- package/dist/cli/io.d.ts +2 -0
- package/dist/cli/program.js +35 -1
- package/dist/cli/secret-prompt.d.ts +5 -1
- package/dist/cli/secret-prompt.js +6 -2
- package/dist/cli/update-check-worker.d.ts +1 -0
- package/dist/cli/update-check-worker.js +5 -0
- package/dist/cli/update-check.d.ts +46 -0
- package/dist/cli/update-check.js +203 -0
- package/dist/feedback/draft.js +18 -0
- package/dist/keys/key-resolution.js +2 -0
- package/dist/keys/key-status.d.ts +37 -0
- package/dist/keys/key-status.js +68 -0
- package/dist/observer-app.html +4 -4
- package/dist/routes/computer-use/local-vm.js +9 -2
- package/dist/routes/computer-use/participant-desktop.d.ts +6 -0
- package/dist/routes/computer-use/participant-execution.js +9 -1
- package/dist/routes/computer-use/rerun-selection.js +23 -21
- package/dist/routes/computer-use/result.js +3 -2
- package/dist/routes/computer-use/self-report.js +7 -1
- package/dist/routes/computer-use/setup.js +14 -0
- package/dist/routes/computer-use/types.d.ts +4 -1
- package/dist/routes/shared-world/bundle-records.js +8 -7
- package/dist/routes/shared-world/bundle.js +1 -1
- package/dist/run/detail.js +4 -4
- package/dist/run/participant-caption.d.ts +2 -1
- package/dist/run/participant-caption.js +11 -1
- package/dist/run/participant-records.d.ts +3 -1
- package/dist/run/participant-records.js +6 -0
- package/dist/run-study.js +17 -1
- package/dist/study/discover.js +6 -1
- package/dist/study/doctor.d.ts +2 -0
- package/dist/study/doctor.js +45 -7
- package/dist/study/init-templates.js +10 -5
- package/dist/study/plan.js +3 -2
- package/dist/study/preflight-result.d.ts +1 -0
- package/dist/study/preflight-result.js +1 -1
- package/dist/study/preflight.d.ts +2 -0
- package/dist/study/preflight.js +54 -14
- package/dist/study/warnings.d.ts +5 -0
- package/dist/study/warnings.js +79 -2
- package/dist/substrates/local/capacity.d.ts +75 -0
- package/dist/substrates/local/capacity.js +143 -0
- package/dist/substrates/local/firecracker-desktop.d.ts +8 -0
- package/dist/substrates/local/firecracker-desktop.js +34 -3
- package/dist/substrates/local/runtime-host.d.ts +16 -3
- package/dist/substrates/local/runtime-host.js +49 -4
- package/dist/substrates/local/runtime.d.ts +10 -0
- package/dist/substrates/local/runtime.js +44 -5
- package/dist/tui-app.js +58 -58
- package/docs/architecture/actor-contract.md +20 -6
- package/docs/contracts/feedback.md +8 -1
- package/docs/contracts/schemas.md +57 -34
- package/docs/contracts/study-analysis.md +15 -0
- package/package.json +1 -1
- package/skills/humanish/SKILL.md +21 -10
|
@@ -350,22 +350,36 @@ this paragraph is the record of that decision.
|
|
|
350
350
|
|
|
351
351
|
`ComputerUseProvider.debrief` is an optional read-only request after a structured
|
|
352
352
|
`stopWhen` or dwell stop. It returns a `ComputerUseTurn` with `closingReport` containing
|
|
353
|
-
`summary` and `
|
|
353
|
+
`summary`, `frictionReports` and `impressions`; an empty friction or impressions list is valid,
|
|
354
|
+
and a report without `impressions` (an older provider) is still accepted. The loop rejects
|
|
354
355
|
actions, pending safety checks, and invalid report shapes. It redacts accepted
|
|
355
356
|
reports, records them in `ActorTrace.debrief`, and projects one readable message
|
|
356
|
-
without invoking action or communication callbacks.
|
|
357
|
+
without invoking action or communication callbacks. Each impression becomes its own message
|
|
358
|
+
and goes to `ActorTrace.impressions`; a session without them records why in the same field.
|
|
359
|
+
A turn that ends the session itself may carry `closingReport` too, and the loop keeps its
|
|
360
|
+
impressions the same way without a second request.
|
|
361
|
+
|
|
362
|
+
`ComputerUseProvider.requestImpressions` is the optional request after the participant ended
|
|
363
|
+
the session itself without impressions. It asks for impressions only, returns them as
|
|
364
|
+
`impressions` on the turn, and follows the debrief's rules and guards. The loop records it as
|
|
365
|
+
`ActorTrace.debrief` with `trigger: "participant_end"` and no report, so the participant's
|
|
366
|
+
reason, outcome and friction come from its final message as before. A failed, timed-out or
|
|
367
|
+
cut-off request leaves `ActorTrace.impressions` as `not_collected` with the reason.
|
|
357
368
|
|
|
358
369
|
This request uses the final observation and retained provider history. It does
|
|
359
370
|
not expose the hidden stop criterion or change the original task outcome. It is
|
|
360
|
-
skipped before any participant turn, after natural completion
|
|
361
|
-
support, or without remaining time and known budget. An attempted request's
|
|
371
|
+
skipped before any participant turn, after natural completion (apart from the impressions-only
|
|
372
|
+
request), without provider support, or without remaining time and known budget. An attempted request's
|
|
362
373
|
unreported usage remains an unknown cost line. `counts.debriefCalls` is separate
|
|
363
374
|
from interaction turns, and reported usage contributes to aggregate cost.
|
|
364
375
|
|
|
365
376
|
The OpenAI implementation makes one request with tools disabled and structured
|
|
366
|
-
output; no HTTP or policy retries.
|
|
377
|
+
output; no HTTP or policy retries. Its output limit is 3072 tokens, or the declared
|
|
378
|
+
`maxOutputTokens` when lower. Stateless/ZDR mode does not offer retrospective
|
|
367
379
|
reporting: its client-carried conversation summarizes its oldest turns past a token
|
|
368
|
-
budget, so it may not hold the whole session a retrospective report needs.
|
|
380
|
+
budget, so it may not hold the whole session a retrospective report needs. It does offer
|
|
381
|
+
the impressions-only request, which reads the carried conversation: its newest
|
|
382
|
+
exchanges whole and earlier turns as a text note. The
|
|
369
383
|
[paired live receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/structured-closing-report-2026-09-05.md)
|
|
370
384
|
records both report recovery and control failures in the separate legacy parser.
|
|
371
385
|
|
|
@@ -66,7 +66,9 @@ Listing does not create a draft or check public-sharing eligibility.
|
|
|
66
66
|
|
|
67
67
|
For completed computer-use and shared-world sessions, participant-reported
|
|
68
68
|
friction comes from the redacted closing report, a completed debrief's
|
|
69
|
-
`frictionReports`, and observed-report clauses in earlier messages.
|
|
69
|
+
`frictionReports`, and observed-report clauses in earlier messages. The
|
|
70
|
+
participant's closing impressions (`ActorTrace.impressions`) are opinions about
|
|
71
|
+
the product and never count as friction.
|
|
70
72
|
Matching `stopWhen` or ending a dwell window does not discard an earlier
|
|
71
73
|
report or change the successful completion verdict. Exact repeated reports
|
|
72
74
|
appear once in the participant's candidate. Harness notices, reasoning, and observed
|
|
@@ -84,6 +86,11 @@ was not repeated in the message trace.
|
|
|
84
86
|
Builds structured feedback from the first usable run candidate, or the candidate
|
|
85
87
|
selected with `--candidate`. With no candidate, a live run produces a summary of
|
|
86
88
|
its recorded review; that fallback does not add a finding to the candidate list.
|
|
89
|
+
With `--analysis` and `--finding`, the draft is built from that analysis finding
|
|
90
|
+
instead. When the finding's observations cite a participant's closing impression,
|
|
91
|
+
`actual` quotes it after the observations as
|
|
92
|
+
`Participant <id> said at the end (<kind>): <text>`. An impression is quoted only
|
|
93
|
+
when the cited evidence entry carries its text whole; uncited impressions stay out.
|
|
87
94
|
A dry run tests no product behavior, so `draft`, `verify`, `issue` and
|
|
88
95
|
`issue-url` refuse it with `HUMANISH_FEEDBACK_REQUIRES_LIVE_RUN`. All drafts
|
|
89
96
|
require a verified `share_ready` live run and are written under the run bundle,
|
|
@@ -24,38 +24,38 @@ workflow without leaking private upstream truth into core.
|
|
|
24
24
|
|
|
25
25
|
## Contract Index
|
|
26
26
|
|
|
27
|
-
| Contract | Schema
|
|
28
|
-
| --------------------------------- |
|
|
29
|
-
| Run bundle | `humanish.run-bundle.v1`
|
|
30
|
-
| Adapter | `humanish.adapter.v1`
|
|
31
|
-
| Study file | `humanish.study.v3`
|
|
32
|
-
| Persona | `humanish.persona.v1`
|
|
33
|
-
| Scenario | `humanish.scenario.v1`
|
|
34
|
-
| Actor trace | `humanish.actor-trace.v1`
|
|
35
|
-
| Substrate | reserved (never shipped)
|
|
36
|
-
| Evidence stream | reserved (streams live inside the run bundle)
|
|
37
|
-
| Review | `humanish.review.v1`
|
|
38
|
-
| Study analysis | `humanish.study-analysis.v1` (prompt `study-evidence-7` adds `findings[].headline`, `findings[].experience` and `designFindings[]`; older artifacts omit them)
|
|
39
|
-
| Study analysis correction | `humanish.study-analysis-correction.v1`
|
|
40
|
-
| Analysis findings view | `humanish.analysis-findings.v1` (`review --json` field `analysis`; read-only projection of the selected analysis)
|
|
41
|
-
| Analysis execution receipt | `humanish.analysis-execution.v1`
|
|
42
|
-
| Analysis execution start | `humanish.analysis-execution-start.v1`
|
|
43
|
-
| Verification | `humanish.verify-result.v1`
|
|
44
|
-
| Policy | `humanish.policy.v1` (fixture-only; not engine-validated)
|
|
45
|
-
| Feedback | `humanish.feedback.v1`
|
|
46
|
-
| Terminal cost ledger | `humanish.terminal-cost-ledger.v1`
|
|
47
|
-
| Terminal no-spend proof | `humanish.terminal-no-spend-proof.v1`
|
|
48
|
-
| Pricing (operator-editable rates) | `humanish.pricing.v1` (`src/run/pricing.ts`; dated per-model + E2B desktop rates)
|
|
49
|
-
| Run cost summary | `humanish.run-cost-summary.v1` (additive `RunBundle.cost`; estimate, never a charge)
|
|
50
|
-
| Estimated actor cost | `humanish.actor-estimated-cost.v1` (additive `ActorTrace.estimatedCost`)
|
|
51
|
-
| Model settings | `humanish.model-settings.v1` (additive `ActorTrace.modelSettings`; the reasoning effort the request carried)
|
|
52
|
-
| Affordance use | `humanish.affordance-use.v1` (additive `ActorTrace.affordanceUse`; per-class counts of the routes an actor took)
|
|
53
|
-
| Adapter score | `humanish.adapter-score.v1` (`RunBundle.adapterScore`; namespaced; route-specific acceptance semantics)
|
|
54
|
-
| Adapter artifact | `humanish.adapter-artifact.v1` (`RunBundle.adapterArtifacts[]`; namespaced; local relative proof references)
|
|
55
|
-
| Shared-world evidence | `humanish.shared-world.v1` (additive `RunBundle.sharedWorld` + `RunBundle.attributionClass`; `topologyMode: sequential \| concurrent`)
|
|
56
|
-
| Comms thread | `humanish.comms-thread.v1` (off-app email/SMS the app sent, captured; a `kind: log` run-dir artifact of digests only: from/to/subject/link digests + one OTP count, never raw)
|
|
57
|
-
| Serve result | `humanish.serve-result.v1` (`src/observer/serve.ts` is authoritative)
|
|
58
|
-
| Serve control plane | reserved (`/_humanish/api/*` answers `501` `HUMANISH_SERVE_CONTROL_PLANE_DISABLED` in v1)
|
|
27
|
+
| Contract | Schema | Public-safe fixture |
|
|
28
|
+
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
29
|
+
| Run bundle | `humanish.run-bundle.v1` | `synthetic-run-bundle` |
|
|
30
|
+
| Adapter | `humanish.adapter.v1` | `synthetic-cli-adapter` |
|
|
31
|
+
| Study file | `humanish.study.v3` | `first-run` |
|
|
32
|
+
| Persona | `humanish.persona.v1` | `synthetic-maintainer` |
|
|
33
|
+
| Scenario | `humanish.scenario.v1` | `first-run-smoke` |
|
|
34
|
+
| Actor trace | `humanish.actor-trace.v1` | `synthetic-actor-trace` |
|
|
35
|
+
| Substrate | reserved (never shipped) | none |
|
|
36
|
+
| Evidence stream | reserved (streams live inside the run bundle) | see [`run-bundle.md`](run-bundle.md) |
|
|
37
|
+
| Review | `humanish.review.v1` | `contract-proof-review` |
|
|
38
|
+
| Study analysis | `humanish.study-analysis.v1` (prompt `study-evidence-7` adds `findings[].headline`, `findings[].experience` and `designFindings[]`; older artifacts omit them; `study-evidence-8` adds participant impressions to the instructions, with no field change) | see [study analysis](study-analysis.md) and synthetic analysis fixtures in `tests/` |
|
|
39
|
+
| Study analysis correction | `humanish.study-analysis-correction.v1` | see [study analysis](study-analysis.md#human-review-and-sharing) |
|
|
40
|
+
| Analysis findings view | `humanish.analysis-findings.v1` (`review --json` field `analysis`; read-only projection of the selected analysis) | see [study analysis](study-analysis.md#reading-findings) |
|
|
41
|
+
| Analysis execution receipt | `humanish.analysis-execution.v1` | see [study analysis](study-analysis.md#durable-records) |
|
|
42
|
+
| Analysis execution start | `humanish.analysis-execution-start.v1` | see [study analysis](study-analysis.md#durable-records) |
|
|
43
|
+
| Verification | `humanish.verify-result.v1` | `five-check-verify` |
|
|
44
|
+
| Policy | `humanish.policy.v1` (fixture-only; not engine-validated) | `public-safety-policy` |
|
|
45
|
+
| Feedback | `humanish.feedback.v1` | `public-safe-feedback` |
|
|
46
|
+
| Terminal cost ledger | `humanish.terminal-cost-ledger.v1` | see Terminal Cost Ledger below |
|
|
47
|
+
| Terminal no-spend proof | `humanish.terminal-no-spend-proof.v1` | see Terminal Cost Ledger below |
|
|
48
|
+
| Pricing (operator-editable rates) | `humanish.pricing.v1` (`src/run/pricing.ts`; dated per-model + E2B desktop rates) | see Run Cost Summary And Estimated Actor Cost below |
|
|
49
|
+
| Run cost summary | `humanish.run-cost-summary.v1` (additive `RunBundle.cost`; estimate, never a charge) | see Run Cost Summary And Estimated Actor Cost below |
|
|
50
|
+
| Estimated actor cost | `humanish.actor-estimated-cost.v1` (additive `ActorTrace.estimatedCost`) | see Run Cost Summary And Estimated Actor Cost below |
|
|
51
|
+
| Model settings | `humanish.model-settings.v1` (additive `ActorTrace.modelSettings`; the reasoning effort the request carried) | see Actor Trace below |
|
|
52
|
+
| Affordance use | `humanish.affordance-use.v1` (additive `ActorTrace.affordanceUse`; per-class counts of the routes an actor took) | see Affordance Use below |
|
|
53
|
+
| Adapter score | `humanish.adapter-score.v1` (`RunBundle.adapterScore`; namespaced; route-specific acceptance semantics) | see Product-Adapter Extension Seam below |
|
|
54
|
+
| Adapter artifact | `humanish.adapter-artifact.v1` (`RunBundle.adapterArtifacts[]`; namespaced; local relative proof references) | see Product-Adapter Extension Seam below |
|
|
55
|
+
| Shared-world evidence | `humanish.shared-world.v1` (additive `RunBundle.sharedWorld` + `RunBundle.attributionClass`; `topologyMode: sequential \| concurrent`) | see Shared-World Evidence below |
|
|
56
|
+
| Comms thread | `humanish.comms-thread.v1` (off-app email/SMS the app sent, captured; a `kind: log` run-dir artifact of digests only: from/to/subject/link digests + one OTP count, never raw) | see `comms` under Study File |
|
|
57
|
+
| Serve result | `humanish.serve-result.v1` (`src/observer/serve.ts` is authoritative) | none (command result envelope; see Serve Result below) |
|
|
58
|
+
| Serve control plane | reserved (`/_humanish/api/*` answers `501` `HUMANISH_SERVE_CONTROL_PLANE_DISABLED` in v1) | none |
|
|
59
59
|
|
|
60
60
|
## Study File
|
|
61
61
|
|
|
@@ -970,8 +970,9 @@ Core-owned fields:
|
|
|
970
970
|
- optional `modelSettings.maxOutputTokens`: the declared positive integer
|
|
971
971
|
`actor.maxOutputTokens`, passed to every first-party OpenAI CUA response
|
|
972
972
|
request, including reasoning output. Absent when undeclared. The first request
|
|
973
|
-
of a session
|
|
974
|
-
|
|
973
|
+
of a session uses `min(maxOutputTokens, 1024)`, or 1024 when undeclared, and
|
|
974
|
+
closing requests use `min(maxOutputTokens, 3072)`, or 3072 when undeclared; the
|
|
975
|
+
first request also carries the opening screenshot as an
|
|
975
976
|
`input_image` after the instructions. Unsupported routes,
|
|
976
977
|
custom provider/session hooks, and per-participant overrides fail before allocation.
|
|
977
978
|
This is an output-token limit, not an input-token, request-count or billing cap.
|
|
@@ -1014,6 +1015,28 @@ Core-owned fields:
|
|
|
1014
1015
|
providers and on earlier bundles
|
|
1015
1016
|
- optional `affordanceUse` (`humanish.affordance-use.v1`): which kind of route this
|
|
1016
1017
|
actor took (see Affordance Use below)
|
|
1018
|
+
- optional `impressions`: what a computer-use participant said about the product
|
|
1019
|
+
at the end of its session. `status: collected` carries `items[]`, each a
|
|
1020
|
+
`kind` (`unclear`, `unfinished`, `untrustworthy`, `liked`, `missing`,
|
|
1021
|
+
`unlike_my_work`), a redacted first-person `text` of at most 500 characters
|
|
1022
|
+
and the `messageId` of the trace `message` that quotes it as
|
|
1023
|
+
`Impression (<kind>): <text>`. They are not counted in `counts.messages`. Up
|
|
1024
|
+
to six come from the closing account: a completed debrief's report, the
|
|
1025
|
+
participant's own final account when its provider writes a structured one
|
|
1026
|
+
(the Codex participant), or, when the participant ended the session itself
|
|
1027
|
+
without them, one impressions-only request (OpenAI computer-use, threaded or
|
|
1028
|
+
`explicit_context`). That request is recorded as `debrief` with `trigger:
|
|
1029
|
+
participant_end` and never has a `report` or `messageId`; it leaves the
|
|
1030
|
+
participant's `reason`, outcome and friction as they were. An empty `items`
|
|
1031
|
+
list means the participant named none. `status: not_collected` carries a
|
|
1032
|
+
`reason`: the closing report or impressions request was skipped or failed
|
|
1033
|
+
(including a reply cut off by the output limit), the participant ended the
|
|
1034
|
+
session without a structured closing account and its provider cannot ask for
|
|
1035
|
+
impressions (the Claude local agent), the closing account had no
|
|
1036
|
+
impressions, or the session stopped before a closing account. Every
|
|
1037
|
+
computer-use loop trace records one; absent on other routes and on earlier
|
|
1038
|
+
bundles. `debrief.report` keeps only `summary` and `frictionReports`.
|
|
1039
|
+
Impression messages do not count as participant-reported friction
|
|
1017
1040
|
- optional `estimatedCost` (`humanish.actor-estimated-cost.v1`): a token-derived
|
|
1018
1041
|
cost estimate for this participant (see Run Cost Summary And Estimated Actor Cost).
|
|
1019
1042
|
It is deliberately a different field from `tokenUsage.costUsd`: a bare
|
|
@@ -266,6 +266,21 @@ a finding opens. Exposure and remaining unique limits are one disclosure away;
|
|
|
266
266
|
observation details retain each original claim and its specific limitation.
|
|
267
267
|
This presentation does not rewrite the saved analysis or reviewer corrections.
|
|
268
268
|
|
|
269
|
+
## Participant impressions
|
|
270
|
+
|
|
271
|
+
A computer-use participant's closing impressions (`ActorTrace.impressions`) reach the packet as
|
|
272
|
+
ordinary `message` entries of that participant's stream, one per impression, with text
|
|
273
|
+
`Impression (<kind>): <text>`. They are quote-eligible and attributed by `streamId`, so feedback,
|
|
274
|
+
participant_statement observations and design findings can cite them under the existing rules.
|
|
275
|
+
Selection admits them right after the participant's last entry, ahead of the rest of its
|
|
276
|
+
session. The evidence mapping and `captureVersion` are unchanged.
|
|
277
|
+
|
|
278
|
+
The `study-evidence-8` prompt adds one paragraph: impressions are the participant's own opinions,
|
|
279
|
+
used as participant statements, and an `unlike my work` impression together with a capture of
|
|
280
|
+
that screen is a strong design finding. Validation is unchanged. A design finding still needs at
|
|
281
|
+
least one cited capture, so an impression plus the capture of its screen makes a design finding,
|
|
282
|
+
and an impression alone supports only a finding about what the participant said.
|
|
283
|
+
|
|
269
284
|
## Durable records
|
|
270
285
|
|
|
271
286
|
The frozen `humanish.observer-data.v1` schema is unchanged. A companion
|
package/package.json
CHANGED
package/skills/humanish/SKILL.md
CHANGED
|
@@ -190,16 +190,6 @@ Legacy profiles without it retain medium defaults for missing patience and
|
|
|
190
190
|
technical confidence. Avoid contradictory prose and traits; inspect the compiled
|
|
191
191
|
brief with `humanish study show <study> --json` before running.
|
|
192
192
|
|
|
193
|
-
For an autonomous participant study, use a computer-use/local-agent study and write
|
|
194
|
-
its `mission` as a believable situation and desired outcome. Supply fixture facts
|
|
195
|
-
needed to act, but do not supply selectors, click sequences, hidden success rules,
|
|
196
|
-
expected defects or recovery tricks. For example: “Saturday's event needs two
|
|
197
|
-
setup volunteers and one cleanup volunteer. See whether this app helps you
|
|
198
|
-
organize the event and keep people informed.” Do not instruct a participant to
|
|
199
|
-
find a specific UI control merely to make the study succeed. Allow discovery,
|
|
200
|
-
recovery and stopping appropriate to the participant. Keep researcher criteria in
|
|
201
|
-
`tasks[].success`, separate from participant-facing `tasks[].goal`.
|
|
202
|
-
|
|
203
193
|
Scripted regression checks are a different use of scenarios. When the requested
|
|
204
194
|
work is deterministic verification of a known path, a `browser.steps` manifest
|
|
205
195
|
can drive it with explicit selectors and assertions. It does not establish
|
|
@@ -232,6 +222,27 @@ tokens into scenario files.
|
|
|
232
222
|
|
|
233
223
|
## Authoring Studies
|
|
234
224
|
|
|
225
|
+
For an autonomous participant study, write `mission`, participant `instruction`
|
|
226
|
+
and `tasks[].goal` as a believable situation and desired outcome. Supply fixture
|
|
227
|
+
facts needed to act. Leave discovery, recovery and stopping to the participant.
|
|
228
|
+
Keep researcher criteria in `tasks[].success`.
|
|
229
|
+
|
|
230
|
+
| Bad: scripts the controls | Good: gives a situation |
|
|
231
|
+
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
232
|
+
| Click "New event", type a title into the field, then press "Save" and open "Settings". | Saturday's event needs two setup volunteers and one cleanup volunteer. See whether this app helps you organize the event and keep people informed. |
|
|
233
|
+
|
|
234
|
+
`humanish study check` and `humanish run` warn about step lists, chains of UI
|
|
235
|
+
actions, quoted control labels, CSS selectors and URLs beyond the subject's entry
|
|
236
|
+
point. They quote up to three matched lines and suggest a situation-style mission.
|
|
237
|
+
The checks apply to computer-use and shared-world studies; scripted-browser and
|
|
238
|
+
terminal studies and `tasks[].success` are excluded. These warnings never refuse
|
|
239
|
+
a run, and the run records them in its bundle.
|
|
240
|
+
|
|
241
|
+
Give each participant a persona with a short, fictional `background` describing
|
|
242
|
+
their relevant experience and situation. A missing persona or background also
|
|
243
|
+
warns. Use `humanish study show <study> --json` to see what the participant receives.
|
|
244
|
+
Do not supply hidden success rules, expected defects or recovery tricks.
|
|
245
|
+
|
|
235
246
|
Write reusable studies as `.yaml` study files (`humanish.study.v3`):
|
|
236
247
|
|
|
237
248
|
```yaml
|