humanish 0.55.0 → 0.56.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.
@@ -90,3 +90,20 @@ export declare function nodeSupportsTui(versionString?: string): boolean;
90
90
  * readiness row that reports it can never look in different places.
91
91
  */
92
92
  export declare function tuiBundleUrl(baseUrl: string): URL;
93
+ /**
94
+ * What `doctor` says about the stakeholder surface — a pure function of the machine's state and,
95
+ * crucially, of WHO IS READING.
96
+ *
97
+ * A real first-contact study (labs/first-contact.yaml) is why the reader matters. An autonomous
98
+ * agent evaluating humanish read "`humanish tui` is available in an interactive terminal",
99
+ * correctly concluded it was not in one, and dropped it — then wrote a report FOR A HUMAN that
100
+ * never mentioned the human surface at all. Discovery worked and handoff did not. A capability
101
+ * described to a reader who cannot use it has to be phrased as something to PASS ON, or it reads
102
+ * as "not for you" and dies in the transcript.
103
+ */
104
+ export declare function terminalSurfaceMessage(state: {
105
+ supported: boolean;
106
+ bundlePresent: boolean;
107
+ interactive: boolean;
108
+ nodeVersion: string;
109
+ }): string;
@@ -29,4 +29,26 @@ export function nodeSupportsTui(versionString = process.version) {
29
29
  export function tuiBundleUrl(baseUrl) {
30
30
  return new URL("./tui-app.js", baseUrl);
31
31
  }
32
+ /**
33
+ * What `doctor` says about the stakeholder surface — a pure function of the machine's state and,
34
+ * crucially, of WHO IS READING.
35
+ *
36
+ * A real first-contact study (labs/first-contact.yaml) is why the reader matters. An autonomous
37
+ * agent evaluating humanish read "`humanish tui` is available in an interactive terminal",
38
+ * correctly concluded it was not in one, and dropped it — then wrote a report FOR A HUMAN that
39
+ * never mentioned the human surface at all. Discovery worked and handoff did not. A capability
40
+ * described to a reader who cannot use it has to be phrased as something to PASS ON, or it reads
41
+ * as "not for you" and dies in the transcript.
42
+ */
43
+ export function terminalSurfaceMessage(state) {
44
+ if (!state.supported) {
45
+ return `\`humanish tui\` needs Node ${TUI_MIN_NODE_MAJOR}+ (this is ${state.nodeVersion}); every other command works here`;
46
+ }
47
+ if (!state.bundlePresent) {
48
+ return "`humanish tui` bundle is not built in this checkout — run `pnpm build` (installed packages ship it prebuilt)";
49
+ }
50
+ return state.interactive
51
+ ? "`humanish tui` opens the interactive surface for browsing labs and runs"
52
+ : "`humanish tui` is the interactive surface a PERSON uses to watch and start runs here — this shell is not a terminal, so pass it on to whoever is";
53
+ }
32
54
  //# sourceMappingURL=tui-contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui-contract.js","sourceRoot":"","sources":["../src/tui-contract.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,6FAA6F;AAC7F,mGAAmG;AACnG,+EAA+E;AAC/E,EAAE;AACF,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,mGAAmG;AACnG,6DAA6D;AAC7D,EAAE;AACF,mGAAmG;AACnG,mBAAmB;AAwFnB,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,gBAAwB,OAAO,CAAC,OAAO;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,kBAAkB,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"tui-contract.js","sourceRoot":"","sources":["../src/tui-contract.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,6FAA6F;AAC7F,mGAAmG;AACnG,+EAA+E;AAC/E,EAAE;AACF,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,mGAAmG;AACnG,6DAA6D;AAC7D,EAAE;AACF,mGAAmG;AACnG,mBAAmB;AAwFnB,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,gBAAwB,OAAO,CAAC,OAAO;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,kBAAkB,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAKtC;IACC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,+BAA+B,kBAAkB,cAAc,KAAK,CAAC,WAAW,mCAAmC,CAAC;IAC7H,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,8GAA8G,CAAC;IACxH,CAAC;IACD,OAAO,KAAK,CAAC,WAAW;QACtB,CAAC,CAAC,yEAAyE;QAC3E,CAAC,CAAC,kJAAkJ,CAAC;AACzJ,CAAC"}
@@ -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.55.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.56.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.
@@ -749,9 +749,10 @@ Core-owned fields:
749
749
  value is what produced the trace, so reporting it is honest where reporting
750
750
  "unset" would not be. Absent when a provider declares no settings and on every
751
751
  pre-existing bundle; tolerated by verify. It exists because effort was
752
- unreachable from a lab, which made every run take the default silently, and a
753
- trace that cannot say what effort produced it cannot be compared with one that
754
- can
752
+ unreachable from a lab, which made every run take the default silently. Effort
753
+ is part of WHO the participant was rather than of how the instrument was tuned
754
+ (docs/principles/actor-fidelity.md), so a trace without it is a result missing
755
+ half its sample description
755
756
  - optional `affordanceUse` (`humanish.affordance-use.v1`): which KIND of route this
756
757
  actor took (see Affordance Use below)
757
758
  - optional `estimatedCost` (`humanish.actor-estimated-cost.v1`): a token-derived
@@ -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.55.0`)
32
+ ## Current Program Truth (source `0.56.0`)
33
33
 
34
34
  The package source and repository implementation in this tree agree on these
35
35
  points:
@@ -46,7 +46,7 @@ The immutable 2026-06-10 proof-roadmap packet is paired with a
46
46
  | Public proof | A legible four-persona Observer hero from a verified real public-application study (commit-pinned drawDB) shipped in the npm payload (`0.16.0`) | Coverage beyond a single studied subject; the stratified breadth panel remains unbuilt |
47
47
  | OSS meta-lab | Dry-run contract and separate disposable smoke harness | Live meta-lab execution; disabled until repository instructions and actor credentials have an isolated boundary |
48
48
  | Observer serving | `watch`/`observe` loopback servers plus `serve` — the run-library surface with loopback default, capability-link exposure, `share_ready`-gated open mode, and optional operator-run tunnel; streams never served remotely | A remote live-stream (`--live-streams`) design; a persistent capability-link store |
49
- | Stakeholder terminal surface | `humanish tui` (`0.50.0`, redesigned to the reviewed spec in `0.51.0`): labs -> lab -> run, arrow-key navigation, and starting a dry or live run from the lab screen. The run is DETACHED and outlives the terminal — live-proven by killing the terminal 42s into a real run that then ran on for ~3.5 minutes and finished `pass` at $0.639751. The run screen leads with the participant and their recorded thinking, live-proven mid-flight against a real computer-use run. Ships as one bundled file loaded on demand; refuses a non-interactive stdin/stdout naming the JSON commands instead. `0.51.0` builds the reviewed rev-8 design: wordmark and project context, content capped at 96 columns, live rows naming the PARTICIPANT and their elapsed clock, spinners and verdict glyphs, breadcrumbs, the lab's subject/model/caps/keys line, and one Start with a dry-run/live toggle. `0.52.0` completes the reviewed screen set: the run outcome card (denominator first, the participant's closing words, then Open in Observer / Run again), the interrupted card with Reclaim — live-proven by killing a real run and stopping its orphaned sandbox — and All runs, the cross-lab peer where participants lead and one thought line follows the cursor. `0.53.0` gives it the reviewed palette rather than the terminal's theme: exact hex on a truecolor terminal, downsampled where not, and never colour alone. `0.54.0` closes the last two gaps: stopping a running run (armed, signals the process GROUP, and says plainly that sandboxes are separate), and pricing a run WHILE it runs — the running usage now travels with the trace into the mid-run flush | Cancelling a run from the surface; per-user persisted config (#470); export (#471); aggregate stats (#472); agent-authored labs (#473); a reusable persona panel (#474) |
49
+ | Stakeholder terminal surface | `humanish tui` (`0.50.0`, redesigned to the reviewed spec in `0.51.0`, reworked again in `0.56.0` from stakeholder feedback: two explicit start rows instead of a hidden mode toggle, a description line so a list of studies says what they are, `?` keys, and ←/→ back to meaning back and open): labs -> lab -> run, arrow-key navigation, and starting a dry or live run from the lab screen. The run is DETACHED and outlives the terminal — live-proven by killing the terminal 42s into a real run that then ran on for ~3.5 minutes and finished `pass` at $0.639751. The run screen leads with the participant and their recorded thinking, live-proven mid-flight against a real computer-use run. Ships as one bundled file loaded on demand; refuses a non-interactive stdin/stdout naming the JSON commands instead. `0.51.0` builds the reviewed rev-8 design: wordmark and project context, content capped at 96 columns, live rows naming the PARTICIPANT and their elapsed clock, spinners and verdict glyphs, breadcrumbs, the lab's subject/model/caps/keys line, and one Start with a dry-run/live toggle. `0.52.0` completes the reviewed screen set: the run outcome card (denominator first, the participant's closing words, then Open in Observer / Run again), the interrupted card with Reclaim — live-proven by killing a real run and stopping its orphaned sandbox — and All runs, the cross-lab peer where participants lead and one thought line follows the cursor. `0.53.0` gives it the reviewed palette rather than the terminal's theme: exact hex on a truecolor terminal, downsampled where not, and never colour alone. `0.54.0` closes the last two gaps: stopping a running run (armed, signals the process GROUP, and says plainly that sandboxes are separate), and pricing a run WHILE it runs — the running usage now travels with the trace into the mid-run flush | Cancelling a run from the surface; per-user persisted config (#470); export (#471); aggregate stats (#472); agent-authored labs (#473); a reusable persona panel (#474) |
50
50
  | Off-app comms | Vendor-neutral in-sandbox email/SMS catch, a minimal persona inbox surface, and digest-only `humanish.comms-thread.v1` evidence; wired into the computer-use and shared-world routes over both HTTP and SMTP; live-proven end to end on 2026-08-08 — a persona signed up for a public app, read the emailed link in its inbox, and reached the signed-in product (`docs/goals/email-gated-signup/receipts/signup-verify-live-2026-08-08.md`); the adopter-hosted / app-url ingress plane is wired on the CUA and concurrent external-public routes (#387/#380, 2026-08-11) | Real-provider delivery; a live adopter-hosted receipt |
51
51
 
52
52
  Capability proof and adopter replacement are different gates. A deterministic
@@ -125,7 +125,29 @@ a green run proves nothing.
125
125
  4. **Prompt guidance ships as a nudge whose take-rate is reported, never as the
126
126
  mechanism.** The evidence above is what that sentence is standing on.
127
127
 
128
- 5. **Fail closed only on harness integrity, never on product semantics** — a lane that
128
+ 5. **Capability settings are recruiting decisions, not instrument settings.** Which
129
+ model runs a lane, and at what reasoning effort, changes who the participant IS —
130
+ the same way a persona prompt does. It is tempting to sort these into "the
131
+ participant" (persona) and "the harness" (model, effort) and treat a result that
132
+ moves with effort as a confound. That split does not survive contact: both are
133
+ things we set on a synthetic person before they touch the product, and the evidence
134
+ above says the persona half is the *weakly* grounded one. So a lane that abandons at
135
+ `medium` and completes at `high` produced two findings about two participants, not
136
+ one finding and one artifact.
137
+
138
+ What follows is a recording obligation, not a control obligation. Vary them
139
+ deliberately, declare what was recruited, and record the resolved value on the trace
140
+ (`ids.model`, `modelSettings.reasoningEffort`) so a reader can tell which participant
141
+ produced which result. The failure mode is not "we ran at medium" — it is running at
142
+ medium without saying so, then attributing the outcome to the one variable we did
143
+ declare.
144
+
145
+ **What this does not license:** claiming that any (model, effort) pair corresponds to
146
+ a real user population. No such mapping is calibrated here, and this project does not
147
+ assert one. A declared population says who was recruited; it does not say whom they
148
+ stand for.
149
+
150
+ 6. **Fail closed only on harness integrity, never on product semantics** — a lane that
129
151
  cannot report what it did is a broken instrument, which is a different thing from
130
152
  an actor that behaved unexpectedly.
131
153
 
@@ -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.55.0` (2026-08-20). 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.56.0` (2026-08-21). 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.55.0",
3
+ "version": "0.56.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": [