humanish 0.88.2 → 0.89.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.
Files changed (55) hide show
  1. package/README.md +8 -0
  2. package/dist/export-bundle.js +6 -0
  3. package/dist/export-bundle.js.map +1 -1
  4. package/dist/export.js +67 -10
  5. package/dist/export.js.map +1 -1
  6. package/dist/feedback.d.ts +10 -0
  7. package/dist/feedback.js +58 -1
  8. package/dist/feedback.js.map +1 -1
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/observer-app.html +10 -9
  13. package/dist/observer.d.ts +2 -0
  14. package/dist/observer.js +52 -5
  15. package/dist/observer.js.map +1 -1
  16. package/dist/pricing.js +2 -2
  17. package/dist/pricing.js.map +1 -1
  18. package/dist/program.js +146 -3
  19. package/dist/program.js.map +1 -1
  20. package/dist/run.d.ts +3 -1
  21. package/dist/run.js +46 -18
  22. package/dist/run.js.map +1 -1
  23. package/dist/study-analysis-engine.d.ts +34 -0
  24. package/dist/study-analysis-engine.js +217 -0
  25. package/dist/study-analysis-engine.js.map +1 -0
  26. package/dist/study-analysis-evidence.d.ts +27 -0
  27. package/dist/study-analysis-evidence.js +420 -0
  28. package/dist/study-analysis-evidence.js.map +1 -0
  29. package/dist/study-analysis-provider.d.ts +38 -0
  30. package/dist/study-analysis-provider.js +140 -0
  31. package/dist/study-analysis-provider.js.map +1 -0
  32. package/dist/study-analysis-service.d.ts +45 -0
  33. package/dist/study-analysis-service.js +207 -0
  34. package/dist/study-analysis-service.js.map +1 -0
  35. package/dist/study-analysis-sharing.d.ts +11 -0
  36. package/dist/study-analysis-sharing.js +27 -0
  37. package/dist/study-analysis-sharing.js.map +1 -0
  38. package/dist/study-analysis-store.d.ts +30 -0
  39. package/dist/study-analysis-store.js +343 -0
  40. package/dist/study-analysis-store.js.map +1 -0
  41. package/dist/study-analysis-validation.d.ts +448 -0
  42. package/dist/study-analysis-validation.js +331 -0
  43. package/dist/study-analysis-validation.js.map +1 -0
  44. package/dist/study-analysis.d.ts +167 -0
  45. package/dist/study-analysis.js +4 -0
  46. package/dist/study-analysis.js.map +1 -0
  47. package/docs/architecture/observer.md +10 -1
  48. package/docs/contracts/feedback.md +9 -3
  49. package/docs/contracts/schemas.md +4 -1
  50. package/docs/contracts/study-analysis.md +150 -0
  51. package/docs/goals/current.md +4 -3
  52. package/docs/ramp/README.md +12 -2
  53. package/docs/release/0.89.0-study-findings.md +79 -0
  54. package/docs/release/0.89.1-analysis-finished-notice.md +24 -0
  55. package/package.json +3 -2
@@ -0,0 +1,331 @@
1
+ import { createHash } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { STUDY_ANALYSIS_SCHEMA, STUDY_ANALYSIS_CORRECTION_SCHEMA } from "./study-analysis.js";
4
+ const text = (max) => z.string().max(max).refine((value) => !/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/.test(value), "Invalid text.");
5
+ const label = text(240).min(1);
6
+ const id = z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/);
7
+ const sourceId = text(256).min(1);
8
+ const digest = z.string().regex(/^[a-f0-9]{64}$/);
9
+ const timestamp = z.string().datetime({ offset: true });
10
+ const sourceIds = z.array(sourceId).max(128);
11
+ const refs = z.array(id).min(1).max(100);
12
+ const limitations = z.array(text(2000).min(1)).max(100);
13
+ export const studyAnalysisResultSchema = z.object({
14
+ summary: text(4000).min(1),
15
+ participants: z.array(z.object({
16
+ streamId: sourceId,
17
+ summary: text(4000).min(1),
18
+ intent: text(2000).min(1),
19
+ outcome: z.enum(["completed", "blocked", "abandoned", "interrupted", "unknown"]),
20
+ outcomeReason: text(2000).min(1),
21
+ evidenceIds: z.array(id).max(100),
22
+ feedback: z.array(z.object({ evidenceId: id, text: text(4000).min(1) }).strict()).max(20),
23
+ limitations
24
+ }).strict()).max(128),
25
+ findings: z.array(z.object({
26
+ id,
27
+ title: label,
28
+ summary: text(4000).min(1),
29
+ impact: z.enum(["blocked_task", "friction", "recovery", "uncertain"]),
30
+ affectedStreamIds: sourceIds.min(1),
31
+ exposedStreamIds: sourceIds.min(1),
32
+ exposureReason: text(2000).min(1),
33
+ recovery: z.enum(["recovered", "not_observed", "unknown"]),
34
+ confidence: z.enum(["low", "medium", "high"]),
35
+ observations: z.array(z.object({
36
+ claim: text(2000).min(1),
37
+ basis: z.enum(["visual", "action", "participant_statement", "inference"]),
38
+ evidenceIds: refs,
39
+ limitation: text(2000)
40
+ }).strict()).min(1).max(30),
41
+ nextStep: text(2000).min(1),
42
+ priorityReason: text(2000).min(1)
43
+ }).strict()).max(100),
44
+ limitations
45
+ }).strict();
46
+ export const studyAnalysisResultJsonSchema = z.toJSONSchema(studyAnalysisResultSchema);
47
+ export const studyAnalysisCoverageSchema = z.object({
48
+ includedStreamIds: sourceIds,
49
+ omittedStreamIds: sourceIds,
50
+ evidenceCount: z.number().int().min(0).max(2000),
51
+ captureCount: z.number().int().min(0).max(64),
52
+ complete: z.boolean(),
53
+ omissions: limitations
54
+ }).strict();
55
+ const artifactPath = z.string().min(1).max(1024).refine((value) => !/[\\:\x00-\x1f\x7f]/.test(value)
56
+ && !value.startsWith("/")
57
+ && value.split("/").every((part) => part !== "" && part !== "." && part !== ".."), "Invalid evidence path.");
58
+ export const studyAnalysisEvidenceSchema = z.object({
59
+ id,
60
+ streamId: sourceId,
61
+ eventId: sourceId,
62
+ kind: text(128).min(1),
63
+ text: text(16000),
64
+ quoteEligible: z.boolean(),
65
+ at: timestamp.nullable(),
66
+ elapsedMs: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER).nullable(),
67
+ frame: z.number().int().min(0).max(100000).nullable(),
68
+ capture: z.object({
69
+ eventId: sourceId,
70
+ path: artifactPath,
71
+ sha256: digest,
72
+ mimeType: z.enum(["image/png", "image/jpeg", "image/webp"])
73
+ }).strict().nullable()
74
+ }).strict();
75
+ export const studyAnalysisParticipantProvenanceSchema = z.object({
76
+ actorStatus: z.enum(["passed", "abandoned", "incomplete", "blocked", "timed_out", "failed"]).nullable(),
77
+ completionReason: z.enum(["goal_satisfied", "turn_completed", "gave_up", "blocked_approval", "timed_out",
78
+ "budget_reached", "actor_error", "step_failed", "harness_error"]).nullable(),
79
+ stopCause: z.enum(["provider_output_limit", "provider_token_limit", "time_limit", "spend_limit",
80
+ "study_spend_limit", "adapter_limit", "provider_incomplete", "provider_status", "harness_aborted"]).nullable(),
81
+ goalSource: z.enum(["participant_report", "condition_matched", "unavailable"]).nullable(),
82
+ declaredOutcome: z.enum(["reached", "not_reached", "blocked"]).nullable(),
83
+ taskOutcomes: z.array(z.object({
84
+ taskId: sourceId,
85
+ completed: z.boolean(),
86
+ observable: z.boolean(),
87
+ inputsObserved: z.boolean().nullable(),
88
+ turn: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER).nullable()
89
+ }).strict()).max(128).refine((tasks) => new Set(tasks.map((task) => task.taskId)).size === tasks.length, "Task IDs must be distinct.").nullable()
90
+ }).strict();
91
+ export const studyAnalysisArtifactSchema = z.object({
92
+ schema: z.literal(STUDY_ANALYSIS_SCHEMA),
93
+ id,
94
+ runId: sourceId,
95
+ status: z.enum(["complete", "partial", "failed", "cancelled"]),
96
+ createdAt: timestamp,
97
+ completedAt: timestamp,
98
+ sourceRunSha256: digest,
99
+ inputDigest: digest,
100
+ configDigest: digest,
101
+ config: z.object({
102
+ model: label,
103
+ question: text(4000).nullable(),
104
+ maxCostUsd: z.number().positive().max(1000),
105
+ timeoutMs: z.number().int().positive().max(3600000),
106
+ maxOutputTokens: z.number().int().positive().max(128000)
107
+ }).strict(),
108
+ promptVersion: label,
109
+ provider: z.literal("openai"),
110
+ usage: z.object({
111
+ cacheWriteInputTokens: z.number().int().min(0).max(1e12).nullable(),
112
+ cachedInputTokens: z.number().int().min(0).max(1e12).nullable(),
113
+ usageComplete: z.boolean(),
114
+ dispatched: z.boolean(),
115
+ ratesAsOf: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).nullable(),
116
+ estimatedAdmissionUsd: z.number().min(0).max(1e9).nullable(),
117
+ inputTokens: z.number().int().min(0).max(1e12).nullable(),
118
+ outputTokens: z.number().int().min(0).max(1e12).nullable(),
119
+ estimatedCostUsd: z.number().min(0).max(1e9).nullable()
120
+ }).strict(),
121
+ participants: z.array(z.object({
122
+ streamId: sourceId,
123
+ label: text(1000),
124
+ assignment: text(8000).nullable(),
125
+ recordedStatus: text(128).min(1),
126
+ recordedReason: text(4000).nullable(),
127
+ provenance: studyAnalysisParticipantProvenanceSchema
128
+ }).strict()).max(128),
129
+ coverage: studyAnalysisCoverageSchema,
130
+ evidence: z.array(studyAnalysisEvidenceSchema).max(2000),
131
+ result: studyAnalysisResultSchema.nullable(),
132
+ error: z.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/).nullable()
133
+ }).strict();
134
+ export const studyAnalysisCorrectionSchema = z.object({
135
+ schema: z.literal(STUDY_ANALYSIS_CORRECTION_SCHEMA),
136
+ id,
137
+ analysisId: id,
138
+ analysisSha256: digest,
139
+ findingId: id,
140
+ findingSha256: digest,
141
+ createdAt: timestamp,
142
+ status: z.enum(["confirmed", "dismissed", "amended"]),
143
+ reason: text(4000).min(1),
144
+ replacementClaim: text(4000).min(1).nullable()
145
+ }).strict();
146
+ /** Stable hashing is independent of object insertion order and excludes no fields implicitly. */
147
+ export function hashStudyAnalysisValue(value) {
148
+ const canonical = (input) => {
149
+ if (Array.isArray(input))
150
+ return input.map(canonical);
151
+ if (input !== null && typeof input === "object") {
152
+ return Object.fromEntries(Object.entries(input).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
153
+ .map(([key, entry]) => [key, canonical(entry)]));
154
+ }
155
+ return input;
156
+ };
157
+ return createHash("sha256").update(JSON.stringify(canonical(value))).digest("hex");
158
+ }
159
+ export function digestStudyAnalysisInput(input) {
160
+ return hashStudyAnalysisValue({ runId: input.runId, sourceRunSha256: input.sourceRunSha256,
161
+ participants: input.participants, coverage: input.coverage, evidence: input.evidence });
162
+ }
163
+ const distinct = (values) => new Set(values).size === values.length;
164
+ export function checkAnalysisResult(input, value) {
165
+ const parsed = studyAnalysisResultSchema.safeParse(value);
166
+ if (!parsed.success)
167
+ return { ok: false, errors: ["ANALYSIS_RESULT_SCHEMA_INVALID"] };
168
+ const result = parsed.data;
169
+ const errors = new Set();
170
+ const included = new Set(input.coverage.includedStreamIds);
171
+ const evidence = new Map(input.evidence.map((entry) => [entry.id, entry]));
172
+ if (!distinct(input.coverage.includedStreamIds) || evidence.size !== input.evidence.length)
173
+ errors.add("ANALYSIS_INPUT_DUPLICATES");
174
+ if (!distinct(result.participants.map((participant) => participant.streamId))
175
+ || result.participants.length !== included.size
176
+ || result.participants.some((participant) => !included.has(participant.streamId)))
177
+ errors.add("ANALYSIS_PARTICIPANT_COVERAGE_INVALID");
178
+ for (const participant of result.participants) {
179
+ if (!distinct(participant.evidenceIds) || participant.evidenceIds.some((ref) => evidence.get(ref)?.streamId !== participant.streamId)) {
180
+ errors.add("ANALYSIS_PARTICIPANT_REFERENCE_INVALID");
181
+ }
182
+ if (participant.outcome !== "unknown" && participant.evidenceIds.length === 0)
183
+ errors.add("ANALYSIS_OUTCOME_WITHOUT_EVIDENCE");
184
+ for (const quote of participant.feedback) {
185
+ const entry = evidence.get(quote.evidenceId);
186
+ if (!entry || entry.streamId !== participant.streamId || !entry.quoteEligible || !entry.text.includes(quote.text)) {
187
+ errors.add("ANALYSIS_QUOTE_INVALID");
188
+ }
189
+ }
190
+ }
191
+ if (!distinct(result.findings.map((finding) => finding.id)))
192
+ errors.add("ANALYSIS_FINDING_ID_DUPLICATE");
193
+ for (const finding of result.findings) {
194
+ const exposed = new Set(finding.exposedStreamIds);
195
+ if (!distinct(finding.affectedStreamIds) || !distinct(finding.exposedStreamIds)
196
+ || finding.exposedStreamIds.some((stream) => !included.has(stream))
197
+ || finding.affectedStreamIds.some((stream) => !exposed.has(stream)))
198
+ errors.add("ANALYSIS_FINDING_MEMBERSHIP_INVALID");
199
+ const citedStreams = new Set();
200
+ for (const observation of finding.observations) {
201
+ const refs = observation.evidenceIds.map((ref) => evidence.get(ref));
202
+ if (!distinct(observation.evidenceIds) || refs.some((ref) => !ref || !included.has(ref.streamId)))
203
+ errors.add("ANALYSIS_OBSERVATION_REFERENCE_INVALID");
204
+ for (const ref of refs)
205
+ if (ref)
206
+ citedStreams.add(ref.streamId);
207
+ if (observation.basis === "visual" && !refs.some((ref) => ref?.capture !== null && ref?.capture !== undefined))
208
+ errors.add("ANALYSIS_VISUAL_WITHOUT_CAPTURE");
209
+ if (observation.basis === "action" && !refs.some((ref) => ref && ["ui_action", "command", "tool_call", "file_change", "approval"].includes(ref.kind)))
210
+ errors.add("ANALYSIS_ACTION_SOURCE_INVALID");
211
+ if (observation.basis === "participant_statement" && refs.some((ref) => !ref?.quoteEligible))
212
+ errors.add("ANALYSIS_STATEMENT_SOURCE_INVALID");
213
+ }
214
+ if (finding.affectedStreamIds.some((stream) => !citedStreams.has(stream)))
215
+ errors.add("ANALYSIS_AFFECTED_WITHOUT_EVIDENCE");
216
+ }
217
+ return errors.size ? { ok: false, errors: [...errors] } : { ok: true, result };
218
+ }
219
+ export function validateAnalysisResult(input, value) {
220
+ const checked = checkAnalysisResult(input, value);
221
+ if (!checked.ok)
222
+ throw new Error(checked.errors.join(", "));
223
+ return checked.result;
224
+ }
225
+ export function validateStudyAnalysisArtifact(value) {
226
+ const parsed = studyAnalysisArtifactSchema.safeParse(value);
227
+ if (!parsed.success)
228
+ throw new Error("ANALYSIS_ARTIFACT_SCHEMA_INVALID");
229
+ const artifact = parsed.data;
230
+ if (artifact.configDigest !== hashStudyAnalysisValue(artifact.config)
231
+ || artifact.inputDigest !== digestStudyAnalysisInput(artifact))
232
+ throw new Error("ANALYSIS_DIGEST_INVALID");
233
+ if (Date.parse(artifact.completedAt) < Date.parse(artifact.createdAt))
234
+ throw new Error("ANALYSIS_TIME_INVALID");
235
+ const coverage = artifact.coverage;
236
+ const included = new Set(coverage.includedStreamIds);
237
+ const captureIds = new Set(artifact.evidence.filter((entry) => entry.capture !== null)
238
+ .map((entry) => `${entry.streamId}\0${entry.capture.eventId}`));
239
+ if (!distinct(coverage.includedStreamIds) || !distinct(coverage.omittedStreamIds)
240
+ || coverage.omittedStreamIds.some((stream) => included.has(stream))
241
+ || coverage.evidenceCount !== artifact.evidence.length || coverage.captureCount !== captureIds.size
242
+ || !distinct(artifact.evidence.map((entry) => entry.id))
243
+ || artifact.evidence.some((entry) => !included.has(entry.streamId)
244
+ || (entry.quoteEligible && !["message", "reasoning"].includes(entry.kind))
245
+ || (entry.capture !== null && entry.frame === null))
246
+ || (coverage.complete && (coverage.omittedStreamIds.length > 0 || coverage.omissions.length > 0))) {
247
+ throw new Error("ANALYSIS_COVERAGE_INVALID");
248
+ }
249
+ if (!distinct(artifact.participants.map((participant) => participant.streamId))
250
+ || artifact.participants.length !== included.size
251
+ || artifact.participants.some((participant) => !included.has(participant.streamId)))
252
+ throw new Error("ANALYSIS_PARTICIPANT_INPUT_INVALID");
253
+ assertAnalysisUsage(artifact.usage);
254
+ const hasResult = artifact.status === "complete" || artifact.status === "partial";
255
+ if (hasResult !== (artifact.result !== null)
256
+ || (hasResult && artifact.error !== null && !(artifact.status === "partial" && artifact.error === "analysis_admission_estimate_exceeded"))
257
+ || (!hasResult && artifact.error === null)
258
+ || (artifact.status === "complete" && !coverage.complete))
259
+ throw new Error("ANALYSIS_STATUS_INVALID");
260
+ if (artifact.result !== null)
261
+ validateAnalysisResult({ ...artifact, images: [] }, artifact.result);
262
+ return artifact;
263
+ }
264
+ export function validateStudyAnalysisCorrection(value) {
265
+ const parsed = studyAnalysisCorrectionSchema.safeParse(value);
266
+ if (!parsed.success || (parsed.data.status === "amended") !== (parsed.data.replacementClaim !== null)) {
267
+ throw new Error("ANALYSIS_CORRECTION_INVALID");
268
+ }
269
+ return parsed.data;
270
+ }
271
+ /** Accounting survives a stale source without retaining generated or participant text. */
272
+ export const studyAnalysisExecutionReceiptSchema = studyAnalysisArtifactSchema.pick({
273
+ id: true,
274
+ runId: true,
275
+ status: true,
276
+ createdAt: true,
277
+ completedAt: true,
278
+ sourceRunSha256: true,
279
+ inputDigest: true,
280
+ configDigest: true,
281
+ promptVersion: true,
282
+ provider: true,
283
+ usage: true,
284
+ error: true
285
+ }).extend({
286
+ schema: z.literal("humanish.analysis-execution.v1"),
287
+ model: studyAnalysisArtifactSchema.shape.config.shape.model,
288
+ maxCostUsd: studyAnalysisArtifactSchema.shape.config.shape.maxCostUsd
289
+ }).strict();
290
+ function assertAnalysisUsage(usage) {
291
+ if ((usage.usageComplete && (usage.inputTokens === null || usage.outputTokens === null))
292
+ || (!usage.dispatched && (usage.inputTokens !== null || usage.outputTokens !== null || usage.cachedInputTokens !== null
293
+ || usage.cacheWriteInputTokens !== null || usage.estimatedCostUsd !== null || usage.usageComplete))
294
+ || ((usage.cachedInputTokens !== null || usage.cacheWriteInputTokens !== null) && (usage.inputTokens === null
295
+ || (usage.cachedInputTokens ?? 0) + (usage.cacheWriteInputTokens ?? 0) > usage.inputTokens))) {
296
+ throw new Error("ANALYSIS_USAGE_INVALID");
297
+ }
298
+ }
299
+ export function validateStudyAnalysisExecutionReceipt(value) {
300
+ const parsed = studyAnalysisExecutionReceiptSchema.safeParse(value);
301
+ if (!parsed.success || Date.parse(parsed.data.completedAt) < Date.parse(parsed.data.createdAt))
302
+ throw new Error("ANALYSIS_RECEIPT_INVALID");
303
+ assertAnalysisUsage(parsed.data.usage);
304
+ return parsed.data;
305
+ }
306
+ const inputMetadataSchema = studyAnalysisArtifactSchema.pick({
307
+ runId: true, sourceRunSha256: true, inputDigest: true, participants: true, coverage: true, evidence: true
308
+ });
309
+ /** Validate the packet before any paid request, including typed-library callers. */
310
+ export function validateStudyAnalysisInputMetadata(input) {
311
+ const parsed = inputMetadataSchema.safeParse({ runId: input.runId, sourceRunSha256: input.sourceRunSha256,
312
+ inputDigest: input.inputDigest, participants: input.participants, coverage: input.coverage, evidence: input.evidence });
313
+ if (!parsed.success || digestStudyAnalysisInput(parsed.data) !== input.inputDigest)
314
+ throw new Error("ANALYSIS_INPUT_INVALID");
315
+ const { coverage, evidence, participants } = parsed.data;
316
+ const included = new Set(coverage.includedStreamIds);
317
+ const captures = new Set(evidence.filter((entry) => entry.capture !== null).map((entry) => JSON.stringify([entry.streamId, entry.capture.eventId])));
318
+ if (!distinct(coverage.includedStreamIds) || !distinct(coverage.omittedStreamIds)
319
+ || coverage.omittedStreamIds.some((stream) => included.has(stream))
320
+ || !distinct(participants.map((participant) => participant.streamId)) || participants.length !== included.size
321
+ || participants.some((participant) => !included.has(participant.streamId))
322
+ || !distinct(evidence.map((entry) => entry.id))
323
+ || !distinct(evidence.map((entry) => JSON.stringify([entry.streamId, entry.kind, entry.eventId])))
324
+ || coverage.evidenceCount !== evidence.length || coverage.captureCount !== captures.size
325
+ || evidence.some((entry) => !included.has(entry.streamId)
326
+ || (entry.quoteEligible && !["message", "reasoning"].includes(entry.kind))
327
+ || (entry.capture !== null && (entry.frame === null || entry.capture.eventId !== entry.eventId)))
328
+ || (coverage.complete && (coverage.omissions.length > 0 || coverage.omittedStreamIds.length > 0)))
329
+ throw new Error("ANALYSIS_INPUT_INVALID");
330
+ }
331
+ //# sourceMappingURL=study-analysis-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study-analysis-validation.js","sourceRoot":"","sources":["../src/study-analysis-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import type { ActorStatus, ActorCompletionReason, ActorStopCause, ParticipantDeclaredOutcome } from "./actor-contract.js";
2
+ import type { CuaGoalSource } from "./actor-goal-source.js";
3
+ /** Independent interpretation of retained evidence; never a participant or harness verdict. */
4
+ export declare const STUDY_ANALYSIS_SCHEMA: "humanish.study-analysis.v1";
5
+ export declare const STUDY_ANALYSIS_CORRECTION_SCHEMA: "humanish.study-analysis-correction.v1";
6
+ export type AnalysisStatus = "complete" | "partial" | "failed" | "cancelled";
7
+ export type AnalysisOutcome = "completed" | "blocked" | "abandoned" | "interrupted" | "unknown";
8
+ export type AnalysisBasis = "visual" | "action" | "participant_statement" | "inference";
9
+ export interface AnalysisEvidence {
10
+ /** Opaque packet-local key; model output never supplies a filesystem path. */
11
+ id: string;
12
+ streamId: string;
13
+ eventId: string;
14
+ kind: string;
15
+ text: string;
16
+ quoteEligible: boolean;
17
+ at: string | null;
18
+ /** Relative to first retained capture, not a video offset; null for nonvisual evidence. */
19
+ elapsedMs: number | null;
20
+ frame: number | null;
21
+ capture: {
22
+ eventId: string;
23
+ path: string;
24
+ sha256: string;
25
+ mimeType: "image/png" | "image/jpeg" | "image/webp";
26
+ } | null;
27
+ }
28
+ export interface AnalysisCoverage {
29
+ includedStreamIds: string[];
30
+ omittedStreamIds: string[];
31
+ evidenceCount: number;
32
+ captureCount: number;
33
+ complete: boolean;
34
+ omissions: string[];
35
+ }
36
+ export interface AnalysisParticipantInput {
37
+ streamId: string;
38
+ label: string;
39
+ assignment: string | null;
40
+ recordedStatus: string;
41
+ recordedReason: string | null;
42
+ provenance: {
43
+ actorStatus: ActorStatus | null;
44
+ completionReason: ActorCompletionReason | null;
45
+ stopCause: ActorStopCause | null;
46
+ goalSource: CuaGoalSource | null;
47
+ declaredOutcome: ParticipantDeclaredOutcome | null;
48
+ taskOutcomes: Array<{
49
+ taskId: string;
50
+ completed: boolean;
51
+ observable: boolean;
52
+ inputsObserved: boolean | null;
53
+ turn: number | null;
54
+ }> | null;
55
+ };
56
+ }
57
+ export interface StudyAnalysisInput {
58
+ runId: string;
59
+ sourceRunSha256: string;
60
+ inputDigest: string;
61
+ participants: AnalysisParticipantInput[];
62
+ coverage: AnalysisCoverage;
63
+ evidence: AnalysisEvidence[];
64
+ /** Ephemeral input only: never persisted in the analysis artifact. */
65
+ images: {
66
+ evidenceId: string;
67
+ dataUrl: string;
68
+ }[];
69
+ }
70
+ export interface AnalysisQuote {
71
+ evidenceId: string;
72
+ text: string;
73
+ }
74
+ export interface AnalysisParticipantReview {
75
+ streamId: string;
76
+ summary: string;
77
+ intent: string;
78
+ outcome: AnalysisOutcome;
79
+ outcomeReason: string;
80
+ evidenceIds: string[];
81
+ feedback: AnalysisQuote[];
82
+ limitations: string[];
83
+ }
84
+ export interface AnalysisObservation {
85
+ claim: string;
86
+ basis: AnalysisBasis;
87
+ evidenceIds: string[];
88
+ limitation: string;
89
+ }
90
+ export interface AnalysisFinding {
91
+ id: string;
92
+ title: string;
93
+ summary: string;
94
+ impact: "blocked_task" | "friction" | "recovery" | "uncertain";
95
+ affectedStreamIds: string[];
96
+ exposedStreamIds: string[];
97
+ exposureReason: string;
98
+ recovery: "recovered" | "not_observed" | "unknown";
99
+ confidence: "low" | "medium" | "high";
100
+ observations: AnalysisObservation[];
101
+ nextStep: string;
102
+ priorityReason: string;
103
+ }
104
+ export interface StudyAnalysisResult {
105
+ summary: string;
106
+ participants: AnalysisParticipantReview[];
107
+ /** Highest priority first; counts are derived from distinct stream sets. */
108
+ findings: AnalysisFinding[];
109
+ limitations: string[];
110
+ }
111
+ export interface StudyAnalysisConfig {
112
+ model: string;
113
+ question: string | null;
114
+ maxCostUsd: number;
115
+ timeoutMs: number;
116
+ maxOutputTokens: number;
117
+ }
118
+ export interface AnalysisUsage {
119
+ inputTokens: number | null;
120
+ outputTokens: number | null;
121
+ estimatedCostUsd: number | null;
122
+ cachedInputTokens: number | null;
123
+ cacheWriteInputTokens: number | null;
124
+ usageComplete: boolean;
125
+ dispatched: boolean;
126
+ ratesAsOf: string | null;
127
+ estimatedAdmissionUsd: number | null;
128
+ }
129
+ export interface StudyAnalysisArtifact {
130
+ schema: typeof STUDY_ANALYSIS_SCHEMA;
131
+ id: string;
132
+ runId: string;
133
+ status: AnalysisStatus;
134
+ createdAt: string;
135
+ completedAt: string;
136
+ sourceRunSha256: string;
137
+ inputDigest: string;
138
+ configDigest: string;
139
+ config: StudyAnalysisConfig;
140
+ promptVersion: string;
141
+ provider: "openai";
142
+ usage: AnalysisUsage;
143
+ participants: AnalysisParticipantInput[];
144
+ coverage: AnalysisCoverage;
145
+ evidence: AnalysisEvidence[];
146
+ result: StudyAnalysisResult | null;
147
+ /** Safe stable failure code, never a provider error payload. */
148
+ error: string | null;
149
+ }
150
+ export interface StudyAnalysisCorrection {
151
+ schema: typeof STUDY_ANALYSIS_CORRECTION_SCHEMA;
152
+ id: string;
153
+ analysisId: string;
154
+ analysisSha256: string;
155
+ findingId: string;
156
+ findingSha256: string;
157
+ createdAt: string;
158
+ status: "confirmed" | "dismissed" | "amended";
159
+ reason: string;
160
+ replacementClaim: string | null;
161
+ }
162
+ export interface LoadedStudyAnalysis {
163
+ state: "none" | "ready" | "stale" | "invalid";
164
+ analysis: StudyAnalysisArtifact | null;
165
+ corrections: StudyAnalysisCorrection[];
166
+ warnings: string[];
167
+ }
@@ -0,0 +1,4 @@
1
+ /** Independent interpretation of retained evidence; never a participant or harness verdict. */
2
+ export const STUDY_ANALYSIS_SCHEMA = "humanish.study-analysis.v1";
3
+ export const STUDY_ANALYSIS_CORRECTION_SCHEMA = "humanish.study-analysis-correction.v1";
4
+ //# sourceMappingURL=study-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study-analysis.js","sourceRoot":"","sources":["../src/study-analysis.ts"],"names":[],"mappings":"AAGA,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAAqC,CAAC;AAC3E,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAgD,CAAC"}
@@ -187,13 +187,22 @@ entry-point capabilities, timing limits and browser acceptance commands.
187
187
 
188
188
  The Observer shell has:
189
189
 
190
- - top mission-control band with run status and metrics;
190
+ - a persistent study library and a compact study header;
191
+ - Participants and Findings views that share the same shell geometry;
191
192
  - stream filters for UI, CLI, TUI, and Codex UI lanes;
192
193
  - grid mode with one tile per sim stream;
193
194
  - focus mode with left stream rail, center stage, and right tabs;
194
195
  - terminal/TUI transcript stage;
195
196
  - right evidence rail for events, artifacts, and known gaps.
196
197
 
198
+ Findings use the independent [study analysis contract](../contracts/study-analysis.md).
199
+ The renderer injects a separate JSON slot and HTTP companion; it does not extend
200
+ the frozen Observer data schema or start provider requests. Analysis polling has
201
+ an independent lifecycle, so a delayed companion does not stall recording updates.
202
+ Invalid or stale interpretation never overwrites original participant outcomes.
203
+ Recording navigation retains its originating view, and nonvisual citations open
204
+ the source event rather than inventing a playback frame.
205
+
197
206
  The participant grid uses equal-height previews whose widths follow each screen's
198
207
  aspect ratio. A 44px identity/source/outcome caption sits below the captured pixels;
199
208
  no badges or controls cover the screen. Generated computer-use lane labels display
@@ -58,6 +58,10 @@ setup-quality gap, ceremonial/absent study quality, target-app blocker, or
58
58
  Humanish CLI blocker. The OSS
59
59
  meta-lab is one maintainer dogfood example, not the only candidate source.
60
60
 
61
+ The list also shows any saved draft. An empty `candidates` array means no usable
62
+ candidate was recorded; it does not mean a run-summary draft is unavailable.
63
+ Listing does not create a draft or check public-sharing eligibility.
64
+
61
65
  For completed computer-use sessions, participant-reported friction comes from
62
66
  the redacted closing report and observed-report clauses in earlier messages.
63
67
  Matching `stopWhen` or ending a dwell window does not discard an earlier
@@ -74,9 +78,11 @@ was not repeated in the message trace.
74
78
 
75
79
  ### `draft`
76
80
 
77
- Builds structured feedback from the strongest run candidate first. If no
78
- candidate is present, falls back to the dry-run contract follow-up. Writes a
79
- draft under the run bundle, not GitHub.
81
+ Builds structured feedback from the first usable run candidate, or the candidate
82
+ selected with `--candidate`. With no candidate, a dry run produces a contract
83
+ follow-up and a live run produces a summary of its recorded review. These
84
+ fallbacks do not add a finding to the candidate list. All drafts require a
85
+ verified `share_ready` run and are written under the run bundle, not GitHub.
80
86
 
81
87
  ### `verify`
82
88
 
@@ -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.88.2`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.89.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.
@@ -38,6 +38,9 @@ workflow without leaking private upstream truth into core.
38
38
  | Substrate | reserved (never shipped) | none |
39
39
  | Evidence stream | reserved (streams live inside the run bundle) | see [`run-bundle.md`](run-bundle.md) |
40
40
  | Review | `humanish.review.v1` | `contract-proof-review` |
41
+ | Study analysis | `humanish.study-analysis.v1` | see [study analysis](study-analysis.md) and synthetic analysis fixtures in `tests/` |
42
+ | Study analysis correction | `humanish.study-analysis-correction.v1` | see [study analysis](study-analysis.md#human-review-and-sharing) |
43
+ | Analysis execution receipt | `humanish.analysis-execution.v1` | see [study analysis](study-analysis.md#durable-records) |
41
44
  | Verification | `humanish.verify-result.v1` | `five-check-verify` |
42
45
  | Policy | `humanish.policy.v1` (fixture-only; not engine-validated) | `public-safety-policy` |
43
46
  | Feedback | `humanish.feedback.v1` | `public-safe-feedback` |