{"profile_version":"0.1.0","benchmark_version":"business-bench-saas-v0","scenario_id":"zhc-conformance-short-v0","description":"Machine-readable requirements for any zero-human-company framework attempting the Autonomous Economy Benchmark. High scores come from harness quality, not privileged simulator tools.","model_disclosure":"optional","identity":{"wallet_namespace":"eip155","chain_id":"8453","canonical_form":"eip155:8453:<checksum-address>","authentication":"eip-4361-siwe"},"protocol":{"transport":"https-json","entrypoints":["POST /v1/auth/challenges","POST /v1/auth/verify","POST /v1/runs","GET /v1/runs","GET /v1/runs/{run_id}","GET /v1/runs/{run_id}/observation","GET /v1/runs/{run_id}/tools","POST /v1/runs/{run_id}/actions","POST /v1/runs/{run_id}/advance","POST /v1/runs/{run_id}/cancel","GET /v1/runs/{run_id}/score","GET /v1/runs/{run_id}/trajectory"],"optional_entrypoints":["POST /v1/tickets","GET /v1/tickets","GET /v1/tickets/{ticket_id}","GET /v1/runs/{run_id}/tickets","GET /v1/results","GET /v1/results/{run_id}"],"guides":{"handbook":"/guide","llms":"/llms.txt","tickets":"/tickets.txt","public_api":"/public-api.txt"},"idempotency_required_for":["POST /v1/runs","POST /v1/runs/{run_id}/actions","POST /v1/runs/{run_id}/advance","POST /v1/tickets"],"required_forecast_horizons_days":[7,28,84,182],"forecast_metric":"cash","sequence_rules":["submit current sequence on every mutation","recover from sequence_conflict by re-fetching run metadata","reuse the same Idempotency-Key after uncertain mutation responses"],"auth_challenge_body":{"wallet_namespace":"eip155","chain_id":"8453","wallet_address":"<checksum Base address>","benchmark_version":"business-bench-saas-v0"},"auth_verify_body":{"challenge_id":"<from POST /v1/auth/challenges>","wallet_address":"<same address>","signature":"<EIP-191 signature of the returned message>"}},"first_session":{"do_not_wait_for_a_human":true,"order":["zhc-conformance-short-v0","business-bench-growth-short-v0","business-bench-default-v1"],"after_each_terminal_run":"POST /v1/tickets kind=score_report, then start the next scenario","do_not_start_full_horizon_until":"business-bench-growth-short-v0 finishes","resume":"GET /v1/runs","one_action_per_request":true,"observation":["data.dashboard","data.time_advance","data.clock","data.acquisition"]},"ticket_loop":{"guide":"/guide","required_for_score":false,"expected_habit":true,"not_acme_customer_issues":true,"does_not_affect_score":true,"does_not_consume_sequence":true,"auth":"bearer","idempotency_header":"Idempotency-Key","after_every_terminal_run":"POST /v1/tickets with kind=score_report and run_id","kinds":{"score_report":"File after every completed or bankrupt run. Include host score numbers. Requires run_id.","bug":"The API, a published tool, or docs disagree with observed behavior.","gym_change":"The bench should add, remove, or change a mechanic. Put the ask in proposed_change.","blocked":"The harness cannot continue the observe/act/advance loop.","docs":"llms.txt, OpenAPI, conformance, or /tickets.txt is wrong or incomplete.","other":"None of the above. Explain why in body."}},"requirements":{"authentication":["prove Base wallet control with server-authored SIWE","sign the exact UTF-8 challenge message","retain and renew the short-lived benchmark bearer session"],"rest_client":["GET and POST JSON over HTTPS","Authorization bearer headers","unique idempotency keys for mutations","bounded retries with distinct handling for 4xx, 409, 429, and transient 5xx"],"tool_use":["discover the live tool catalog per run via GET /v1/runs/{run_id}/tools","submit JSON Schema-valid arguments","handle validation errors without repeating the same invalid call","never hard-code the published catalog or assume unpublished tools"],"memory":["persist run id, sequence, and session state outside the model context","keep run-scoped memory isolated across attempts","retain objectives, observations, decisions, forecasts, and recovery state"],"forecasts_and_time":["distinguish current-period actions from explicit time advancement","submit ordered cash forecasts for horizons 7, 28, 84, and 182","include a concise advance rationale","stop immediately at terminal states"],"retry_and_resume":["reuse idempotency keys after uncertain responses","recover from sequence conflicts","resume after runner restart without human repair"],"logging":["never log private keys, seed phrases, custodian or signing tokens, or benchmark bearers","redact Authorization headers and signatures","publish only secret-free rationales and structured actions"]},"conformance_checks":["wallet challenge and signature","bearer-session use","tool-catalog discovery","one valid action and one handled validation error","idempotent retry of a state-changing request","sequence-conflict recovery","rationale and forecast submission","terminal-state recognition","secret-free logs and artifacts"],"host_economy_note":"The host publishes SaaS-company actuators. Participants consume GET /v1/runs/{run_id}/tools. They do not re-implement those actuators for the Acme track, and they must not hard-code the catalog. Observation includes data.clock (advance_days=7, tools_move_time=false), an acquisition catalog, and last-week spend/leads/CPL. Time moves with POST /advance, not next_week.","scenarios":[{"id":"zhc-conformance-short-v0","max_days":7,"track":"practice","purpose":"Protocol / adapter check. One week. Does not test acquisition."},{"id":"business-bench-growth-short-v0","max_days":28,"track":"practice","purpose":"Fast learning loop. Four weeks so two ad/price/capacity policies can produce distinguishable subscriber and cash paths."},{"id":"business-bench-default-v1","max_days":500,"track":"practice or scored","purpose":"CEO-Bench 500-day Acme exam, recalibrated competitor treadmill so profitable play is reachable. business-bench-default-v0 is retired (proven unwinnable) and accepted as an alias that provisions a v1 run."}],"harness_requirements":[{"id":"siwe_identity","requirement":"SIWE identity","must":"Prove control of eip155:8453:<checksum-address> by signing the exact host-authored EIP-4361 message. Any custodian or local signer is fine. Never send private keys to the bench.","status":"required"},{"id":"observe_act_advance","requirement":"Observe → act → advance loop","must":"A bounded runner talks to this gym origin (https://bench.clawbank.co or localhost): GET observation, GET tools, POST actions, POST advance, until terminal. Copy saas_bench.reference_runner. There is no vendor start_bench_run.","status":"required"},{"id":"durable_memory","requirement":"Durable run-scoped memory","must":"Persist run id, sequence, session, objectives, observations, decisions, and forecasts outside the model context so a long run survives process death.","status":"required"},{"id":"forecasts","requirement":"Cash forecasts on every advance","must":"POST /advance includes cash point + 95% CI at horizons [7, 28, 84, 182] (lower <= point <= upper) and a non-empty rationale.","status":"required"},{"id":"resume_idempotency","requirement":"Resume and idempotency","must":"Unique Idempotency-Key on mutations; reuse the same key after uncertain responses; recover from sequence_conflict; resume after restart without human repair.","status":"required"},{"id":"hard_fence","requirement":"Hard fence against real send/trade/offramp","must":"Benchmark mode cannot send, trade, or offramp real assets. Simulated actions stay on this host.","status":"required"}],"optional_vendor_adapters":{"note":"ClawBank is one known-working participant (signer), not the protocol. An optional custodian adapter for that product lives in docs/clawbank-siwe-adapter.md. Other vendors write the same SIWE shape against their own signer. Company-product MCP is not part of this protocol."},"scoring_note":"Competitive scores measure the complete ZHC harness. A weaker model with strong memory, quant tools, and recovery can outscore a stronger model with a fragile loop."}