diff --git a/public/assets/img/blog/catalog-model-execute-2026-10-16/01-full-page-three-hosts.webp b/public/assets/img/blog/catalog-model-execute-2026-10-16/01-full-page-three-hosts.webp new file mode 100644 index 0000000..2bfe214 Binary files /dev/null and b/public/assets/img/blog/catalog-model-execute-2026-10-16/01-full-page-three-hosts.webp differ diff --git a/public/assets/img/blog/catalog-model-execute-2026-10-16/02-hero-bit-identical-digits.webp b/public/assets/img/blog/catalog-model-execute-2026-10-16/02-hero-bit-identical-digits.webp new file mode 100644 index 0000000..eb79773 Binary files /dev/null and b/public/assets/img/blog/catalog-model-execute-2026-10-16/02-hero-bit-identical-digits.webp differ diff --git a/public/assets/img/blog/catalog-model-execute-2026-10-16/03-agent-freestyle-refusals.webp b/public/assets/img/blog/catalog-model-execute-2026-10-16/03-agent-freestyle-refusals.webp new file mode 100644 index 0000000..1160eb7 Binary files /dev/null and b/public/assets/img/blog/catalog-model-execute-2026-10-16/03-agent-freestyle-refusals.webp differ diff --git a/public/assets/img/blog/catalog-model-execute-2026-10-16/04-product-path-truth.webp b/public/assets/img/blog/catalog-model-execute-2026-10-16/04-product-path-truth.webp new file mode 100644 index 0000000..36a46b1 Binary files /dev/null and b/public/assets/img/blog/catalog-model-execute-2026-10-16/04-product-path-truth.webp differ diff --git a/public/llms.txt b/public/llms.txt index f0e1ac3..b6e74b9 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -24,10 +24,11 @@ Current packages: crates.io Traverse at 0.15.0; npm `traverse-embedder-web@0.15. - [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). +- [An agent picks a model off the shelf. The contract still decides.](https://traverse-framework.com/blog/catalog-model-execute.html): v0.15.0 weekly demo — catalog `model/model.execute@1.0.0` (registry#639) runs a signed ONNX package of `onnxmodelzoo/mnist-12` (pin `d820ea39…`) on Browser, Node and Native; 14 scenarios byte-identical (fingerprint `12fea82f…c9d9`), predictions 7, 2, 1, 0; agent freestyle fails closed identically (`usage_undeclared`, `key_untrusted`, `pin_mismatch`, `digest_mismatch`, `package_revoked`, `connector_unavailable`). Native (`traverse-runtime` `run_bytes_with_mediated_connectors` + `ExactModelHostConnector`) is the product path; Browser/Node use ~55 lines of labelled demo glue; browser `BundleEmbedder` + `runtime.wasm` fails on missing `connector_invoke` import (traverse#1719). Test-only key (prod signing #1567). Extra input fields not yet rejected (#1671, main only). Model came from the ONNX model zoo on Hugging Face; no HF integration. - [Agent speaks MCP. Exact pin kills the freestyle.](https://traverse-framework.com/blog/agent-mcp-exact-ref.html): v0.14.0 weekly demo — an agent calls MCP-shaped tools (façade over `ExactModelBrowserHost` under Node, not the Mode A `traverse-mcp` binary) against the signed `digits-mlp-1.0.0` package; Browser + Node bit-identical; tamper → `digest_mismatch`, empty trust → `key_untrusted`, rights lie → `rights_mismatch`; test-only key (prod signing #1567). Not catalog `model.execute`. Not Hugging Face. - [Signed model. Exact pin. Bit-identical hosts.](https://traverse-framework.com/blog/signed-exact-ref-digits.html): v0.14.0 weekly demo — signed `digits-mlp-1.0.0` exact-ref package, same bytes on Browser + Node (`ExactModelBrowserHost`); tamper → `digest_mismatch`; test-only key (prod signing #1567). Not catalog `model.execute`. Not Hugging Face. - [Same WASM. Browser and Node match. Agent still can’t freestyle.](https://traverse-framework.com/blog/same-wasm-multi-host.html): v0.13.0 multi-host — identical `core.authorize@1.2.0` bytes on Browser + Node; agent treasury cheat still denied. -- Weekly demos (public write-ups; repo still private): [agent MCP exact-ref](https://traverse-framework.com/blog/agent-mcp-exact-ref.html) · [signed exact-ref digits](https://traverse-framework.com/blog/signed-exact-ref-digits.html) · [same-wasm multi-host](https://traverse-framework.com/blog/same-wasm-multi-host.html) · [agent freestyle → blocked](https://traverse-framework.com/blog/agent-freestyle-blocked.html) · [How do I run the deny demo?](https://traverse-framework.com/questions/how-do-i-run-the-agent-blocked-weekly-demo.html). Note: `traverse-framework/weekly-demos` is **not publicly cloneable yet** (tracked in [.github#30](https://github.com/traverse-framework/.github/issues/30)) — prefer the blogs until that lands. Access-only tree for this week: `weekly-demos/2026-10-09-agent-mcp-exact-ref`. +- Weekly demos (public write-ups; repo still private): [catalog model.execute](https://traverse-framework.com/blog/catalog-model-execute.html) · [agent MCP exact-ref](https://traverse-framework.com/blog/agent-mcp-exact-ref.html) · [signed exact-ref digits](https://traverse-framework.com/blog/signed-exact-ref-digits.html) · [same-wasm multi-host](https://traverse-framework.com/blog/same-wasm-multi-host.html) · [agent freestyle → blocked](https://traverse-framework.com/blog/agent-freestyle-blocked.html) · [How do I run the deny demo?](https://traverse-framework.com/questions/how-do-i-run-the-agent-blocked-weekly-demo.html). Note: `traverse-framework/weekly-demos` is **not publicly cloneable yet** (tracked in [.github#30](https://github.com/traverse-framework/.github/issues/30)) — prefer the blogs until that lands. Access-only tree for this week: `weekly-demos/2026-10-16-catalog-model-execute`. - [Platforms](https://traverse-framework.com/platforms.html): native + browser shipped; Swift/Kotlin/.NET published, pre-1.0, In progress (not Certified); edge planned; cloud non-goal. ## Start here @@ -40,7 +41,7 @@ Current packages: crates.io Traverse at 0.15.0; npm `traverse-embedder-web@0.15. ## Building with an agent -- **Direction (same as Required reading above):** [agent MCP exact-ref](https://traverse-framework.com/blog/agent-mcp-exact-ref.html) · [signed exact-ref digits](https://traverse-framework.com/blog/signed-exact-ref-digits.html) · [same-wasm multi-host](https://traverse-framework.com/blog/same-wasm-multi-host.html) · [deny demo blog](https://traverse-framework.com/blog/agent-freestyle-blocked.html) · [what-is-real-today](https://traverse-framework.com/what-is-real-today.html) · [run the deny demo (blog-first; weekly-demos not public yet)](https://traverse-framework.com/questions/how-do-i-run-the-agent-blocked-weekly-demo.html). +- **Direction (same as Required reading above):** [catalog model.execute](https://traverse-framework.com/blog/catalog-model-execute.html) · [agent MCP exact-ref](https://traverse-framework.com/blog/agent-mcp-exact-ref.html) · [signed exact-ref digits](https://traverse-framework.com/blog/signed-exact-ref-digits.html) · [same-wasm multi-host](https://traverse-framework.com/blog/same-wasm-multi-host.html) · [deny demo blog](https://traverse-framework.com/blog/agent-freestyle-blocked.html) · [what-is-real-today](https://traverse-framework.com/what-is-real-today.html) · [run the deny demo (blog-first; weekly-demos not public yet)](https://traverse-framework.com/questions/how-do-i-run-the-agent-blocked-weekly-demo.html). - [For AI Agents](https://traverse-framework.com/agents.html): the real MCP tool list (ten commands: describe_server, list_content_groups, describe_content_group, list_entrypoints, search_capabilities, describe_entrypoint, validate_entrypoint, execute_entrypoint, render_execution_report, shutdown), the discover-inspect-execute-trace flow, and the honest limits (stdio is the packaged bootstrap today; in-process library functions exist on traverse-mcp, but there is no separate HTTP MCP listener as a packaged product). - [Is the agent MCP exact-ref demo the same as traverse-mcp?](https://traverse-framework.com/questions/is-the-agent-mcp-demo-the-same-as-traverse-mcp.html): no. The Oct 9 weekly demo is an in-process MCP-shaped JSON-RPC façade over `ExactModelBrowserHost` under Node, not the checksum-pinned Mode A `traverse-mcp` binary. Mode A `traverse-mcp` is the published stdio MCP server for discover/inspect/execute of registry capabilities. Checksum-pinned Mode A binaries (#1653): packaging workflow merged on main (#1701); first non-Latest `traverse-mcp-v*` release with `SHA256SUMS` comes with the next product tag, none published yet. Write-up: [Agent speaks MCP](https://traverse-framework.com/blog/agent-mcp-exact-ref.html). - [traverse-framework/claude-skills](https://github.com/traverse-framework/claude-skills): Claude Skills for building apps with Traverse — starting with `traverse-capability-author` (plus extractor and workflow-planner), which checks the registry before authoring, produces contract + WASM, and validates against the real traverse-cli — including this platform's current execution limitations. diff --git a/src/pages/blog/catalog-model-execute.astro b/src/pages/blog/catalog-model-execute.astro new file mode 100644 index 0000000..3f8bb12 --- /dev/null +++ b/src/pages/blog/catalog-model-execute.astro @@ -0,0 +1,209 @@ +--- +import SubpageLayout from '@layouts/SubpageLayout.astro'; + +const _body = ` +
+
+
+ + + Demo + Agents + Models +
+

An agent picks a model off the shelf. The contract still decides.

+ +
+
+ +
+
+ +
+ +

Last week an agent tried to cheat a signed model through MCP-shaped tools and every attempt failed closed. This week the agent does not get a hand-wired model. It discovers one in the catalog: model/model.execute@1.0.0, the governed model capability published to the registry on October 15 (registry#639). We pulled that exact capability WASM, checked its digest against the catalog, and pointed it at a signed ONNX package of onnxmodelzoo/mnist-12. It ran on Browser, Node and Native with one fingerprint. Then the agent freestyled, and the model never ran.

+ +
+ Short version: discover → execute → trace. Catalog model/model.execute@1.0.0 runs a signed ONNX package (exact-ref pin d820ea39…) on Browser, Node and Native. All 14 scenarios are byte-identical across the three hosts (fingerprint 12fea82f…c9d9), and the digits come back 7, 2, 1, 0. Every freestyle attempt fails closed the same way on every host. Everything is pinned to the published v0.15.0. The agent proposes; the runtime decides. +
+ +

Public proof is this write-up and the screenshots. The runnable folder weekly-demos/2026-10-16-catalog-model-execute is for people who already have access (repo private). weekly-demos is still not publicly cloneable (.github#30).

+ +
+ Catalog model.execute demo: four MNIST digits bit-identical on Browser, Node and Native, a freestyle refusal table, the connector trace, and a product-path truth panel +
The whole demo on one page: same capability on three hosts, the agent's refusals, the trace of what the WASM asked the host, and what is and isn't the product path.
+
+ +

Off the shelf, not hand-wired

+ +

The catalog has 228 capabilities. model/model.execute@1.0.0 is one of them: an 8 KB WASM shim that takes an exact pin, a staged input, a model_usage declaration and a trust root, then asks the host's model connector to run exactly that package. The capability WASM sha256 (5ccfa372…4275) and contract sha256 (a96db38b…ef1c) are checked against the catalog entry on every host before anything runs.

+ +

The model came from the ONNX model zoo on Hugging Face (onnxmodelzoo/mnist-12). We packaged and signed it ourselves for the demo. The host runs the pinned package or nothing.

+ +

Same bytes on three hosts

+ +

14 scenarios: 4 digits and 10 freestyle attempts. The capability's stdout JSON and the model's output frame are byte-identical on Browser (Chrome), Node and Native (wasmtime). Predictions are 7, 2, 1, 0, all correct, and the digit frames match the conformance vector.

+ +
+ Four MNIST digits 7, 2, 1, 0 predicted correctly, bytes identical on Browser, Node and Native, fingerprint 12fea82f…c9d9 +
Browser = Node = Native. One fingerprint, 12fea82f…c9d9.
+
+ +

The agent freestyles

+ +
+ + + + + + + + + + + + + +
Agent triesRefused byReason, on every host
Drops model_usage, or invents "research"Capability WASM, before any host callusage_undeclared
Sends an empty trust rootCapability WASMkey_untrusted
Trusts a signer it made upSpec 138 hostkey_untrusted
Swaps in another model digest, or asks for a bigger model under the same digestSpec 138 hostpin_mismatch
One bit flipped in the ONNX weightsSpec 138 hostdigest_mismatch
Host revokes the packageSpec 138 hostpackage_revoked
No connector boundRuntime ABI (no ambient authority)connector_unavailable
+
+ +

In every one of those cases, the model never ran.

+ +
+ Agent freestyle refusals: identical stable reasons on Browser, Node and Native +
Same refusal, same reason, three hosts.
+
+ +

What is not true yet

+ +
    +
  • The browser product path does not run it. Published BundleEmbedder + runtime.wasm fails to instantiate the capability: the connector_invoke import is missing. Filed as traverse#1719.
  • +
  • Browser and Node use demo glue. About 55 lines of labelled demo glue bind the connector to the published ExactModelBrowserHost from traverse-embedder-web@0.15.0, which does the verify and execute.
  • +
  • Native is the real product path. crates.io traverse-runtime 0.15.0 run_bytes_with_mediated_connectors plus the crate's own ExactModelHostConnector, joined by a small host-written bridge.
  • +
  • No production signing. The package is signed with a throwaway test key; only its public half is in the tree. Production key custody is traverse#1567.
  • +
  • Extra input fields are not rejected yet. The demo accepted an undeclared prompt field on every host. Enforcement is #1671 on main, not in v0.15.0.
  • +
+ +
+ Product-path truth panel: BundleEmbedder 0.15.0 cannot find connector_invoke import; Native is the real product path; Browser and Node bind the connector in demo glue; extra fields accepted +
The red badge stays on the page: published BundleEmbedder can't link connector_invoke yet.
+
+ +

Facts for agents

+ +
+
    +
  • Theme: An agent picks a model off the shelf. The contract still decides (week of 2026-10-16).
  • +
  • Public proof: this post and its screenshots. Runnable tree (access required, repo private): 2026-10-16-catalog-model-execute. Not a public clone — .github#30.
  • +
  • Capability: catalog model/model.execute@1.0.0 (registry#639). WASM 5ccfa372…4275, contract a96db38b…ef1c, both equal to the catalog entry. Catalog size: 228 caps.
  • +
  • Model: signed ONNX package of onnxmodelzoo/mnist-12, exact-ref pin d820ea39…. The model came from the ONNX model zoo on Hugging Face; nothing more is implied.
  • +
  • Product pins: Traverse v0.15.0. npm traverse-embedder-web@0.15.0. crates traverse-runtime / traverse-contracts 0.15.0.
  • +
  • Result: 14 scenarios byte-identical on Browser, Node and Native (fingerprint 12fea82f…c9d9). Predictions 7, 2, 1, 0.
  • +
  • Freestyle: usage_undeclared, key_untrusted, pin_mismatch, digest_mismatch, package_revoked, connector_unavailable, identical on every host; the model never runs.
  • +
  • Hosts: Native (traverse-runtime run_bytes_with_mediated_connectors + ExactModelHostConnector) is the real product path. Browser and Node use about 55 lines of labelled demo glue over ExactModelBrowserHost.
  • +
  • Not claimed: browser BundleEmbedder + runtime.wasm running it (missing connector_invoke import, traverse#1719). Production signing (test key; traverse#1567). Rejection of extra input fields (#1671, main only). Any Hugging Face partnership or integration.
  • +
  • Lead claim: discover → execute → trace. The agent proposes; the runtime decides.
  • +
+
+ +

The agent can pick from the shelf. It cannot pick what runs.

+ +
+ + + +
+
+ +
+
+

Agent picks. Contract decides.

+

One catalog capability, one signed model, three hosts, one fingerprint. Freestyle fails closed everywhere.

+
+ For AI agents → + Last week’s demo → +
+
+
+`; +--- + + + + diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index abdab0b..3fa685e 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -2,6 +2,7 @@ import SubpageLayout from '@layouts/SubpageLayout.astro'; const posts = [ + { href: '/blog/catalog-model-execute.html', title: 'An agent picks a model off the shelf. The contract still decides.', desc: 'Featured · Oct 16 · Weekly demo: catalog model/model.execute@1.0.0 runs a signed ONNX mnist-12 package byte-identically on Browser, Node and Native (14 scenarios, one fingerprint). Agent freestyle fails closed the same way on every host. Traverse v0.15.0. Browser BundleEmbedder path not yet (traverse#1719). Test-only key.' }, { href: '/blog/signed-models-on-every-host.html', title: 'Signed models on every host. The rights travel with them.', desc: 'Featured · Oct 15 · Traverse v0.15.0: signed exact-ref packages run on Swift, Kotlin/Android, and .NET as well as native Rust and the browser, on one framed protocol and one 21-case rights suite. model_usage is required (breaking). ONNX packaging via traverse-cli-rs, ABI v3 prepare-once, opt-in Core ML on Apple. Web modelUsage validation is #1685; iPhone evidence #1630; signing custody #1567. No host is Certified.' }, { href: '/blog/one-shared-runtime-two-loading-paths.html', title: 'One shared runtime. Not one shared .wasm file on every host.', desc: 'Featured · Oct 13 · One product runtime and one host ABI, two loading paths. Web BundleEmbedder digest-checks the bundle’s runtime.wasm. Rust traverse-embedder@0.14.0 links traverse-runtime natively. Capability WASM stays on that ABI. Hosts stay clients.' }, { href: '/blog/agent-mcp-exact-ref.html', title: 'Agent speaks MCP. Exact pin kills the freestyle.', desc: 'Featured · Oct 9 · Weekly demo: an agent calls MCP-shaped tools over ExactModelBrowserHost against the signed digits-mlp-1.0.0 package. Browser + Node bit-identical; tamper → digest_mismatch, empty trust → key_untrusted, rights lie → rights_mismatch. Traverse v0.14.0. Test-only key. Not the Mode A traverse-mcp binary.' }, diff --git a/src/pages/questions/what-is-exact-ref-model-execution.astro b/src/pages/questions/what-is-exact-ref-model-execution.astro index 712935a..e2ccb95 100644 --- a/src/pages/questions/what-is-exact-ref-model-execution.astro +++ b/src/pages/questions/what-is-exact-ref-model-execution.astro @@ -15,6 +15,7 @@ const jsonLd = JSON.stringify({ }); const relatedLinks = [ + { href: '/blog/catalog-model-execute.html', label: 'Weekly demo: catalog model.execute on Browser, Node and Native' }, { href: '/questions/can-kotlin-or-dotnet-embedders-run-exact-ref-yet.html', label: 'Can Kotlin or .NET run exact-ref yet?' }, { href: '/questions/what-is-digits-mlp.html', label: 'What is digits-mlp?' }, { href: '/questions/is-production-model-signing-ready.html', label: 'Is production model signing ready?' }, diff --git a/src/pages/questions/what-is-the-model-execute-catalog-capability.astro b/src/pages/questions/what-is-the-model-execute-catalog-capability.astro index 214bbf8..80d35b1 100644 --- a/src/pages/questions/what-is-the-model-execute-catalog-capability.astro +++ b/src/pages/questions/what-is-the-model-execute-catalog-capability.astro @@ -15,6 +15,7 @@ const jsonLd = JSON.stringify({ }); const relatedLinks = [ + { href: '/blog/catalog-model-execute.html', label: 'Weekly demo: catalog model.execute on Browser, Node and Native' }, { href: '/questions/what-is-exact-ref-model-execution.html', label: 'What is exact-ref model execution?' }, { href: '/questions/what-is-exact-model-host.html', label: 'What is ExactModelHost?' }, { href: '/questions/what-is-model-usage-in-traverse.html', label: 'What is model_usage?' }, @@ -48,7 +49,7 @@ const relatedLinks = [