@zhivex-ai/harness 1.4.0 → 1.4.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 (117) hide show
  1. package/CHANGELOG.md +29 -10
  2. package/README.md +7 -5
  3. package/SUPPORT.md +2 -2
  4. package/contracts/client-protocol-v1.schema.json +593 -0
  5. package/contracts/engine-api.json +156 -0
  6. package/contracts/public-api.json +12 -0
  7. package/contracts/stable-api-signatures.json +33 -33
  8. package/dist/acp-cli.js +54 -20
  9. package/dist/audit/index.d.ts +3 -0
  10. package/dist/audit/index.js +482 -0
  11. package/dist/audit/pack.d.ts +72 -0
  12. package/dist/audit-pack-e4vaq7np.js +532 -0
  13. package/dist/cli/arguments.d.ts +3 -1
  14. package/dist/cli/audit-pack.d.ts +24 -0
  15. package/dist/cli/cli-credentials.d.ts +6 -0
  16. package/dist/cli/cli-profiles.d.ts +4 -2
  17. package/dist/cli/node-engine.d.ts +2 -0
  18. package/dist/{cli-2h37qyvg.js → cli-1cf4dcnj.js} +245 -642
  19. package/dist/{cli-entry-w0hterjs.js → cli-entry-3s63zn4w.js} +40 -13
  20. package/dist/cli-entry-7f0cen32.js +9990 -0
  21. package/dist/cli-entry-a890x3kq.js +10348 -0
  22. package/dist/{cli-entry-20w6nh0k.js → cli-entry-hdtfef27.js} +439 -19
  23. package/dist/cli-entry-rgs6bxmy.js +484 -0
  24. package/dist/cli.js +27 -2
  25. package/dist/client/json-contracts.d.ts +4 -0
  26. package/dist/client/protocol.d.ts +133 -0
  27. package/dist/client/task-control-host.d.ts +400 -0
  28. package/dist/client/task-projection-host.d.ts +12 -0
  29. package/dist/client/task-projection.d.ts +168 -0
  30. package/dist/compat/code-support.js +28 -22
  31. package/dist/{config-qt69hkqj.js → config-r9fdhce6.js} +3 -3
  32. package/dist/{config-j9624t6t.js → config-vyajmksy.js} +1 -1
  33. package/dist/engine/acp.js +15 -11
  34. package/dist/engine/client.js +14 -10
  35. package/dist/engine/desktop-providers-v1.d.ts +2 -0
  36. package/dist/engine/desktop-providers-v1.js +23 -3
  37. package/dist/engine/desktop-state-v1.js +11 -8
  38. package/dist/engine/index.d.ts +3 -0
  39. package/dist/engine/index.js +101 -554
  40. package/dist/engine/mcp-stdio-v1.js +8 -6
  41. package/dist/engine/models.js +76 -4
  42. package/dist/engine/protocol.d.ts +2 -0
  43. package/dist/engine/protocol.js +110 -0
  44. package/dist/engine/service.js +15 -11
  45. package/dist/hostile-repository-demo.js +1095 -505
  46. package/dist/{index-937cb7y8.js → index-02pqtbbg.js} +559 -33
  47. package/dist/{index-pp474137.js → index-0zs2dz26.js} +766 -931
  48. package/dist/{index-8zjmnyw5.js → index-1265j7t2.js} +73 -6
  49. package/dist/index-4fx5f3k5.js +269 -0
  50. package/dist/{index-nmjdwd4p.js → index-4gt045j0.js} +109 -1
  51. package/dist/{index-6dft2vev.js → index-6599mpmy.js} +5 -3
  52. package/dist/{index-tfzta544.js → index-74kkpyqk.js} +9 -7
  53. package/dist/{index-61gthdz6.js → index-8sm2a1wa.js} +1 -1
  54. package/dist/index-c39197wq.js +552 -0
  55. package/dist/{index-5jhgatga.js → index-crta5wzv.js} +7 -6
  56. package/dist/{index-m34q25jj.js → index-d9zkmhz3.js} +143 -824
  57. package/dist/{index-pdmevfxv.js → index-dtb2c6ds.js} +5 -259
  58. package/dist/index-f6mqa5gk.js +1535 -0
  59. package/dist/index-j6zxnc8m.js +490 -0
  60. package/dist/{index-rkbf7dqg.js → index-mv8sb1ns.js} +5 -3
  61. package/dist/{index-xqxeypt5.js → index-mzydbzp8.js} +76 -4
  62. package/dist/{index-wg1sd3at.js → index-qfsrrnz6.js} +1 -1
  63. package/dist/{index-m82cfspw.js → index-sk3cap35.js} +877 -963
  64. package/dist/index-sstgcsr0.js +511 -0
  65. package/dist/index-wm9xeq1n.js +329 -0
  66. package/dist/index-xdbkcccf.js +719 -0
  67. package/dist/{index-s2k2edts.js → index-zxg4ve4j.js} +41 -1548
  68. package/dist/index.d.ts +3 -0
  69. package/dist/index.js +93 -77
  70. package/dist/internal/desktop/providers.d.ts +2 -0
  71. package/dist/models/catalog.d.ts +2 -0
  72. package/dist/persistence/sqlite-database.d.ts +1 -0
  73. package/dist/providers/azure-openai.d.ts +14 -0
  74. package/dist/providers/bedrock.d.ts +23 -0
  75. package/dist/providers/providers.d.ts +1 -1
  76. package/dist/runtime/durable-review-group.d.ts +33 -0
  77. package/dist/runtime/harness.d.ts +11 -0
  78. package/dist/runtime/run-interruption.d.ts +7 -0
  79. package/dist/runtime/shared-budget.d.ts +30 -0
  80. package/dist/runtime/task-continuity.d.ts +300 -77
  81. package/dist/service-cli.js +15 -11
  82. package/dist/{service-client-cli-fn54ev6w.js → service-client-cli-eqrdc9zq.js} +400 -305
  83. package/dist/verify-historical-migrations.js +1095 -505
  84. package/dist/zhx.js +27 -2
  85. package/docs/AUDIT_PACK.md +99 -0
  86. package/docs/AZURE_OPENAI.md +53 -0
  87. package/docs/BEDROCK.md +56 -0
  88. package/docs/CLI.md +15 -0
  89. package/docs/CLIENT_PROTOCOL.md +178 -0
  90. package/docs/CODE_RELEASE.md +31 -1
  91. package/docs/CODE_WEB_TASKS.md +116 -0
  92. package/docs/CONTEXT_ENGINEERING.md +59 -0
  93. package/docs/CREDENTIALS.md +21 -0
  94. package/docs/DURABLE_OPERATIONS.md +93 -1
  95. package/docs/ENGINE_API.md +5 -2
  96. package/docs/EXTENSIBILITY.md +2 -2
  97. package/docs/FIRST_USE.md +6 -6
  98. package/docs/MINIMUM_TASK_AUTHORITY.md +3 -3
  99. package/docs/PROJECT_MEMORY.md +1 -1
  100. package/docs/README.md +6 -1
  101. package/docs/STABILITY.md +3 -1
  102. package/docs/SUPPORT_MATRIX.md +1 -1
  103. package/docs/SUPPORT_MATRIX_1_1.md +1 -1
  104. package/docs/USAGE.md +3 -1
  105. package/docs/VERTEX.md +2 -2
  106. package/docs/WEB_LIMITS.md +4 -3
  107. package/docs/adr/0002-isolated-mcp-stdio.md +6 -3
  108. package/docs/support-matrix-1.1.json +3 -1
  109. package/docs/support-matrix.json +6 -4
  110. package/evaluations/code-task-ui.json +20 -0
  111. package/evaluations/representative-assembly-matrix.json +10 -1
  112. package/evaluations/task-projection.json +10 -0
  113. package/evaluations/task-recovery-lab.json +60 -0
  114. package/examples/README.md +3 -3
  115. package/package.json +23 -13
  116. package/dist/cli-entry-4ngptr62.js +0 -19900
  117. package/dist/index-m49jx72n.js +0 -220
@@ -451,3 +451,62 @@ unchanged; the model must issue a corrected request, and edits still require
451
451
  current read evidence and approval.
452
452
 
453
453
  Project memory is a separate kind of explicit operator context in the existing durable memory table. It is projected per request as untrusted data, with revision-based review and hard byte/entry budgets. It does not become project instructions or skills. See [Project memory](PROJECT_MEMORY.md).
454
+
455
+ ### Semantic compaction with bounded subagents
456
+
457
+ When semantic compaction and subagents are enabled without a shared budget
458
+ coordinator, Harness uses serial tool execution. This follows the SDK's supported
459
+ combination and retains its rejection of paid compaction with uncoordinated
460
+ parallel children. Callers cannot enable that incompatible combination by setting
461
+ `toolExecution.parallel` alone. Other runs retain their existing scheduling.
462
+
463
+ Applications can opt in to a shared token pool through the Beta
464
+ `HarnessRunOptions.sharedBudget` option:
465
+
466
+ ```ts
467
+ const result = await runHarness(harness, {
468
+ runId: "bounded-inspection-42",
469
+ prompt: "Inspect and review the API boundary."
470
+ }, {
471
+ sharedBudget: {
472
+ modelReservation: {
473
+ inputTokens: 20000, outputTokens: 1000, totalTokens: 21000
474
+ },
475
+ childModelReservation: {
476
+ inputTokens: 10000, outputTokens: 1000, totalTokens: 11000
477
+ }
478
+ }
479
+ });
480
+ ```
481
+
482
+ These example reservations are host-owned conservative bounds for each request,
483
+ not recommended limits for every model or task. Choose them for the admitted
484
+ route and context. The SDK coordinator reuses the configured parent input,
485
+ output and total ceilings, atomically admitting primary calls, child lifetime
486
+ allocations and auxiliary compaction. Each child has an SDK subpool inside its
487
+ parent allocation. There is no second Harness token ledger. A child allocation
488
+ that cannot fit fails before its model dispatch; unused or unknown consumption
489
+ is not converted into a fresh allowance. An individual model request is capped
490
+ at the reserved output, and an estimated input request above its reservation is
491
+ rejected before transport. The estimator is not a provider tokenizer or a billing
492
+ guarantee; actual over-reservation receipts are recorded and rejected by the SDK
493
+ before tool execution. Unknown receipts keep their allocation held.
494
+
495
+ Child allocations must satisfy the SDK's component-sum contract. Under the
496
+ existing default child ceilings (30000 input, 8000 output, 36000 total), shared
497
+ execution narrows the input allocation to 28000. It preserves the 36000 total
498
+ and 8000 output authorization; it never increases the total to 38000. The narrowed
499
+ budget is visible in the child runtime manifest. Legacy execution retains its
500
+ configured child ceilings.
501
+
502
+ The option requires finite token limits and uses the Harness scope. A resumed
503
+ run must use its original reservation policy and complete SDK budget ledger;
504
+ changing the policy, opting an existing legacy run into a fresh pool or restoring
505
+ only a run snapshot fails closed. Supply the same option on approval resumes.
506
+ The SDK also prevents resuming a bound run without its coordinator. Unknown
507
+ compaction or reservation consumption still requires operational reconciliation;
508
+ this tranche does not add a reconciliation API or clear reservations automatically.
509
+ Qwen routes are excluded from this option until an output-cap route is certified.
510
+ It does not add a service/wire-protocol field or enable this token pool for
511
+ application-owned review groups. Monetary accounting and its existing output
512
+ clamp remain separate. No provider calls are required by the regression suite.
@@ -68,6 +68,27 @@ the console offers to use the saved destination for this session or cancel. It n
68
68
  sends a managed key to an arbitrary shell-defined endpoint. Custom endpoints still
69
69
  require explicit environment credentials.
70
70
 
71
+ ## Amazon Bedrock
72
+
73
+ Converse does not store an API key. Set `AWS_REGION` or `AWS_DEFAULT_REGION` in
74
+ the launching environment and leave credentials to the AWS SDK default chain.
75
+ `AWS_PROFILE` selects a profile through that chain. The credentials screen
76
+ explains this and does not write a key.
77
+
78
+ `BEDROCK_RUNTIME=openai` requires an https `BEDROCK_OPENAI_BASE_URL`. The key
79
+ may be `BEDROCK_API_KEY` or `AWS_BEARER_TOKEN_BEDROCK` in the environment, or a
80
+ keychain/temporary `BEDROCK_API_KEY`. The base URL is not an override that
81
+ blocks a managed key. See [Bedrock](BEDROCK.md).
82
+
83
+ ## Azure OpenAI
84
+
85
+ Set an https `AZURE_OPENAI_ENDPOINT` before saving a key. Optional
86
+ `AZURE_OPENAI_API_VERSION` and `AZURE_OPENAI_DEPLOYMENTS` stay in the
87
+ environment and are not written to the keychain. A managed
88
+ `AZURE_OPENAI_API_KEY` is allowed together with that endpoint. Published
89
+ `@zhivex-ai/azure-openai@0.7.8` accepts a token provider, and this route still
90
+ stores and sends the API key. See [Azure OpenAI](AZURE_OPENAI.md).
91
+
71
92
  ## Qwen interactive setup
72
93
 
73
94
  Open `/credentials` → Qwen → save or temporary → Standard API or QwenCloud Token
@@ -70,7 +70,7 @@ Loading a run reconstructs its complete state for compatibility with approvals,
70
70
 
71
71
  Logical backups contain hydrated history rather than database references, so restoration does not require the original artifact tables. Exports up to 64 MiB retain the legacy JSON format; larger exports use the versioned `ZHIVEX-STATE-SEGMENTS-1` transport with bounded frames, including split strings. RC13 reads both formats and verifies the same logical checksum before import. Older versions cannot read segmented exports. File I/O and checksum serialization are incremental; the public backup/import APIs still hydrate the complete logical bundle in memory. Segmented files have no aggregate 64 MiB ceiling. A state-limit failure records a bounded terminal diagnostic on the last durable checkpoint; the unsaved payload is not claimed as preserved. Use `/status` to inspect the failed run before `/continue`. Recovery retains tool journal receipts and never re-executes an operation itself.
72
72
 
73
- The current candidate pins Core 1.31.0 and Agents 1.11.0. New stores require no
73
+ The current source pins Core 1.34.0 and Agents 1.11.0. New stores require no
74
74
  conversion. Before upgrading an existing shared SDK store, stop its workers and
75
75
  upgrade them together with a complete backup. Verified legacy runs retain their
76
76
  physical keys and remain readable; new runs use canonical keys that distinguish
@@ -277,3 +277,95 @@ approvals, and provider per-request limits remain enforced. Stored numeric token
277
277
  ceilings are inactive until `unlimitedTokens` is set back to `false`.
278
278
 
279
279
  Next-version [project memory](PROJECT_MEMORY.md) reuses the existing SDK memory table and state export records. Historical state is not harvested into curated memory. Forget/clear remove current memory content, while backups, run histories and SQLite WAL retention remain separate. Older importers reject the new reserved memory key safely.
280
+
281
+ ## Durable review groups (Beta)
282
+
283
+ `runHarnessReviewGroup` retains its ephemeral v1 contract. Applications can opt in
284
+ through `runHarnessDurableReviewGroup(harness, { groupId, prompt })`. The new API
285
+ uses the Harness scope, an application-owned root and a fixed roster of at most
286
+ two read-only explorer/reviewer members. This first implementation schedules
287
+ members serially. It requires a store with atomic idempotency claims, CAS saves
288
+ and fenced acquire/renew/release leases; the default SQLite backend supports them.
289
+ Custom stores must honor these contracts. No database schema migration is needed.
290
+
291
+ ```ts
292
+ import {
293
+ runHarnessDurableReviewGroup,
294
+ inspectHarnessReviewGroup,
295
+ cancelHarnessReviewGroup
296
+ } from "@zhivex-ai/harness";
297
+
298
+ const result = await runHarnessDurableReviewGroup(harness, {
299
+ groupId: "review-request-42",
300
+ prompt: "Inspect the public API boundary."
301
+ });
302
+ const snapshot = await inspectHarnessReviewGroup(harness, result.groupId);
303
+ // Cancellation can be requested from another worker using the same scope/store.
304
+ const cancellation = await cancelHarnessReviewGroup(harness, result.groupId);
305
+ ```
306
+
307
+ A repeated ID must have the same prompt, ordered profiles, scope and member
308
+ runtime bindings. A mismatch fails before a model request. Completed members
309
+ replay their durable receipts; an interrupted group resumes the original member
310
+ IDs. A concurrent caller receives a retryable state conflict while the group
311
+ worker lease is held. After a worker dies, wait for lease expiry before retrying.
312
+ Inspection reconstructs results without executing a member. Keep the complete
313
+ state store when backing up or restoring; deleting a root or member is not a
314
+ supported way to reset a request.
315
+
316
+ Execution statuses include `blocked`, `partial`, `waiting_approval`, `suspended`,
317
+ `timed_out`, `cancel_requested` and `cancelled`. `partial` means all members are
318
+ terminal and some completed while others did not. Completion describes execution;
319
+ existing evidence and acceptance contracts still determine acceptance. The root
320
+ is visible to ordinary run inspection; its SDK status maps `partial` to `failed`,
321
+ and `blocked` maps to `suspended`, with the richer value in `harnessReviewGroupStatusV1`. Use group inspection for
322
+ the full result. Approvals are not automatically resumed by this API.
323
+
324
+ Cancellation records intention under the same fenced root lease used for fresh
325
+ member admission. Each admission is recorded before claiming a child checkpoint.
326
+ Subsequent model requests also check the root before dispatch. Already admitted
327
+ requests can finish late; cancellation does not roll back an external effect.
328
+ Terminal children are preserved, and active children receive durable cancellation
329
+ requests. Inactive queued, approval or suspended checkpoints become cancelled.
330
+ Once the group worker sees an in-flight member return, a child left at
331
+ `cancel_requested` is settled to `cancelled` before the root snapshot is saved.
332
+ Inspection while that request is still in flight stays `cancel_requested`.
333
+ Confirmation requires every admitted child to have a terminal checkpoint. A cut
334
+ between recorded admission and child persistence remains `cancel_requested`
335
+ because the claim is uncertain; this tranche does not provide an automatic
336
+ reconciliation API for that cut. Repeated cancellation rechecks the fixed roster.
337
+
338
+ Generic cancellation of the root also closes group admission, but callers should
339
+ use the group cancellation API to preserve terminal member receipts; the SDK
340
+ 's generic tree-cancellation semantics are unchanged.
341
+
342
+ This fence applies to the opt-in application-owned review group. It does not fix
343
+ the SDK's general parent/subagent admission and cancellation primitives. No
344
+ exactly-once guarantee for external effects, distributed scheduling or research
345
+ workflow acceptance is implied. Model tests use only offline mocks. Regressions
346
+ in `tests/durable-review-group.test.ts` cover repeated identity, interruption,
347
+ terminal preservation, concurrent callers and separate-process SQLite control.
348
+
349
+ Terminal replay reconciles the root's persisted status, member summaries and richer
350
+ group status before returning, including recovery after a cut following child
351
+ completion. Cancellation also reconciles its reconstructed projection. Internal
352
+ worker checkpoints are children of the group: they become `running` while leased,
353
+ `suspended` after an interrupted or blocked attempt, and terminal only after the
354
+ root's terminal projection is persisted. Recovery repairs an idle legacy worker
355
+ without taking ownership from a live worker. Default terminal cleanup can collect
356
+ finished groups and their workers; suspended coordination remains resumable.
357
+
358
+ New member records include an optional `checkpointed` marker, saved after the SDK
359
+ child claim and before request dispatch. If a previously persisted child disappears,
360
+ recovery blocks before transport and requires the complete backup. Existing records
361
+ without that marker remain readable; admitted members with missing receipts are
362
+ conservatively blocked. Admission and model dispatch also recheck receipt presence
363
+ under the root lock, so a stale caller snapshot cannot bypass the guard. Cleanup
364
+ while a group is active can remove an older terminal child's receipt and leave the
365
+ group blocked; it must not be used to reset or restart that child. Cancellation may
366
+ remain uncertain in this case. Retention deleting the entire group expires its
367
+ stored identity; no permanent deduplication beyond retained state is promised.
368
+
369
+ Groups modified by the checkpoint-marker fix require a current artifact. Older
370
+ artifacts with strict pre-marker schemas cannot read the additional marker;
371
+ downgrades require restoring a complete pre-upgrade backup.
@@ -1,7 +1,7 @@
1
1
  # Engine API and Code integration
2
2
 
3
- This checkout adds terminal-independent package entrypoints for
4
- Harness 1.3.0 (published and verified on `latest`). They are not present in the previously published Harness 1.2.0.
3
+ The terminal-independent package entrypoints shipped in Harness 1.3.0 and remain
4
+ in published Harness 1.4.0 (npm `latest`). This checkout is Harness 1.4.1, pending publication. They are not present in Harness 1.2.0.
5
5
  The protected workflow validated the exact stable tarball, live gates and
6
6
  registry integrity/provenance; local candidate smoke remains contributor evidence. Do not install registry 1.2.0 and
7
7
  expect the new entrypoints to exist.
@@ -18,6 +18,7 @@ expect the new entrypoints to exist.
18
18
  | `@zhivex-ai/harness/code-support` | Named host helpers used by Code, including a read-only SQLite diagnostic projection | Node |
19
19
  | `@zhivex-ai/harness/models` | Beta catalog schemas, bundled metadata, model selection and display helpers; no host loading | Browser or Node |
20
20
  | `@zhivex-ai/harness/mcp/stdio/v1` | Experimental host admission, isolated MCP sessions, recovery and reconciliation; see [host flow](MCP_STDIO.md) | Node or Bun |
21
+ | `@zhivex-ai/harness/audit` | Experimental audit pack export and HMAC verification; see [audit pack](AUDIT_PACK.md) | Node |
21
22
  | `@zhivex-ai/harness/desktop/v1/state` | Versioned host-only snapshot, validation, safe-file-read and lease handoff operations for Desktop updates | Node |
22
23
 
23
24
  [`contracts/engine-api.json`](../contracts/engine-api.json) enumerates every named
@@ -208,6 +209,8 @@ Publishing Code requires a compatible Harness release, authenticated scope/name
208
209
  verification and the release compatibility gates in
209
210
  [ADR 0001](https://github.com/Zhivex/zhivex-harness/blob/main/docs/adr/0001-harness-code-public-boundary.md).
210
211
  Local packing does not establish npm permissions or public availability.
212
+ The additive [task projection v1](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73) exposes existing task evidence through the client/service without moving execution or judgment into a renderer. `/protocol` exports its bounded schema and pure snapshot reducer.
213
+
211
214
  ## Experimental task acceptance contracts
212
215
 
213
216
  `runHarness(host, input, { taskAcceptance })` accepts application-owned requirements
@@ -4,11 +4,11 @@ Zhivex Harness `0.11.x` combines governed external tools and bounded multi-agent
4
4
 
5
5
  ## Provider registry
6
6
 
7
- Built-in registrations are Meta, Qwen, OpenAI, and Gemini. Each registration owns its descriptor, default model, credential names, capability/support labels, factory, and declarative diagnostics. The registry never dynamically imports provider code or returns credential/endpoint values from diagnostics.
7
+ Built-in registrations are Meta, Qwen, OpenAI, Gemini, Anthropic, Vertex, Amazon Bedrock, and Azure OpenAI. Bedrock and Azure OpenAI are provisional and are not part of the default live certification cohort. Each registration owns its descriptor, default model, credential names, capability/support labels, factory, and declarative diagnostics. The registry never dynamically imports provider code or returns credential/endpoint values from diagnostics.
8
8
 
9
9
  Library callers can use `DEFAULT_PROVIDER_REGISTRY`, `BUILTIN_PROVIDER_REGISTRATIONS`, `createProviderRegistry`, or `DEFAULT_PROVIDER_REGISTRY.extend(...)`, then pass the registry to `resolveHarnessConfig`, `createProviderModel`, provider diagnostics, or `createHarness({ providerRegistry })`. Registration IDs, environment-variable names, defaults, diagnostics, and factories are validated before they become selectable.
10
10
 
11
- The coordinated stable SDK batch pins `@zhivex-ai/agents@1.11.0`, `@zhivex-ai/core@1.31.0`, `@zhivex-ai/meta@0.2.9`, `@zhivex-ai/qwen@0.16.4`, `@zhivex-ai/openai@0.14.1`, `@zhivex-ai/gemini@0.13.0`, `@zhivex-ai/anthropic@0.13.2`, and `@zhivex-ai/vertex@1.2.4`. Qwen 0.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.31.0 satisfies the updated Agents, Anthropic, OpenAI and Vertex `^1.30.0` ranges and Qwen `^1.29.0` range. These exact versions are pinned in the lockfile. Stable SDK publication does not replace Harness release-bound certification. Qwen `0.11.x` normalizes missing, placeholder, and continuation tool-call identifiers inside the adapter; Harness retains its deterministic provider-boundary normalizer as defense in depth until the exact candidate passes the complete release-bound representative matrix. A Core override keeps one runtime contract identity across every adapter, while Core `1.13.0` corrects compaction usage accounting and interaction-group retention. OpenAI `0.11.2` preserves synthetic assistant history in Responses, so the harness no longer requires its compaction transport or accounting workarounds.
11
+ The coordinated stable SDK batch pins `@zhivex-ai/agents@1.11.0`, `@zhivex-ai/core@1.34.0`, `@zhivex-ai/meta@0.2.9`, `@zhivex-ai/qwen@0.16.4`, `@zhivex-ai/openai@0.16.0`, `@zhivex-ai/gemini@0.13.0`, `@zhivex-ai/anthropic@0.14.0`, `@zhivex-ai/vertex@1.2.7`, `@zhivex-ai/bedrock@2.0.7`, and `@zhivex-ai/azure-openai@0.7.8`. Qwen 0.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.34.0 satisfies Agents, OpenAI and Vertex `^1.31.0`, Anthropic `^1.30.0`, Qwen `^1.29.0`, and the provisional Bedrock and Azure OpenAI `^1.34.0` ranges. These exact versions are pinned in the lockfile. Stable SDK publication does not replace Harness release-bound certification. Qwen `0.11.x` normalizes missing, placeholder, and continuation tool-call identifiers inside the adapter; Harness retains its deterministic provider-boundary normalizer as defense in depth until the exact candidate passes the complete release-bound representative matrix. A Core override keeps one runtime contract identity across every adapter, while Core `1.13.0` corrects compaction usage accounting and interaction-group retention. OpenAI `0.11.2` preserves synthetic assistant history in Responses, so the harness no longer requires its compaction transport or accounting workarounds.
12
12
 
13
13
  OpenAI is based on the GPT-5.6 family: `gpt-5.6-luna` is the default, with `gpt-5.6-terra` and `gpt-5.6-sol` available through `--model`. Availability remains organization-dependent while the upstream family is in limited preview, and the adapter uses the Responses API by default.
14
14
 
package/docs/FIRST_USE.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # First use
2
2
 
3
- This guide targets stable `1.4.0`, pending publication to npm `latest`. The versioned install commands below become available only after protected publication. npm `latest` remains stable 1.3.0 until that publication.
3
+ This guide targets stable `1.4.1`, pending publication to npm `latest`. The versioned install commands below become available only after protected publication. npm `latest` remains stable 1.3.0 until that publication.
4
4
 
5
5
  ## Install and start
6
6
 
7
7
  Install Node.js 22.13.0 or newer and Git. Then:
8
8
 
9
9
  ```sh
10
- npm install -g @zhivex-ai/harness@1.4.0
10
+ npm install -g @zhivex-ai/harness@1.4.1
11
11
  cd /path/to/your/project
12
12
  zhx
13
13
  ```
@@ -82,16 +82,16 @@ For command execution, configure [OCI isolation](EXECUTION_ENVIRONMENTS.md).
82
82
  With Bun 1.4.0 or newer and a supported Node runtime:
83
83
 
84
84
  ```sh
85
- bun add --global @zhivex-ai/harness@1.4.0
85
+ bun add --global @zhivex-ai/harness@1.4.1
86
86
  zhx
87
87
  ```
88
88
 
89
89
  For a disposable version/help/environment check without a global installation:
90
90
 
91
91
  ```sh
92
- bunx @zhivex-ai/harness@1.4.0 --version
93
- bunx @zhivex-ai/harness@1.4.0 --help
94
- bunx @zhivex-ai/harness@1.4.0 doctor
92
+ bunx @zhivex-ai/harness@1.4.1 --version
93
+ bunx @zhivex-ai/harness@1.4.1 --help
94
+ bunx @zhivex-ai/harness@1.4.1 doctor
95
95
  ```
96
96
 
97
97
  For source development, use the [contributor guide](https://github.com/Zhivex/zhivex-harness/blob/main/CONTRIBUTING.md).
@@ -52,10 +52,10 @@ dispatch/cap behavior, not provider billing guarantees or model quality.
52
52
 
53
53
  | Route | Direct guided task | Verified wire cap and dispatch boundary |
54
54
  | --- | --- | --- |
55
- | Built-in OpenAI (`@zhivex-ai/openai` 0.14.1) | Supported | Responses `max_output_tokens`; Chat `max_tokens` without reasoning or `max_completion_tokens` with reasoning; `maxRetries=0`, `maxProviderRequests=1` |
56
- | Built-in Anthropic API key (`@zhivex-ai/anthropic` 0.13.2) | Supported | Messages `max_tokens`; non-refreshable built-in credentials; `maxRetries=0` |
55
+ | Built-in OpenAI (`@zhivex-ai/openai` 0.16.0) | Supported | Responses `max_output_tokens`; Chat `max_tokens` without reasoning or `max_completion_tokens` with reasoning; `maxRetries=0`, `maxProviderRequests=1` |
56
+ | Built-in Anthropic API key (`@zhivex-ai/anthropic` 0.14.0) | Supported | Messages `max_tokens`; non-refreshable built-in credentials; `maxRetries=0` |
57
57
  | Built-in Gemini (`@zhivex-ai/gemini` 0.13.0) | Supported | `generationConfig.maxOutputTokens`; `maxRetries=0` |
58
- | Built-in Vertex (`@zhivex-ai/vertex` 1.2.4) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `maxRetries=0` |
58
+ | Built-in Vertex (`@zhivex-ai/vertex` 1.2.7) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `maxRetries=0` |
59
59
  | Qwen (`@zhivex-ai/qwen` 0.16.4) | Blocked as Code primary | Explicit Chat-mode middleware tested with capped `max_tokens`; Code has no explicit mode selector and Responses rejects `maxTokens` |
60
60
  | Meta | Blocked | Harness continuation fetch can replay a 400 response outside SDK retry admission |
61
61
  | Injected/custom adapters, refreshable Anthropic OAuth | Blocked | No vetted transport provenance; OAuth transport can replay a 401 after refresh outside ordinary retry admission |
@@ -7,7 +7,7 @@ generated automatically; hosts may submit a suggestion for operator review.
7
7
 
8
8
  ## CLI
9
9
 
10
- Use `zhx` or `zhivex-code` with Harness 1.4.0 (Code 0.3.0), pending publication. Commands
10
+ Use `zhx` or `zhivex-code` with Harness 1.4.1 (Code 0.3.1), pending publication. Commands
11
11
  print bounded JSON, including the selected workspace/scope hashes. Quote content
12
12
  as one argument. Memory commands do not start a model or read credentials.
13
13
 
package/docs/README.md CHANGED
@@ -9,6 +9,8 @@ Start with [First use](FIRST_USE.md). You only need `zhx` for everyday conversat
9
9
  - [Usage reference](USAGE.md): scripts, providers and security boundaries.
10
10
  - [Model catalog administration](MODEL_CATALOG.md): shared CLI/Desktop recommendations and remote distribution.
11
11
  - [Anthropic direct API](ANTHROPIC.md): provisional setup and continuity contract.
12
+ - [Amazon Bedrock](BEDROCK.md): provisional Converse and OpenAI-compatible routes.
13
+ - [Azure OpenAI](AZURE_OPENAI.md): provisional endpoint, deployment, and API-key route.
12
14
  - [Credentials](CREDENTIALS.md): system keychain, temporary keys and automation.
13
15
  - [Project instructions and context](CONTEXT_ENGINEERING.md).
14
16
  - [Execution environments](EXECUTION_ENVIRONMENTS.md): isolated command execution.
@@ -23,9 +25,12 @@ Start with [First use](FIRST_USE.md). You only need `zhx` for everyday conversat
23
25
  - [CLI reference](CLI.md): command options, JSON/JSONL and exit codes.
24
26
  - [Extensibility](EXTENSIBILITY.md): providers, MCP, routing and subagents.
25
27
  - [API stability](STABILITY.md) and [deprecations](DEPRECATIONS.md).
26
- - [Local service](LOCAL_SERVICE.md) and [client protocol](CLIENT_PROTOCOL.md).
28
+ - [Local service](LOCAL_SERVICE.md) and [client protocol](CLIENT_PROTOCOL.md), including the experimental [task evidence read](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73).
29
+ - [Code web tasks](CODE_WEB_TASKS.md): operator review and explicit snapshot acceptance before continuation.
30
+ - [Installed recovery laboratory](https://github.com/Zhivex/zhivex-harness/blob/main/docs/TASK_RECOVERY_LAB.md): contributor fixtures for the evidence read. The laboratory guide stays in the repository and is not part of the published package.
27
31
  - [Experimental ACP text sessions](ACP.md) and [workspace checkpoint restoration](WORKSPACE_CHECKPOINTS.md).
28
32
  - [Durable operations](DURABLE_OPERATIONS.md), [repository editing](REPOSITORY_EDITING.md) and [change envelopes](CHANGE_ENVELOPES.md).
33
+ - [Audit pack](AUDIT_PACK.md): experimental signed export of one run or guided task.
29
34
  - [Threat model](THREAT_MODEL.md) and [public repository security](PUBLIC_SECURITY.md).
30
35
 
31
36
  ## Contribute and maintain
package/docs/STABILITY.md CHANGED
@@ -18,6 +18,8 @@ Beta APIs may change in a minor with changelog and migration guidance. Experimen
18
18
 
19
19
  The host-only `/mcp/stdio/v1` entry point and `CreateHarnessOptions.isolatedMcpSession` option are experimental additive capabilities. Workspace MCP configuration does not enable stdio; see [host admission and lifecycle](MCP_STDIO.md).
20
20
 
21
- The semantic compactor, compaction recommendations, declarative tool policy (including `toolPolicyFile` and `--tool-policy`), progress monitor, ACP text-session adapter, and workspace checkpoint restoration APIs are experimental. ACP implements the documented text-session subset; it does not claim full editor interoperability. Deterministic compaction and the existing client protocol remain available. See [tool policy semantics](TOOL_POLICY.md), [ACP limitations](ACP.md), [context behavior](CONTEXT_ENGINEERING.md), and [checkpoint constraints](WORKSPACE_CHECKPOINTS.md).
21
+ The semantic compactor, compaction recommendations, declarative tool policy (including `toolPolicyFile` and `--tool-policy`), progress monitor, ACP text-session adapter, workspace checkpoint restoration APIs, and the `@zhivex-ai/harness/audit` subpath are experimental. `export-audit` and `verify-audit` are additive CLI commands. Their `--out` and `--signing-key-file` flags stay outside `CLI_OPTION_NAMES` and `CLI_COMMAND_OPTION_CONTRACTS`, so the stable option tuple and command-option declaration do not change. See [audit pack](AUDIT_PACK.md). ACP implements the documented text-session subset; it does not claim full editor interoperability. Deterministic compaction and the existing client protocol remain available. See [tool policy semantics](TOOL_POLICY.md), [ACP limitations](ACP.md), [context behavior](CONTEXT_ENGINEERING.md), and [checkpoint constraints](WORKSPACE_CHECKPOINTS.md).
22
+
23
+ Task evidence reads (`task.get`, capability `task.projection.v1`) and operator task controls (`task.start`, `task.review`, `task.keep`, `task.revise`, `task.continue`, capability `task.control.v1`) are experimental additions on client protocol major 1. They do not change protocol version 1, existing command meanings, or the stable declaration signature baseline. The browser-safe projection schema and reducer are experimental exports of the existing `/protocol` entry. See [task projection](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73) and [task controls](CLIENT_PROTOCOL.md#task-controls-code-hu-05-experimental).
22
24
 
23
25
  Before `1.0.0-rc.1`, maintainers classified every current runtime and type export as stable, beta, or experimental. The gate rejects unreviewed additions, removals, omissions, and membership in more than one tier so future stability changes remain deliberate. Root aliases remain available during 1.x; any future beta subpath must be additive until the next major release.
@@ -10,7 +10,7 @@ The machine-readable source is [`support-matrix.json`](./support-matrix.json). `
10
10
  | OCI | Docker on Linux | — | Podman | managed remote sandbox |
11
11
  | Target package manager | npm | Bun | pnpm, Yarn | — |
12
12
  | MCP | bounded Streamable HTTP | — | broader remote implementations | stdio |
13
- | Provider | Meta `muse-spark-1.2`, Qwen `qwen3.8-max`, OpenAI `gpt-5.6-luna` | — | Gemini, Anthropic, Vertex (ADC) | undocumented providers |
13
+ | Provider | Meta `muse-spark-1.3-contributor`, Qwen `qwen3.8-flash`, OpenAI `gpt-6-luna` | — | Gemini, Anthropic, Vertex (ADC), Amazon Bedrock, Azure OpenAI | undocumented providers |
14
14
 
15
15
  Provider evidence is release-, account-, endpoint-, model-, and date-bound. A provider is supported for a release only when the exact candidate passes base, orchestration, routing, and model-directed execution gates. The table does not imply upstream feature parity.
16
16
 
@@ -10,7 +10,7 @@ The machine-readable source is [`support-matrix-1.1.json`](./support-matrix-1.1.
10
10
  | OCI | Docker on Linux | — | Podman | managed remote sandbox |
11
11
  | Target package manager | npm | Bun | pnpm, Yarn | — |
12
12
  | MCP | bounded Streamable HTTP | — | broader remote implementations | stdio |
13
- | Provider | Meta `muse-spark-1.3`, Qwen `qwen3.8-max`, OpenAI `gpt-6-luna` | — | Gemini | undocumented providers |
13
+ | Provider | Meta `muse-spark-1.3`, Qwen `qwen3.8-max`, OpenAI `gpt-6-luna` | — | Gemini, Amazon Bedrock, Azure OpenAI | undocumented providers |
14
14
 
15
15
  Provider evidence is release-, account-, endpoint-, model-, and date-bound. A provider is supported for a release only when the exact candidate passes base, orchestration, routing, and model-directed execution gates. The table does not imply upstream feature parity.
16
16
 
package/docs/USAGE.md CHANGED
@@ -149,8 +149,10 @@ zhivex-harness run --execution oci --oci-shell ask "use a reviewed shell pipelin
149
149
  | Qwen | `qwen3.8-max` | `DASHSCOPE_API_KEY` or `QWEN_API_KEY` · RC.10 default; fresh release-bound certification pending. |
150
150
  | OpenAI | `gpt-6-luna` | `OPENAI_API_KEY` · new default; fresh release-bound certification required |
151
151
  | Gemini | `gemini-3.6-flash` | `GEMINI_API_KEY` or `GOOGLE_GENERATIVE_AI_API_KEY` · provisional until the harness live matrix passes |
152
+ | Amazon Bedrock | `anthropic.claude-haiku-5-5` | AWS credential chain plus `AWS_REGION` or `AWS_DEFAULT_REGION` · provisional; `BEDROCK_RUNTIME=openai` is a separate Tier A path and is not live-certified |
153
+ | Azure OpenAI | `gpt-5.4` | `AZURE_OPENAI_API_KEY` and https `AZURE_OPENAI_ENDPOINT` · provisional until the harness live matrix passes |
152
154
 
153
- Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, `OPENAI_BASE_URL`, and `GEMINI_BASE_URL`. Non-credential transport settings are hash-bound to durable resumes without persisting their values.
155
+ Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, `OPENAI_BASE_URL`, and `GEMINI_BASE_URL`. Bedrock also reads `AWS_REGION`, `AWS_DEFAULT_REGION`, `AWS_PROFILE`, `BEDROCK_RUNTIME`, and `BEDROCK_OPENAI_BASE_URL`. Azure OpenAI also reads `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_VERSION`, and `AZURE_OPENAI_DEPLOYMENTS`. Non-credential transport settings are hash-bound to durable resumes without persisting their values.
154
156
 
155
157
  The exact `v1.0.0` release passed protected base, delegation, routing and model-directed OCI gates for Meta, Qwen and OpenAI on 2026-09-20. The representative matrix passed 14/14 cases per provider on its authorized second attempt. Gemini remains provisional. See the [release evidence](https://github.com/Zhivex/zhivex-harness/blob/main/docs/LIVE_CERTIFICATION.md#current-public-status) for artifact identity and the preserved first-attempt failure. Controlled and official-SDK MCP interoperability are separate transport evidence. Credential detection and deterministic tests do not replace real provider certification.
156
158
 
package/docs/VERTEX.md CHANGED
@@ -44,7 +44,7 @@ Errors expose bounded categories for authentication, permission, unavailable
44
44
  model/route, rate limit and server failures. Raw Google payloads, token values,
45
45
  credential paths and service-account identities are not retained in errors.
46
46
 
47
- The integration pins `@zhivex-ai/vertex@1.1.2` with Core 1.26.0 and
48
- `google-auth-library@11.0.2`. Deterministic tests exercise the installed SDK's
47
+ The integration pins `@zhivex-ai/vertex@1.2.7` with Core 1.34.0 and
48
+ `google-auth-library@11.1.0`. Deterministic tests exercise the installed SDK's
49
49
  transport, streaming, signed continuation, approval/reopen and route mismatch.
50
50
  They are not evidence of a live project, renewable ADC or IAM authorization.
@@ -3,8 +3,9 @@
3
3
  New interactive Web/terminal tasks have no accumulated spend, token, step,
4
4
  tool-call or duration cap unless configured. This change uses the published SDK contract from
5
5
  Zhivex/zhivex-ai-sdk PR 142 (Core/SDK 1.31.0, Agents 1.11.0). Direct Harness, Code
6
- and Web Core/Agents pins and the root Core override use those verified releases.
7
- Provider package pins, headless policies and release gates remain unchanged.
6
+ and the root Core override now pin Core 1.34.0; Agents stays 1.11.0.
7
+ Provider package pins are Anthropic 0.14.0, OpenAI 0.16.0 and Vertex 1.2.7.
8
+ Headless policies and release gates remain unchanged.
8
9
 
9
10
  The Web header opens the approved gradual configuration modal. Next task settings
10
11
  override project settings once, including an empty override. Project settings
@@ -21,7 +22,7 @@ Unsupported pricing tiers and unaccounted auxiliary usage make the estimate
21
22
  unavailable. The price source is visible on the run. No money is reserved and this
22
23
  is not a guaranteed financial cap.
23
24
 
24
- **Avisar** records a notice and lets the run continue. **Detener** requests the
25
+ **Notify** records a notice and lets the run continue. **Stop** requests the
25
26
  existing active-run cancellation once, after observing the threshold. An in-flight
26
27
  operation or final response can exceed it; completed work is not rolled back.
27
28
  Consumption and durable effects remain recorded. Cancellation produces a cancelled
@@ -16,9 +16,12 @@ activate stdio, change configuration schema 1, or claim isolated execution passe
16
16
  private workspace volume and optional read-only dependencies. Its adapter has
17
17
  finite `run`/`runBatch`, not an interactive stdio process lease. All MCP is
18
18
  currently rejected with OCI enforcement before discovery.
19
- - Installed `@zhivex-ai/core` 1.26.0 exposes `McpClient`, call options with abort,
20
- timeout/idempotency key, and an HTTP transport; no executable stdio factory was
21
- found in this dependency. The control-plane transport enum is not an executor.
19
+ - At this proposal, installed `@zhivex-ai/core` 1.26.0 exposed `McpClient`, call
20
+ options with abort, timeout/idempotency key, and an HTTP transport; no executable
21
+ stdio factory was found in that dependency. The control-plane transport enum is
22
+ not an executor.
23
+ - The current pin is `@zhivex-ai/core` 1.34.0, which includes an experimental
24
+ stdio client. Harness still does not treat that factory as the OCI boundary.
22
25
 
23
26
  MCP stdio uses UTF-8 newline-delimited JSON-RPC on stdin/stdout; stderr is a
24
27
  separate diagnostic stream. Preserve message correlation and initialization.
@@ -24,6 +24,8 @@
24
24
  { "id": "provider-meta", "dimension": "provider", "target": "Meta muse-spark-1.3", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", ".github/workflows/release.yml"] },
25
25
  { "id": "provider-qwen", "dimension": "provider", "target": "Qwen qwen3.8-max", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", ".github/workflows/release.yml"] },
26
26
  { "id": "provider-openai", "dimension": "provider", "target": "OpenAI gpt-6-luna", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", ".github/workflows/release.yml"] },
27
- { "id": "provider-gemini", "dimension": "provider", "target": "Gemini gemini-3.6-flash / 3.7-flash", "level": "provisional", "evidence": ["docs/LIVE_CERTIFICATION.md"] }
27
+ { "id": "provider-gemini", "dimension": "provider", "target": "Gemini gemini-3.6-flash / 3.7-flash", "level": "provisional", "evidence": ["docs/LIVE_CERTIFICATION.md"] },
28
+ { "id": "provider-bedrock", "dimension": "provider", "target": "Amazon Bedrock Converse / OpenAI-compatible runtime", "level": "provisional", "evidence": ["docs/BEDROCK.md", "tests/bedrock-provider.test.ts"] },
29
+ { "id": "provider-azure-openai", "dimension": "provider", "target": "Azure OpenAI", "level": "provisional", "evidence": ["docs/AZURE_OPENAI.md", "tests/azure-openai-provider.test.ts"] }
28
30
  ]
29
31
  }
@@ -21,11 +21,13 @@
21
21
  { "id": "pm-yarn", "dimension": "target-package-manager", "target": "Yarn", "level": "provisional", "evidence": ["tests/package-manager.test.ts"] },
22
22
  { "id": "mcp-http", "dimension": "mcp-transport", "target": "bounded Streamable HTTP JSON-RPC", "level": "supported", "evidence": ["scripts/mcp-interoperability-smoke.ts", "scripts/mcp-official-sdk-smoke.ts"] },
23
23
  { "id": "mcp-stdio", "dimension": "mcp-transport", "target": "stdio", "level": "unsupported", "evidence": ["SUPPORT.md"] },
24
- { "id": "provider-meta", "dimension": "provider", "target": "Meta muse-spark-1.2", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
25
- { "id": "provider-qwen", "dimension": "provider", "target": "Qwen qwen3.8-max", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
26
- { "id": "provider-openai", "dimension": "provider", "target": "OpenAI gpt-5.6-luna", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
24
+ { "id": "provider-meta", "dimension": "provider", "target": "Meta muse-spark-1.3-contributor", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
25
+ { "id": "provider-qwen", "dimension": "provider", "target": "Qwen qwen3.8-flash", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
26
+ { "id": "provider-openai", "dimension": "provider", "target": "OpenAI gpt-6-luna", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
27
27
  { "id": "provider-vertex", "dimension": "provider", "target": "Google Cloud Vertex AI (ADC)", "level": "provisional", "evidence": ["docs/VERTEX.md", "tests/vertex-provider.test.ts", "tests/vertex-auth.test.ts"] },
28
28
  { "id": "provider-anthropic", "dimension": "provider", "target": "Anthropic direct API / claude-sonnet-5", "level": "provisional", "evidence": ["docs/ANTHROPIC.md"] },
29
- { "id": "provider-gemini", "dimension": "provider", "target": "Gemini gemini-3.6-flash / 3.7-flash", "level": "provisional", "evidence": ["docs/LIVE_CERTIFICATION.md"] }
29
+ { "id": "provider-gemini", "dimension": "provider", "target": "Gemini gemini-3.6-flash / 3.7-flash", "level": "provisional", "evidence": ["docs/LIVE_CERTIFICATION.md"] },
30
+ { "id": "provider-bedrock", "dimension": "provider", "target": "Amazon Bedrock Converse / OpenAI-compatible runtime", "level": "provisional", "evidence": ["docs/BEDROCK.md", "tests/bedrock-provider.test.ts"] },
31
+ { "id": "provider-azure-openai", "dimension": "provider", "target": "Azure OpenAI", "level": "provisional", "evidence": ["docs/AZURE_OPENAI.md", "tests/azure-openai-provider.test.ts"] }
30
32
  ]
31
33
  }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "story": "CODE-HU-05",
4
+ "scope": "automated installed UI/service/engine plus retained HU75 recovery laboratory",
5
+ "fixtureSha256": "473a9e2144b0042b1b46ef54f915de693045df89d6175bde42a3393d2b083263",
6
+ "browserScenarios": [
7
+ "normal-task-review-accept",
8
+ "reload-without-replay",
9
+ "two-tabs-obsolete-review-and-edit-back",
10
+ "corrected-task-explicit-continuation-double-click",
11
+ "workspace-switch-without-stale-evidence-or-replay",
12
+ "slow-cancel-unknown-usage-blocks-continuation",
13
+ "process-restart-handoff-without-transcript-or-replay"
14
+ ],
15
+ "requiredEvidence": ["exact artifact binding before and after execution", "native check receipts", "desktop and mobile screenshots", "zero automatic effect replay", "retained unknown usage", "scripted operator acknowledgement separately labeled"],
16
+ "liveProvider": false,
17
+ "humanPilotPerformed": false,
18
+ "humanMinutes": null,
19
+ "realCostPerAcceptedTask": null
20
+ }
@@ -62,7 +62,8 @@
62
62
  "v1.4.0-rc.6",
63
63
  "v1.4.0-rc.7",
64
64
  "v1.4.0-rc.8",
65
- "v1.4.0"
65
+ "v1.4.0",
66
+ "v1.4.1"
66
67
  ],
67
68
  "expectedModels": [
68
69
  {
@@ -552,6 +553,14 @@
552
553
  "qwen": "qwen3.8-flash",
553
554
  "openai": "gpt-6-luna"
554
555
  }
556
+ },
557
+ {
558
+ "releaseTag": "v1.4.1",
559
+ "models": {
560
+ "meta": "muse-spark-1.3-contributor",
561
+ "qwen": "qwen3.8-flash",
562
+ "openai": "gpt-6-luna"
563
+ }
555
564
  }
556
565
  ],
557
566
  "expectedCases": [
@@ -0,0 +1,10 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "story": "HAR-HU-73",
4
+ "lineage": "Restacked onto current main. Fixture identity is fixtureSha256, not a closed stack commit.",
5
+ "fixtureSha256": "473a9e2144b0042b1b46ef54f915de693045df89d6175bde42a3393d2b083263",
6
+ "installedScenarios": ["negotiation-version", "snapshot-read-only", "host-redaction", "duplicate-out-of-order", "artifact-scope", "cursor-expiry-replay", "paused-host-read", "restart-new-epoch", "artifact-drift", "legacy-budget"],
7
+ "excluded": ["CODE-05 UI", "live providers", "external pilot", "concurrent host takeover", "non-native execution", "semantic acceptance", "release"],
8
+ "fixtureSource": "HAR75 phase-one greeting oracle; unchanged bytes",
9
+ "runner": "scripts/task-recovery-lab-installed.mjs, optional sixth argument projection"
10
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "HAR-HU-75-base-lab",
4
+ "scopeDecision": "HAR-HU-61",
5
+ "measurementConsumer": "HAR-HU-74 (not executed)",
6
+ "lineage": "Restacked onto current main with the task evidence read. Fixture identity is fixtureSha256, not a closed stack commit.",
7
+ "fixtureSha256": "473a9e2144b0042b1b46ef54f915de693045df89d6175bde42a3393d2b083263",
8
+ "installedScenarios": [
9
+ "failed-start",
10
+ "exhaustion-after-work",
11
+ "native-path-boundary",
12
+ "normal-control",
13
+ "contract-artifact-drift",
14
+ "obsolete-approval",
15
+ "concurrent-cancel-unknown-usage",
16
+ "concurrent-cancel-late-usage",
17
+ "disk-full-final-save",
18
+ "compaction-untrusted-evidence",
19
+ "crash-before-receipt",
20
+ "crash-after-receipt",
21
+ "service-disconnect"
22
+ ],
23
+ "limits": {
24
+ "singleWriter": true,
25
+ "backend": "native",
26
+ "store": "sqlite",
27
+ "maxSteps": 16,
28
+ "maxToolCalls": 40,
29
+ "timeoutMs": 150000,
30
+ "inputTokens": 60000,
31
+ "outputTokens": 8192,
32
+ "totalTokens": 68192,
33
+ "liveProvider": false,
34
+ "humanMeasurement": false
35
+ },
36
+ "sourceRegressions": [
37
+ "tests/task-continuity.test.ts",
38
+ "tests/task-cancellation-host.test.ts",
39
+ "tests/task-cancellation-transport.test.ts",
40
+ "tests/task-budget-accounting.test.ts",
41
+ "tests/task-budget-compatibility.test.ts",
42
+ "tests/local-service.test.ts",
43
+ "tests/local-service-recovery.test.ts",
44
+ "tests/governance-report.test.ts",
45
+ "tests/governance-context.test.ts",
46
+ "tests/tool-policy-paths.test.ts",
47
+ "tests/security.test.ts"
48
+ ],
49
+ "pending": [
50
+ "HAR73 versioned task service projection",
51
+ "CODE05 task review UI and rendering of active text/citations",
52
+ "HAR74 ratified human rubric, time, cost and pilot"
53
+ ],
54
+ "notSupported": [
55
+ "Concurrent writers or host takeover",
56
+ "Remote provider stop confirmation",
57
+ "Arbitrary disk hardware failure",
58
+ "New SSRF/document/web adapters"
59
+ ]
60
+ }
@@ -2,19 +2,19 @@
2
2
 
3
3
  ## Isolated Bun installation
4
4
 
5
- Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After protected stable publication, this installs the 1.4.0 artifact in a temporary consumer, without building the source checkout or changing global tools:
5
+ Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After protected stable publication, this installs the 1.4.1 artifact in a temporary consumer, without building the source checkout or changing global tools:
6
6
 
7
7
  ```bash
8
8
  harness_demo_dir=$(mktemp -d)
9
9
  cd "$harness_demo_dir"
10
10
  printf '{"name":"harness-first-run","private":true}\n' > package.json
11
- bun add --exact --ignore-scripts @zhivex-ai/harness@1.4.0
11
+ bun add --exact --ignore-scripts @zhivex-ai/harness@1.4.1
12
12
  ./node_modules/.bin/zhx --version
13
13
  ./node_modules/.bin/zhx --help
14
14
  ./node_modules/.bin/zhx doctor --provider openai --json
15
15
  ```
16
16
 
17
- Version must print `1.4.0`; help lists commands. Doctor does not contact a provider. Without `OPENAI_API_KEY`, it reports the missing credential and exits with code `3`; inspect the JSON checks before proceeding. A directory without Git initialization can also produce a diagnostic warning. No paid model call is required for these checks. Both `zhx` and `zhivex-harness` are installed aliases; Bun manages installation, and their shebang runs Node.
17
+ Version must print `1.4.1`; help lists commands. Doctor does not contact a provider. Without `OPENAI_API_KEY`, it reports the missing credential and exits with code `3`; inspect the JSON checks before proceeding. A directory without Git initialization can also produce a diagnostic warning. No paid model call is required for these checks. Both `zhx` and `zhivex-harness` are installed aliases; Bun manages installation, and their shebang runs Node.
18
18
 
19
19
  To continue in your actual project, use the [global installation and credential setup](../README.md#quick-start), then `zhx init --profile daily --provider openai` and `zhx doctor --profile daily`. Real tasks require the selected provider credential in the process environment. Profiles store provider/model choices, never credentials. See [CLI](../docs/CLI.md) and [support](../SUPPORT.md).
20
20