{"name": "Span-level replay: fork from the failure", "provider": "TextForAgents LLC", "support": "support@textforagents.com", "slug": "span-level-replay-fork-from-failure", "what": "Fork-replay ONE recorded span (a JSON tool or model step from a tracer) out of a failed agent run and get an attribution verdict \u2014 determinism / tool-nondeterminism / tool-drift / env-drift / world-state / model-decision \u2014 without re-running the whole run. Ingests normalized JSONL span records and OTel-shaped spans (including LangGraph/Langfuse-shaped foreign traces). Side-effecting spans are never re-executed: they are served the recorded result from a fingerprint-keyed stub registry and fail closed on a miss. The recorded env_digest is verified before any execution; a tampered env is refused, never attributed against.", "features": ["MCP-shaped replay_span tool (JSON-RPC initialize/tools/list/tools/call at POST /mcp)", "span-level fork replay of tool and model spans", "collision-safe canonical fingerprinting (replay/stub/attribution key)", "env_digest tamper verification before any execution", "fail-closed recorded-result stubbing for side-effecting tools", "double-execution attribution with the six-verdict taxonomy"], "limits": ["Span level only: JSON tool/model span records from tracers. No instruction, thread, or snapshot recording; no cross-platform or cross-runtime comparison mode.", "Side-effecting tools NEVER execute. A side-effecting span is served only from a recorded result with the identical canonical fingerprint; a stub miss is UNREPLAYABLE and no live call is made. There is no NOOP conversion.", "The span fingerprint is a replay/stub/attribution key. It is not a general JSON-document signing or equivalence service and is never a document signature.", "Accuracy is claimed only for the seeded lab set: 24/24 attribution vs 0.167 for the full-re-run baseline (LABREPORT-008). Real-trace sampling is a packet item; no accuracy beyond the seeded set is claimed.", "Model-decision replay costs exactly one model call of the span's own size in the caller's harness. This hosted service does not run live model inference for you: you supply the second-model tool_call (live_tool_call) and the price covers the fork, fingerprint comparison, and attribution. Live-model token cost across span sizes is unmeasured (packet item) and is not claimed.", "Recorder/enricher is a claim limit: traces recorded without tool_version/tool_schema_hash/side_effecting enrichment get reduced verdicts, labeled drift-unavailable, never guessed. Full drift attribution requires the recording contract (env with tool_version + tool_schema_hash and an env_digest).", "Transport bound: request bodies over 2 MB are refused (HTTP 413); a single span whose canonical size exceeds 1 MB is UNREPLAYABLE.", "Hosted read-only re-execution: the service never executes customer code. Your harness executes the read-only tool twice and supplies live_outputs (and live_env); without them the recorded output is used for both executions, which verifies determinism of the recording only.", "NO free tier and NO trial: every replay is metered from the first call ($0.02 tool-span, $0.05 model-decision, x402 USDC on Base).", "Lost-token recovery is a manual support@ step."], "prices": {"tool_span_replay_usd": 0.02, "model_decision_replay_usd": 0.05, "terms": "pay per replay (x402), no subscription, NO free tier, NO trial \u2014 metered from the first call"}, "how_to_start": "POST /register {account_name, payer_wallet} -> per-customer token (shown once; scopes your replay history). Then POST /mcp JSON-RPC: initialize, tools/list, then tools/call replay_span \u2014 unpaid calls return HTTP 402 with the x402 challenge ($0.02 tool span / $0.05 model span, USDC on Base, payTo pinned raw 0x); resend with a verified X-PAYMENT header to get the verdict.", "verdicts": ["determinism (DETERMINISTIC-OK)", "tool-nondeterminism (TOOL-NONDETERMINISM)", "tool-drift (TOOL-DRIFT)", "env-drift (ENV-DRIFT)", "world-state (WORLD-STATE)", "model-decision (MODEL-DECISION)", "unreplayable (UNREPLAYABLE)"]}