humanish 0.36.0 → 0.37.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.
@@ -0,0 +1,165 @@
1
+ # Actor Fidelity: whose behavior is this evidence about?
2
+
3
+ Status: research digest + design position. Sources are public papers and open-source
4
+ harnesses; every claim below carries its citation so it can be argued with rather
5
+ than inherited.
6
+
7
+ ## The question
8
+
9
+ A computer-use actor in a study of a consumer web app typed a `javascript:` URL into
10
+ the browser address bar to get past a step. The run finished green.
11
+
12
+ Whether that is a defect depends entirely on a question the harness never asked:
13
+ **who is this study's user?**
14
+
15
+ - If the declared users are **people**, it is a defect — and a costly one. The actor
16
+ routed around the friction the study existed to measure, so a passing run proves
17
+ nothing about the human experience. Worse, it is silent: nothing in the bundle
18
+ distinguishes that run from one where a person clicked through.
19
+ - If the declared users are **agents** — as they are for an agent-facing CLI, API, or
20
+ MCP surface — the same act is faithful. It is the user population behaving normally,
21
+ and the fact that the agent had to reach for that affordance is itself a product
22
+ finding about how legible the surface is to its actual users.
23
+
24
+ The proof roadmap already anticipated this: its strongest evidence class,
25
+ `user-census`, is defined as "the users of the product ARE agents, and the lab runs
26
+ real production harnesses." This page is the layer that makes the distinction
27
+ operable.
28
+
29
+ ## What the evidence says
30
+
31
+ ### Direct URL navigation is a human affordance
32
+
33
+ WebLINX built its action space from 2,337 real human demonstrations; `load(url)`
34
+ appears in 2,324 of them — 99.4%, roughly 1.6 times per session
35
+ ([arXiv 2402.05930](https://arxiv.org/abs/2402.05930)). Treating address-bar
36
+ navigation as non-human would make a human-declared lane *less* faithful, not more.
37
+ The anomalous class is script execution and developer tooling, not URL entry.
38
+ BrowserGym already factors these apart: its `nav` subset is exactly
39
+ `{goto, go_back, go_forward}`, separate from everything else
40
+ ([arXiv 2412.05467](https://arxiv.org/abs/2412.05467)).
41
+
42
+ ### Prose instructions are a weak control for action modality
43
+
44
+ - Tool-restriction constraints in realistic agentic prompts are honored 19.9–27.2% of
45
+ the time (AgentIF).
46
+ - When a constraint conflicts with the task goal, obedience falls to 9.6–45.8%, and
47
+ models usually do not register the conflict ("Control Illusion").
48
+ - Rule-file effects are largely content-independent: random rules tie with curated
49
+ ones, and shuffling changes little — measured specifically on agent skills and
50
+ persona definitions ([arXiv 2604.11088](https://arxiv.org/abs/2604.11088)). A
51
+ modality rule can therefore appear to work while doing nothing.
52
+ - Persona adherence decays over a long trajectory rather than holding
53
+ ([arXiv 2512.12775](https://arxiv.org/abs/2512.12775)).
54
+
55
+ The one large-scale prompt-level modality constraint in the literature —
56
+ Online-Mind2Web instructing agents not to use search — was not trusted by its own
57
+ authors, who published the measured constrained-vs-unconstrained delta (26% vs 31%)
58
+ instead of asserting the instruction took effect
59
+ ([arXiv 2504.01382](https://arxiv.org/abs/2504.01382)). That is the discipline this
60
+ project copies: where a constraint cannot be mechanically enforced, measure what it
61
+ was worth.
62
+
63
+ ### Broad motivational reframes have backfired; narrow countable ones have worked
64
+
65
+ Making realism the actor's stated objective is an appealing fix, and the nearest
66
+ measured attempts went the wrong way. A findings-informed realism persona prompt
67
+ lowered overall simulator fidelity (User-Sim Index 70.9 → 64.6) and worsened outcome
68
+ calibration (0.18 → 0.29): "moving some behaviors closer to humans can move others
69
+ further away" ([arXiv 2603.11245](https://arxiv.org/abs/2603.11245)). Explicitly
70
+ licensing persona-faithful failure fixed the *marginal* rate five-fold but left the
71
+ *conditional* structure nearly unchanged — it taught the simulator to disengage
72
+ uniformly rather than to disengage when a real user would
73
+ ([arXiv 2606.20708](https://arxiv.org/abs/2606.20708)). By contrast, a narrow,
74
+ countable instruction did produce a measured improvement
75
+ ([arXiv 2601.17087](https://arxiv.org/abs/2601.17087)).
76
+
77
+ Two further cautions for prompt design: telling an actor it is being observed and
78
+ scored is a documented behavior-changing cue whose effect grows with model scale
79
+ ([arXiv 2505.17815](https://arxiv.org/abs/2505.17815)), and stating the grading
80
+ criterion to the actor invites optimization of the stated metric. Pre-action
81
+ self-checks are worse than neutral: deliberation before acting degrades constraint
82
+ adherence in most models measured ([arXiv 2505.11423](https://arxiv.org/abs/2505.11423)),
83
+ and chain-of-thought is an unreliable report of what actually drove an action
84
+ ([arXiv 2505.05410](https://arxiv.org/abs/2505.05410)) — an actor that takes a
85
+ shortcut and then narrates a plausible justification for it is the expected output,
86
+ not an edge case.
87
+
88
+ What does hold, in the same literature: periodic re-injection of a short persona
89
+ contract (large, cheap, replicated), and grounding a persona in specifics rather
90
+ than exhorting it to be faithful (interview-grounded personas measurably beat prose
91
+ descriptions).
92
+
93
+ ### Outcome-only scoring cannot see modality
94
+
95
+ WebArena's URL evaluator scores on the final page URL, so a single `goto` to the
96
+ reference URL earns full credit ([arXiv 2307.13854](https://arxiv.org/abs/2307.13854)).
97
+ τ-bench states the general form: a state-based reward is necessary but not
98
+ sufficient, since it cannot see whether policy was followed
99
+ ([arXiv 2406.12045](https://arxiv.org/abs/2406.12045)). And the gradient is real —
100
+ calling site APIs instead of driving the UI roughly doubles WebArena scores
101
+ ([arXiv 2410.16464](https://arxiv.org/abs/2410.16464)). Any harness that scores only
102
+ outcomes should expect actors to find that gradient, and should not be surprised when
103
+ a green run proves nothing.
104
+
105
+ ## The position this project takes
106
+
107
+ **Declare, record, and let the adopter judge.**
108
+
109
+ 1. **Declared population is a property of a persona, not of a lab.** One study program
110
+ can legitimately run agents and people against the same surface; the comparison
111
+ between them is a finding, not a contradiction. Prior art runs both populations
112
+ through one instrument and reports the difference
113
+ ([SusBench](https://arxiv.org/abs/2510.11035); MAS-Bench's GUI/shortcut split,
114
+ [arXiv 2509.06477](https://arxiv.org/abs/2509.06477)).
115
+
116
+ 2. **Record which affordance class each action used.** Recording is the layer that
117
+ makes every other claim checkable, including whether the persona prompt worked at
118
+ all. It is also the only honest answer to a defect whose verdict depends on a
119
+ declaration the harness cannot verify.
120
+
121
+ 3. **Do not bake a verdict.** Whether an affordance invalidates a study is product
122
+ semantics, and product semantics belong to the adopter's scorer
123
+ (`review.scorer.ref`). The harness emits facts; the adopter decides what they mean.
124
+
125
+ 4. **Prompt guidance ships as a nudge whose take-rate is reported, never as the
126
+ mechanism.** The evidence above is what that sentence is standing on.
127
+
128
+ 5. **Fail closed only on harness integrity, never on product semantics** — a lane that
129
+ cannot report what it did is a broken instrument, which is a different thing from
130
+ an actor that behaved unexpectedly.
131
+
132
+ ## What this does not claim
133
+
134
+ Fidelity here is scoped to **affordance and decision** level: which routes an actor
135
+ took, and whether they belong to the declared population. It is not a claim of
136
+ behavioral realism. At the kinematic level — pointer paths, timing, motor noise — the
137
+ gap between agents and people is total and trivially detectable
138
+ ([arXiv 2604.09574](https://arxiv.org/abs/2604.09574)). Any claim beyond the
139
+ affordance/decision level would be dishonest, and this project does not make one.
140
+
141
+ Two further limits worth stating plainly. Restricting script execution and developer
142
+ tooling for *fidelity* reasons has no precedent — where such restrictions exist
143
+ elsewhere, the stated motive is code-execution safety — so this is new ground rather
144
+ than an inherited convention. And nobody has yet measured whether affordance-class
145
+ recording changes what adopters decide; that is the experiment this layer makes
146
+ possible, not a result it can assume.
147
+
148
+ ## Vocabulary
149
+
150
+ Terms are borrowed rather than coined, so results stay comparable with the
151
+ surrounding literature:
152
+
153
+ | Term | Source | Meaning here |
154
+ | --- | --- | --- |
155
+ | action space / action set | WebArena, BrowserGym, OSWorld | the set of actions an actor can express |
156
+ | `nav` subset | BrowserGym | `goto`, `go_back`, `go_forward` — direct navigation, a human affordance |
157
+ | naturalistic actions | AndroidWorld | the human-modality subset, contrasted with exposed function-calling APIs |
158
+ | shortcut action | MAS-Bench | a non-UI route to the same outcome (API, deep link, script) |
159
+ | algorithmic fidelity | Argyle et al., *Out of One, Many* | how well a conditioned model emulates a specific population |
160
+ | Agent Experience (AX) | Biilmann (Netlify) | the experience of a product whose users are agents |
161
+
162
+ Three collisions to avoid: "agent usability testing" already means an agent
163
+ *simulating* a human, which is the opposite of the agent-population case; `cheat()` in
164
+ BrowserGym means the reference solution, not misbehavior; and "reward hacking" refers
165
+ to attacking a grader, which is a different failure from routing around a UI.
@@ -1,6 +1,6 @@
1
1
  # Example: 3 mobile personas share ONE public multiplayer lobby at once
2
2
 
3
- `humanish/labs/cineguessr-3player.yaml` is a worked example of the EXTERNAL-PUBLIC shared-world route
3
+ `humanish/labs/lobby-trivia-3player.yaml` is a worked example of the EXTERNAL-PUBLIC shared-world route
4
4
  (#164 phase 2): three mobile-LAYOUT personas play the SAME multiplayer lobby on a REAL public
5
5
  deployment simultaneously, watched in ONE Observer. Point `subject.appUrl` + `subject.publicTarget` at
6
6
  a public deployment YOU own/operate.
@@ -38,14 +38,14 @@ CSS-viewport rendering is the #221 CDP-device-emulation upgrade.
38
38
  Dry-run (the default, $0 — proves the plumbing + the honesty contract, no sandboxes, no tokens):
39
39
 
40
40
  ```
41
- humanish lab run cineguessr-3player # or: humanish watch cineguessr-3player
41
+ humanish lab run lobby-trivia-3player # or: humanish watch lobby-trivia-3player
42
42
  ```
43
43
 
44
44
  Live (opens 3 real mobile-layout seats against the public app):
45
45
 
46
46
  ```
47
47
  # flip scenario.mode to live in the lab (or override), then:
48
- humanish watch cineguessr-3player --env-file .env.local # OPENAI_API_KEY + E2B_API_KEY
48
+ humanish watch lobby-trivia-3player --env-file .env.local # OPENAI_API_KEY + E2B_API_KEY
49
49
  ```
50
50
 
51
51
  Watch it from a phone (today): serve the run directory's Observer through an authed edge —
@@ -69,7 +69,7 @@ No one run implies adoption, scale, or repeatability.
69
69
 
70
70
  ## Before a live run against a third-party site
71
71
 
72
- The verified cineguessr lobby mechanics (createLobby/joinLobby → `/lobby/CODE`, the 6-char
72
+ The verified lobby-trivia lobby mechanics (createLobby/joinLobby → `/lobby/CODE`, the 6-char
73
73
  `ABCDEFGHJKLMNPQRSTUVWXYZ23456789` alphabet, non-auto-join on a direct visit) are read from current
74
74
  source and could change on the next deploy. The two coupling points to re-verify are the lobby-code
75
75
  regex (`/\/lobby\/([A-Z2-9]{6})(?:$|[/?#])/`, tolerant of a locale prefix and query/hash) and the
@@ -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.36.0` (2026-08-05). The containment boundary introduced in
5
+ Package/source version in this tree: `0.37.0` (2026-08-07). 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
@@ -18,7 +18,7 @@ asserts (byte-stable; a snapshot regression pins it).
18
18
  creates the shared lobby, the orchestrator extracts `/lobby/CODE` from its CDP-observed URL and
19
19
  threads the code into the follower JOIN missions; followers fail closed WITHOUT opening on
20
20
  `HUMANISH_CONCURRENT_SHARED_WORLD_LAB_HANDOFF_TIMEOUT`.
21
- - **3-mobile cineguessr example** (`humanish/labs/cineguessr-3player.yaml` + an init template): 3
21
+ - **3-mobile lobby-trivia example** (`humanish/labs/lobby-trivia-3player.yaml` + an init template): 3
22
22
  mobile-LAYOUT personas play the same multiplayer lobby on a real public app at once. Dry-run $0.
23
23
  - **Honest evidence class.** Attribution stays `shared-world`; every strength claim degrades honestly
24
24
  and is asserted-ABSENT by verify: `subject.state.provenance == external-public` (not seeded);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.36.0",
3
+ "version": "0.37.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": [