WASM Capability Matrix

What runs in the shared Rust core, and how each runtime reaches it.

The Rust is in crates/: ats (parsing, filters, resolution, watchers), ats-id, ats-sign, and the stores ats-sqlite, ats-duckdb and ats-indexeddb. It reaches a runtime by one of three bridges:

In Rust

CapabilityRustBrowserNode (Go)
ax query parsing, time resolvedats::ax_filteraxFilter, used by ax-element and ts-elementwazero ax_filter, resolve_temporal_expr
as command parsingats::parser::as_commandnot exportedwazero parse_as_command
Attestation storeats-indexeddb; ats-sqlite, ats-duckdbIndexedDB, used by ax-element and ts-elementcgo
What a store takesAttestation::writableevery put to IndexedDBevery put, both backends; refused as region unwritable
Which attestations a filter namesAxFilter::admits, AxFilter::selectIndexedDB querywatchers; SQLite and DuckDB SQL hold the same rule (names meet ASCII case aside)
overats::ax::overin query_attestationsin the resolved query below
Query resolution: aliases, cartesian expansion, grouping, classification, conflictsats::ax::execute_with_aliasesnocgo storage_query_resolved, read_conn_query_resolved; a parquet node reads its SQLite landing file
Watcher matchingats::watcher::match_watchersnowazero match_watchers, and nothing else: a build without qntxwasm matches no watcher
Identity (ASUID)ats-idgenerateASUID, used by ts-elementwazero generate_asuid, generate_compact_asuid, generate_random_id
Attestation signingats-signlaye-p2p sign_attestation, used by ts-elementwazero canonical_attestation; ats/signing/testdata holds the vectors both are tested against
Bounded storage enforcementats-sqlitenocgo
Cosine similarityats::similaritycosineSimilarity, wrapped in local-semantic-search.ts, which nothing importsnot called: server/embeddings/clustering.go has its own cosineSimilarityF32

Exported and not called

BridgeExports
wazeroparse_ax_query, watch_filter, classify_claims, expand_cartesian_claims, group_claims, dedup_source_ids, id_clean_seed, id_normalize_for_lookup
browserclassify_claims, generate_random_id, id_clean_seed, id_normalize_for_lookup

The server classifies through the cgo query path, not these.

In Go

CapabilityGo packageWhy it is there
Attribute schemaats/attrs/reflect: Rust has no runtime reflection, so struct-tag schemas need a redesign, not a translation
SO action payloadsats/so/Rust parses the so actions (ax_filter returns them); Go turns them into a job
SO prompt executionats/so/actions/prompt/holds a database/sql handle, calls internal/ai/provider, submits through pulse/async
Pulse schedulingpulse/job orchestration, goroutines, database-bound

Elsewhere