diff --git a/public/llms.txt b/public/llms.txt index da92796..bf04178 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -10,7 +10,7 @@ Traverse is not a web framework, an agent-orchestration framework, or a general microservices platform. It governs one thing well: a single piece of business logic that must behave identically and auditably on every host where it actually ships. Specs and registry catalog size are governance hygiene, not the pitch. -Current packages (Traverse v0.16.2, Nov 4, 2026, additive patch on v0.16.0): npm `traverse-embedder-web@0.16.2`; Maven Central `com.traverse-framework:traverse-embedder` 0.16.2; nuget.org `TraverseEmbedder` 0.16.2; Swift xcframework `swift-host-v0.16.2`; `traverse-mcp` prebuilt binaries on GitHub release `traverse-mcp-v0.16.2` (Linux x64/arm64, macOS arm64, Windows x64; `SHA256SUMS` + provenance); ONNX runner `onnx-runner-v0.16.2` (same sha256 `ac5591fa…` as v0.16.0 and v0.16.1). crates.io: all six crates (`traverse-runtime`, `traverse-embedder`, `traverse-contracts`, `traverse-mcp`, `traverse-cli-rs`, `traverse-expedition-wasm`) at 0.16.2, published Nov 4; Rust ≥ 1.95. v0.16.2 adds host-connector invokes in CLI workspace application manifests (#1772, Spec 1773) and consumes `traverse-registry` 0.31.0. `runtime.wasm` ships on artifact-only GitHub releases again: `runtime-wasm-v0.16.2` (sha256 `b313b5c5c11291d9e9669125a0a9a77aa42a911b15d431a73e86b17c874e298c`) and `runtime-wasm-v0.16.1` (`7a322a17…`), each with `runtime.wasm`, `runtime.wasm.sha256` and `runtime-release.json` (traverse#1784 closed by #1797; npm still doesn't ship it). Known issue on 0.16.2 and earlier: Swift, Kotlin and .NET `RuntimeTraverseEmbedder` hand guests the whole `{target_id, input}` envelope instead of just `input`; fixed on main by #1800 (breaking for a guest that reads the envelope), not released. The CLI crate is `traverse-cli-rs` (binary `traverse-cli`). v0.16.0 moves `traverse-registry` to `0.29.0`. Since v0.16.0 the runtime rejects revoked Registry versions and conditional model rights need an explicit host opt-in (#1728; traverse#1598 closed). Host-side exact-ref `model_usage` enforcement shipped in v0.15.0. +Current packages (Traverse v0.16.2, Nov 4, 2026, additive patch on v0.16.0): npm `traverse-embedder-web@0.16.2`; Maven Central `com.traverse-framework:traverse-embedder` 0.16.2; nuget.org `TraverseEmbedder` 0.16.2; Swift xcframework `swift-host-v0.16.2`; `traverse-mcp` prebuilt binaries on GitHub release `traverse-mcp-v0.16.2` (Linux x64/arm64, macOS arm64, Windows x64; `SHA256SUMS` + provenance); ONNX runner `onnx-runner-v0.16.2` (same sha256 `ac5591fa…` as v0.16.0 and v0.16.1). crates.io: all six crates (`traverse-runtime`, `traverse-embedder`, `traverse-contracts`, `traverse-mcp`, `traverse-cli-rs`, `traverse-expedition-wasm`) at 0.16.2, published Nov 4; Rust ≥ 1.95. v0.16.2 adds host-connector invokes in CLI workspace application manifests (#1772, Spec 1773) and consumes `traverse-registry` 0.31.0. `runtime.wasm` ships on artifact-only GitHub releases again: `runtime-wasm-v0.16.2` (sha256 `b313b5c5c11291d9e9669125a0a9a77aa42a911b15d431a73e86b17c874e298c`) and `runtime-wasm-v0.16.1` (`7a322a17…`), each with `runtime.wasm`, `runtime.wasm.sha256` and `runtime-release.json` (traverse#1784 closed by #1797; npm still doesn't ship it). Known issue on 0.16.2 and earlier: Swift, Kotlin and .NET `RuntimeTraverseEmbedder` hand guests the whole `{target_id, input}` envelope instead of just `input`; fixed on main by #1800 (breaking for a guest that reads the envelope), not released (Q&A: what-input-does-a-runtime-wasm-guest-receive). Related web raw-submit `kind:app_command` routing (#1802) also fixed on main (#1806), not released. The CLI crate is `traverse-cli-rs` (binary `traverse-cli`). v0.16.0 moves `traverse-registry` to `0.29.0`. Since v0.16.0 the runtime rejects revoked Registry versions and conditional model rights need an explicit host opt-in (#1728; traverse#1598 closed). Host-side exact-ref `model_usage` enforcement shipped in v0.15.0. ## Required reading (agents) @@ -25,7 +25,7 @@ Current packages (Traverse v0.16.2, Nov 4, 2026, additive patch on v0.16.0): npm - [What is one shared runtime.wasm?](https://traverse-framework.com/questions/what-is-one-shared-runtime-wasm.html): embedders are clients; honest consumer list. - [Does the Rust embedder use the same runtime.wasm?](https://traverse-framework.com/questions/does-the-rust-embedder-use-the-same-runtime-wasm.html): discover → execute → trace on one shared runtime contract/ABI; web `traverse-embedder-web@0.15.0` loads the bundle's digest-checked `runtime/runtime.wasm`; Rust `traverse-embedder@0.15.0` links `traverse-runtime` natively and ships no separate runtime-WASM artifact; capability WASM still targets that host ABI; hosts are clients (UI + I/O); JS/TS + Rust + MCP published; Python via CLI only (no Python SDK); Swift/Kotlin/.NET published pre-1.0, not Certified under Spec 529; published 0.15.0 Maven/NuGet include ExactModelHost. Narrative: [One shared runtime. Not one shared .wasm file on every host.](https://traverse-framework.com/blog/one-shared-runtime-two-loading-paths.html) (that post is a v0.14.0 snapshot). - [The agent freestyled a $2.4M wire. The runtime said no.](https://traverse-framework.com/blog/agent-freestyle-blocked.html): project direction in one scene. Agent proposes, runtime decides (deny + trace). -- [One model capability, three published hosts, same answer](https://traverse-framework.com/blog/model-execute-on-published-packages.html): Nov 5 write-up of the v0.16.1 published-package proof. Published catalog `model/model.execute@1.0.0` guest (`5ccfa372…`), unchanged, over signed `traverse.digits-onnx@1.0.0` (test-only key, #1567) on native (crates.io `traverse-runtime` 0.16.1, wasmtime), Node 24.16.0 and Chromium 152 (npm `traverse-embedder-web@0.16.1`, `activateMediatedConnector` + `exactModelMediatedConnector`, `submitAsync`) → identical success output with `model_evidence`, identical 56-byte frame, identical `connector_unavailable`, `usage_undeclared`, `key_untrusted`, `pin_mismatch`, `digest_mismatch`, `package_revoked`; native adds `placement_evidence` (Spec 1719 FR-014). Evidence traverse#1782 (`docs/evidence/model-execute-published-2026-11-03`); clean GitHub-hosted runner rerun from published packages only, weekly Mondays, pinned to v0.16.1 (#1783, closed #1776). Gaps: `runtime.wasm` (`7a322a17…`) and the model package come from the v0.16.1 tag, not a package (#1784); native `activate_exact_model_runtime` frame readback (#1785); no Swift/Android/.NET activation API; live-Registry rights #1786; no Spec 529 certification. Update Nov 5: host-connector invokes in CLI workspace application manifests (#1772 via #1788, `traverse-registry` 0.31.0) shipped in v0.16.2 (Nov 4), and `runtime.wasm` is now also on the `runtime-wasm-v0.16.1` release (#1784 closed by #1797). +- [One model capability, three published hosts, same answer](https://traverse-framework.com/blog/model-execute-on-published-packages.html): Nov 5 write-up of the v0.16.1 published-package proof. Published catalog `model/model.execute@1.0.0` guest (`5ccfa372…`), unchanged, over signed `traverse.digits-onnx@1.0.0` (test-only key, #1567) on native (crates.io `traverse-runtime` 0.16.1, wasmtime), Node 24.16.0 and Chromium 152 (npm `traverse-embedder-web@0.16.1`, `activateMediatedConnector` + `exactModelMediatedConnector`, `submitAsync`) → identical success output with `model_evidence`, identical 56-byte frame, identical `connector_unavailable`, `usage_undeclared`, `key_untrusted`, `pin_mismatch`, `digest_mismatch`, `package_revoked`; native adds `placement_evidence` (Spec 1719 FR-014). Evidence traverse#1782 (`docs/evidence/model-execute-published-2026-11-03`); clean GitHub-hosted runner rerun from published packages only, weekly Mondays, pinned to v0.16.1 (#1783, closed #1776). Gaps: `runtime.wasm` (`7a322a17…`) and the model package come from the v0.16.1 tag, not a package (#1784); native `activate_exact_model_runtime` frame readback (#1785, fixed on main by #1809, not released); no Swift/Android/.NET activation API; live-Registry rights #1786 (closed on main by #1808, not released); no Spec 529 certification. Update Nov 5: host-connector invokes in CLI workspace application manifests (#1772 via #1788, `traverse-registry` 0.31.0) shipped in v0.16.2 (Nov 4), and `runtime.wasm` is now also on the `runtime-wasm-v0.16.1` release (#1784 closed by #1797). - [Traverse v0.16.0: same input, same output, on every host](https://traverse-framework.com/blog/traverse-0-16-0-same-input-same-output.html): Nov 3 release story for v0.16.0 (Nov 2, tag `f104b83`). Every host feeds guests RFC 8785 canonical JSON input (#1722, Decision 118). Rerun Nov 3 on released bits only: catalog `core.authorize@1.2.0` (`0c318fff…`) on Node (npm `traverse-embedder-web@0.16.0` + `runtime.wasm` `5ab8057f…`) and the `traverse-mcp-v0.16.0` Linux x64 binary (Mode A, `gh attestation verify` OK) → full output byte-identical, `policy_hash` `fnv1a64:51a64653…` on both; browser, other binaries, Swift/Kotlin/.NET not rerun. Mode A without Rust: `curl … | tar -xz` → `traverse-mcp sync` (index-v412, 232 records) → `prepare-cache`; five freestyle moves still refused; line-delimited command protocol, not JSON-RPC `tools/list`. Four breaking changes (#1706 placement at registration, #1722 canonical input, #1658 host input-schema enforcement, #1728 Registry rights fail closed). wasmtime 48.0.7 (GHSA-mghf-wjfp-p5xm), Rust ≥ 1.95. crates.io, npm, Maven, NuGet at 0.16.0; Swift `swift-host-v0.16.0` (tag `Package.swift` still pins the 0.15.0 xcframework, fixed on main #1769). Not claimed: live Registry coverage, production compliance, Spec 529 certification, guest `connector_invoke` on Swift/Android/.NET/web (#1719). - [One audit fingerprint, every host](https://traverse-framework.com/blog/hash-converges.html): Oct 30 weekly demo. Demo proof of the traverse#1722 fix. Same catalog `core.authorize@1.2.0` WASM (`0c318fff…`) on four columns: Browser with the v0.15.0-era `runtime.wasm` (`a254c161…`) → `policy_hash` `fnv1a64:2a126b86…`; Browser, Node (npm `traverse-embedder-web@0.15.0` JS + main `runtime.wasm` `ec49cb76…`) and the agent (`traverse-mcp` built from traverse `main` 70f3ee7, Mode A stdio) → `fnv1a64:51a64653…` on all three, full output byte-identical from unsorted caller input (RFC 8785 canonical guest input, #1739 / Decision 118). traverse#1720 closed by #1725 (binary runs from an empty directory, no staged fixtures). `traverse-mcp sync` (#1758) synced live `index-v412` (232 records). Five freestyle moves → `not_found`, `registry_cache_entry_missing`, `invalid_request`, `not_found`, `registry_artifact_digest_mismatch`. Honest gaps (as of Oct 30): unreleased `main`, not a tag. The fix has since shipped in v0.16.0 (Nov 2), and on Nov 3 the Node + agent columns were rerun on released bits (npm `traverse-embedder-web@0.16.0` + `runtime.wasm` `5ab8057f…`, `traverse-mcp-v0.16.0` Linux x64 binary) → still `51a64653…`, byte-identical ([v0.16.0 post](https://traverse-framework.com/blog/traverse-0-16-0-same-input-same-output.html)); browser not rerun on released bits; #1721 (prebuilt binary) since shipped in v0.16.0; building needs Rust 1.95.0; Mode A digest-only, no signature; #1719 waits on PR #1755; no Swift/.NET/Android runs. - [Same WASM, two hashes. The bug wasn't in the WASM.](https://traverse-framework.com/blog/same-wasm-two-hashes.html): Oct 30. Why catalog `core.authorize@1.2.0` gave a different `policy_hash` on `traverse-mcp` (sorted-key re-serialization) than on the embedders (caller bytes) in the Oct 23 demo (traverse#1722), and the rule now on `main`: Decision 118 / Spec `1722-canonical-guest-input-bytes`. Every host feeds guests RFC 8785 (JCS) canonical JSON input, refuses unrepresentable input with `input_not_canonicalizable`, never rewrites outputs; conformance fixture on native, `runtime.wasm`, Node (traverse#1739). Ships in v0.16.0, not released as of Oct 30. Rerun on `main` (not a release): [One audit fingerprint, every host](https://traverse-framework.com/blog/hash-converges.html). @@ -95,9 +95,10 @@ Current packages (Traverse v0.16.2, Nov 4, 2026, additive patch on v0.16.0): npm - [Can Traverse run models on a GPU or the Apple Neural Engine?](https://traverse-framework.com/questions/can-traverse-run-models-on-a-gpu-or-neural-engine.html): Core ML is an opt-in Apple placement in v0.15.0. Default stays `wasm-cpu`. Ordered placements, on-device self-check, fail-closed `placement_unavailable`, placement evidence (Decision 112). v0.15.0 evidence was macOS cargo test plus the Decision 113 iPhone spike. Governed-path iPhone evidence shipped in v0.16.0 (traverse#1630): BirdNET on one iPhone 14 Pro Max, p95 141 ms per 3 s clip under `[coreml, wasm-cpu]`; needs schema 2.3.0 `score_transform` (new in v0.16.0); `cpu_and_neural_engine` failed self-check and fell back to `wasm-cpu`; a Nov 3 rerun on main (#1778, docs only) shows `cpu_only` fails identically (5.067×10⁻³ vs 5×10⁻³ on 1 of 21 clips), so it is not Neural-Engine-specific. No web, Android, or desktop GPU adapter. No host is Certified. - [How fast does a model run on iPhone with Traverse?](https://traverse-framework.com/questions/how-fast-does-a-model-run-on-iphone-with-traverse.html): one measured case, shipped in v0.16.0 (traverse#1630, PR #1709): iPhone 14 Pro Max, iOS 26.6, Release build, Swift `ExactModelHost`, BirdNET v2.4 int8, policy `[coreml, wasm-cpu]`. Core ML `all` p95 141.3 ms per 3 s clip vs `wasm-cpu` p95 10.0 s; top-5 21/21 vs wasm-cpu; timing is the whole governed call. Not reproducible on v0.15.0 (needs schema 2.3.0 `score_transform`, new in v0.16.0). One device, one model, test-only key, non-commercial weights. Code for #1706 (placement prep at registration, Decision 120, #1764) and #1708 (self-check worst case, #1766) shipped in v0.16.0. Nov 3 rerun on main (#1778 docs, #1779 host tests; harness built from main `9a3cd84`): `cpu_only` registers 4.47 s, first call 4.29 s, no timeout, but runs on `wasm-cpu` (Core ML variant fails self-check); `all` p95 149.0 ms; different clips, not a before/after. #1706 and #1708 closed; #1707 open. No host is Certified. - [What is the model.execute catalog capability?](https://traverse-framework.com/questions/what-is-the-model-execute-catalog-capability.html): `model.execute@1.0.0` in the registry catalog (registry#639, index-v407, Oct 15 2026). A shim over host connector `traverse.model-runtime`: exact pin + `input_ref` + `model_usage` + non-empty `trust_root` in; `model_evidence` or unchanged fail-closed Spec 138 reason out. Does not fetch models, hold keys, or choose a model. Pins connector 2.3.0 (shipped in Traverse v0.16.0; v0.15.0 hosts carry 2.2.0). Registry spec 027 is draft. Since Traverse v0.16.1 (Nov 3) it runs on published native, Node and browser packages: traverse#1770 shipped web `activateMediatedConnector` + `submitAsync`, and a published-package run (traverse#1782, clean-runner CI #1783) gave identical output and six identical fail-closed reasons on native, Node and Chromium; Swift/Android/.NET activation not shipped; the Oct 16 weekly demo runs it on v0.15.0 via a native bridge and labelled Browser/Node glue. -- [Does catalog model.execute run on published Traverse packages?](https://traverse-framework.com/questions/does-catalog-model-execute-run-on-published-traverse-packages.html): yes on native, Node and browser since v0.16.1 (Nov 3, 2026). Published `model.execute@1.0.0` guest, unchanged, over signed `traverse.digits-onnx@1.0.0` (test-only key): crates.io `traverse-runtime` 0.16.1 (wasmtime), npm `traverse-embedder-web@0.16.1` in Node 24 and Chromium. `all_identical: true`: success output, 56-byte frame, and `connector_unavailable`/`usage_undeclared`/`key_untrusted`/`pin_mismatch`/`digest_mismatch`/`package_revoked` (native adds `placement_evidence`). Evidence traverse#1782; clean GitHub-hosted runner CI #1783 (pinned to v0.16.1). Limits: `runtime.wasm` came from the tag at run time (now also on `runtime-wasm-v0.16.1`; #1784 closed), native frame read-back needs a workaround (#1785), no Swift/Android/.NET activation, registry spec 027 draft, no host Certified. +- [Does catalog model.execute run on published Traverse packages?](https://traverse-framework.com/questions/does-catalog-model-execute-run-on-published-traverse-packages.html): yes on native, Node and browser since v0.16.1 (Nov 3, 2026). Published `model.execute@1.0.0` guest, unchanged, over signed `traverse.digits-onnx@1.0.0` (test-only key): crates.io `traverse-runtime` 0.16.1 (wasmtime), npm `traverse-embedder-web@0.16.1` in Node 24 and Chromium. `all_identical: true`: success output, 56-byte frame, and `connector_unavailable`/`usage_undeclared`/`key_untrusted`/`pin_mismatch`/`digest_mismatch`/`package_revoked` (native adds `placement_evidence`). Evidence traverse#1782; clean GitHub-hosted runner CI #1783 (pinned to v0.16.1). Limits: `runtime.wasm` came from the tag at run time (now also on `runtime-wasm-v0.16.1`; #1784 closed), native frame read-back needs a workaround on v0.16.2 (#1785, fixed on main by #1809, not released), no Swift/Android/.NET activation, registry spec 027 draft, no host Certified. - [Where does BundleEmbedder get runtime.wasm?](https://traverse-framework.com/questions/where-does-bundleembedder-get-runtime-wasm.html): from the app bundle (`runtime/runtime.wasm` + `.sha256`, digest-checked, fail closed if missing). npm does not ship it. Since Nov 4, 2026 it is on artifact-only GitHub releases `runtime-wasm-v0.16.2` (sha256 `b313b5c5…`) and `runtime-wasm-v0.16.1` (`7a322a17…`), with `runtime.wasm.sha256` and `runtime-release.json`; take the one matching your `traverse-embedder-web` version and check the digest. traverse#1784 closed by #1797; on main, every future `vX.Y.Z` tag publishes `runtime-wasm-vX.Y.Z` before the product release. -- [Can a Traverse application manifest invoke a host connector?](https://traverse-framework.com/questions/can-a-traverse-application-manifest-invoke-a-host-connector.html): yes since v0.16.2 (Nov 4, 2026). A state invokes exactly one of `{"capability_id", "input_from"}` or `{"host_connector": "audio.permission.request"}`; `traverse-cli app validate`, activation and registration accept both (Spec 1773, #1772). Neither, both, empty or unknown fields fail closed; host-connector states must route `host_connector_succeeded`/`failed`/`timeout`/`cancelled`; the command must be declared and resolve through Specs 104/137. Limit: `traverse-cli app activate` registers only its built-in reference connector catalog, and `traverse.audio-input` isn't in it yet (#1791). +- [Can a Traverse application manifest invoke a host connector?](https://traverse-framework.com/questions/can-a-traverse-application-manifest-invoke-a-host-connector.html): yes since v0.16.2 (Nov 4, 2026). A state invokes exactly one of `{"capability_id", "input_from"}` or `{"host_connector": "audio.permission.request"}`; `traverse-cli app validate`, activation and registration accept both (Spec 1773, #1772). Neither, both, empty or unknown fields fail closed; host-connector states must route `host_connector_succeeded`/`failed`/`timeout`/`cancelled`; the command must be declared and resolve through Specs 104/137. Limit on v0.16.2: `traverse-cli app activate` registered only its built-in reference connector catalog without `traverse.audio-input` (#1791); registration landed on main via #1796 (Nov 5), not released. +- [What input does a runtime.wasm guest receive?](https://traverse-framework.com/questions/what-input-does-a-runtime-wasm-guest-receive.html): on published v0.16.2 and earlier, Swift/Kotlin/.NET guests see the whole `{target_id, input}` envelope; on main (#1800, Nov 5, closing #1794) `runtime.wasm` unwraps it and gives the guest only canonical `input` (Spec 1722), rejecting wrong `target_id` (`target_not_found`), bad input, and extra members (`ambiguous_submit`). Raw web submits unchanged unless both keys are present. Breaking for envelope-reading guests; none in-repo. Related web raw-submit `kind:app_command` routing fixed on main (#1802 via #1806). Not in a tagged release yet. - [Why does BundleEmbedder fail with "cannot find definition for import (traverse_host, connector_invoke)"?](https://traverse-framework.com/questions/why-does-bundleembedder-fail-with-cannot-find-definition-for-import-connector-invoke.html): published browser/Node `runtime.wasm` (traverse-embedder-web 0.15.0) doesn't link the Spec 104 `connector_invoke` import; only native wasmtime does, with a host-written `MediatedConnector` bridge. Partly fixed in v0.16.0 (Nov 2): traverse#1755 links `connector_invoke` in `runtime.wasm` with native-parity fail-closed mediation (without host activation, invokes get `unbound`/`undeclared` with evidence) and ships native `ExactModelMediatedConnector` / `activate_exact_model_runtime` (no hand-written bridge); in published packages web/Swift/Android/.NET still have no activation API. Shipped in v0.16.1 (Nov 3, traverse-embedder-web@0.16.1): traverse#1770 adds web `BundleEmbedder.activateMediatedConnector` + `exactModelMediatedConnector`, guest suspend/resume at `connector_invoke`, `submitAsync` (sync `submit` -> `async_submit_required`), and a host-private filter fix for rights-record URLs in `model_evidence`; run on published packages in Node and Chromium (traverse#1782). traverse#1719 closed; Swift/Android/.NET activation still open. - [Why does model.execute return unauthorized_output?](https://traverse-framework.com/questions/why-does-model-execute-return-unauthorized-output.html): the Spec 104 host-private filter rejects strings starting with `/` or containing `://`; the full `ModelRightsRecord` carries `source_url`, so don't forward it. `model.execute@1.1.0` (registry#641 closed via #645, 2026-10-29; same WASM digest as 1.0.0) defines the normative flat `model_evidence` (`license_id`, `commercial_use`, `status`, `effective_usage`, optional URL-free `derivation`); full nested record is non-conformant. Shipped host binding still open (traverse#1719). - [Does the same Traverse WASM give byte-identical output on every host?](https://traverse-framework.com/questions/does-the-same-wasm-give-byte-identical-output-on-every-host.html): same WASM + same input bytes → same output bytes, but on v0.15.0 hosts don't always pass the same bytes: `traverse-mcp` re-serializes request JSON with sorted keys, embedders pass caller bytes through, so catalog `core.authorize@1.2.0` gives the same decision/reason/obligations/trace but a different `policy_hash` (`2a126b86…` vs `51a64653…`). Sorted-key input → byte-identical on all three. Fixed in v0.16.0 (Nov 2, breaking): Decision 118 + Spec `1722-canonical-guest-input-bytes`. Every host feeds guests RFC 8785 (JCS) canonical JSON input; unrepresentable input → `input_not_canonicalizable`; outputs never rewritten; conformance fixture `fixtures/cross-host/canonical-input-v1` on native, `runtime.wasm`, Node (traverse#1739, merged Oct 28). v0.15.0 keeps the old behavior. Write-up: [Same WASM, two hashes](https://traverse-framework.com/blog/same-wasm-two-hashes.html). Demo rerun on `main` before the tag (Browser + Node + traverse-mcp all `51a64653…`): [One audit fingerprint, every host](https://traverse-framework.com/blog/hash-converges.html). Rerun Nov 3 on released bits, Node (npm 0.16.0) + `traverse-mcp-v0.16.0` binary → both `51a64653…`, full output byte-identical; browser not rerun: [Traverse v0.16.0: same input, same output](https://traverse-framework.com/blog/traverse-0-16-0-same-input-same-output.html). diff --git a/src/pages/questions/can-a-traverse-application-manifest-invoke-a-host-connector.astro b/src/pages/questions/can-a-traverse-application-manifest-invoke-a-host-connector.astro index 51c2531..50d61e6 100644 --- a/src/pages/questions/can-a-traverse-application-manifest-invoke-a-host-connector.astro +++ b/src/pages/questions/can-a-traverse-application-manifest-invoke-a-host-connector.astro @@ -9,7 +9,7 @@ const jsonLd = JSON.stringify({ name: 'Can a Traverse application manifest invoke a host connector?', acceptedAnswer: { '@type': 'Answer', - text: 'Yes, since Traverse v0.16.2 (November 4, 2026). A state in an application state machine invokes exactly one of two things: a capability ({"capability_id": "...", "input_from": "..."}) or a host connector ({"host_connector": "audio.permission.request"}). traverse-cli app validate, activation and registration accept both (Spec 1773, traverse#1772). Neither, both, an empty value or an unknown invoke field fails closed with a stable diagnostic. The connector command must be declared by the app and resolves through Specs 104 and 137. A host-connector state must route all four terminal events: host_connector_succeeded, host_connector_failed, host_connector_timeout and host_connector_cancelled. Existing capability-only manifests behave as before. Limit: traverse-cli app activate only registers its built-in reference connector catalog, and traverse.audio-input is not in it yet (traverse#1791).', + text: 'Yes, since Traverse v0.16.2 (November 4, 2026). A state in an application state machine invokes exactly one of two things: a capability ({"capability_id": "...", "input_from": "..."}) or a host connector ({"host_connector": "audio.permission.request"}). traverse-cli app validate, activation and registration accept both (Spec 1773, traverse#1772). Neither, both, an empty value or an unknown invoke field fails closed with a stable diagnostic. The connector command must be declared by the app and resolves through Specs 104 and 137. A host-connector state must route all four terminal events: host_connector_succeeded, host_connector_failed, host_connector_timeout and host_connector_cancelled. Existing capability-only manifests behave as before. Limit on v0.16.2: traverse-cli app activate only registered its built-in reference connector catalog without traverse.audio-input (traverse#1791). That registration landed on main via #1796 (November 5, 2026) and is not yet in a tagged release.', }, }], }); @@ -71,7 +71,7 @@ traverse-cli app validate path/to/app.manifest.json
traverse-cli app activate only registers its built-in reference connector catalog. traverse.audio-input isn't in it yet, so the audio example can't activate from the CLI yet (#1791, open).traverse-cli app activate only registered its built-in reference connector catalog, and traverse.audio-input was missing, so the audio example couldn't activate from the CLI. That registration landed on main via #1796 (closing #1791, November 5, 2026) and is not yet in a tagged release.traverse-cli workspace applications. Check your host's README before you rely on a host-connector invoke there.runtime.wasm isn't in the npm package. The demo fetched it from the v0.16.1 git tag and checked its digest. Since November 4 the same file is also on the runtime-wasm-v0.16.1 release (traverse#1784, closed). See Where does BundleEmbedder get runtime.wasm?activate_exact_model_runtime takes the host by value, so a caller can't read the output frame back through it. The demo builds the activation by hand around ExactModelMediatedConnector instead (traverse#1785).activate_exact_model_runtime took the host by value, so a caller couldn't read the output frame back through it. The demo builds the activation by hand around ExactModelMediatedConnector instead. Fixed on main by #1809 (closing #1785, November 5, 2026); not yet in a tagged release.traverse.digits-onnx@1.0.0 is signed with the test-only key (traverse#1567).027-catalog-model-execute is still a draft, and no host is Certified under Spec 529.Short answer: it depends which runtime.wasm you load. On the published runtime-wasm-v0.16.2 asset (and earlier), Swift, Kotlin and .NET guests see the whole {envelopeShort} envelope. On main, after traverse#1800 (November 5, 2026), they see only the caller input. That fix is not in a tagged release yet.
Native RuntimeTraverseEmbedder.submit on Swift, Kotlin and .NET sends the published submit form {envelopeForm} into runtime.wasm. Through v0.16.2 the guest reads that whole object on stdin. A guest that expected only its own input had to dig under input, and a wrong target_id still ran the initialized capability (#1794).
Web hosts that use a raw submit (the body is the capability input, no envelope) already behaved differently: the guest got those bytes as sent, unless the body itself looked like the envelope.
+ +#1800 teaches runtime.wasm the published envelope (Spec 071 1.2.0 FR-018, Decision 124):
input, canonical under Spec 1722.target_id other than the initialized capability is rejected with target_not_found.input or a blank target_id is rejected. An extra member is rejected with ambiguous_submit.target_id and input.Breaking on the next release that ships this: a guest written to read the envelope must read its input directly. No guest in the traverse repo does that.
+ +On published web packages, a raw submit whose input JSON contains {kindAppCommand} still routes as a command instead of capability input (Decision 124 called that out of scope for #1800). #1806 closed #1802 on main so that capability input reaches the guest as sent. Same story: merged, not tagged.
runtime-wasm-v0.16.2 asset (sha256 b313b5c5c11291d9e9669125a0a9a77aa42a911b15d431a73e86b17c874e298c) and write guests that tolerate the envelope, or dig under input.runtime.wasm from main yourself and expect the unwrapped contract. Check the digest before you ship it.See also Where does BundleEmbedder get runtime.wasm? for how to download the published asset.
+