{"ok":true,"site":{"host":"websims-sd.pages.dev","url":"https://websims-sd.pages.dev/","type":"live","desc":"system design studio","tools":[{"name":"studio_create_study","kind":"act","impl":"imperative","description":"Create and open a new project (the project id is `studyId`) with one empty version to draw on; the canvas opens at once. The currently open project remains saved and can be reopened with studio_open_study. Order of work: read studio_get_catalog, draw components then links with studio_apply_architecture_patch, set-workflow for the highest-risk flow, then set the yardstick with studio_update_study (workload, targets, faults, invariants naming the collections you drew), seal with studio_import_architecture { fromCandidateId }, then evaluate. Pass the evidenced arrival as workload here or set it with studio_update_study before the first run: the Studio's placeholder workload is refused by the runners.","annotations":{},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"The project's name."},"problem":{"type":"string","maxLength":4000,"default":""},"workload":{"type":"object","properties":{"arrival":{"anyOf":[{"type":"object","properties":{"kind":{"const":"poisson"},"ratePerSec":{"type":"number","minimum":0}},"additionalProperties":false,"required":["kind","ratePerSec"]},{"type":"object","properties":{"kind":{"const":"deterministic"},"ratePerSec":{"type":"number","minimum":0}},"additionalProperties":false,"required":["kind","ratePerSec"]},{"type":"object","properties":{"kind":{"const":"ramp"},"fromRatePerSec":{"type":"number","minimum":0},"toRatePerSec":{"type":"number","minimum":0}},"additionalProperties":false,"required":["kind","fromRatePerSec","toRatePerSec"]},{"type":"object","properties":{"kind":{"const":"spike"},"baseRatePerSec":{"type":"number","minimum":0},"peakRatePerSec":{"type":"number","minimum":0},"atSec":{"type":"number","minimum":0},"durationSec":{"type":"number","minimum":0}},"additionalProperties":false,"required":["kind","baseRatePerSec","peakRatePerSec","atSec","durationSec"]},{"type":"object","properties":{"kind":{"const":"steps"},"ratePerSec":{"type":"number","minimum":0},"steps":{"type":"array","items":{"type":"object","properties":{"atSec":{"type":"number","minimum":0},"ratePerSec":{"type":"number","minimum":0}},"additionalProperties":false,"required":["atSec","ratePerSec"]},"default":[]}},"additionalProperties":false,"required":["kind","ratePerSec"]}]},"durationSec":{"type":"number","minimum":0,"default":1200},"warmupSec":{"type":"number","minimum":0,"default":200},"seeds":{"type":"array","items":{"type":"integer","minimum":0},"minItems":1,"maxItems":64,"default":[1,2,3,4,5,6,7,8]},"traceLimit":{"type":"integer","minimum":0,"default":5000},"classes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"weight":{"type":"number","minimum":0,"default":1},"serviceMultiplier":{"type":"number","minimum":0,"default":1}},"additionalProperties":false,"required":["id","label"]},"maxItems":16,"default":[]}},"additionalProperties":false}},"additionalProperties":false,"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_update_study","kind":"act","impl":"imperative","description":"Set the project's shared yardstick: workload, SLOs, business goals, invariants, faults and exploration bounds. Every version is judged against these. Set it AFTER the workflow exists and BEFORE sealing or running: rules name collections, and collections exist only once set-workflow has run. Invariants may be written as { template, args } using studio_get_catalog.invariantTemplates, or as a full Invariant. A project with no invariants fails the correctness gate rather than passing it. Replace the placeholder workload here before the first run. Refused once any evaluation exists or a version is promoted.","annotations":{},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"problem":{"type":"string","maxLength":4000},"contract":{}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_list_studies","kind":"act","impl":"imperative","description":"List saved projects.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_open_study","kind":"act","impl":"imperative","description":"Open a saved project by studyId. Replaces what is open; nothing is deleted.","annotations":{"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"studyId":{"type":"string","minLength":1,"maxLength":64}},"additionalProperties":false,"required":["studyId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_import_architecture","kind":"act","impl":"imperative","description":"Import the current as-is architecture of a repository revision. Atomically links the repository and creates an immutable baseline with a source inventory and code, config, runtime, documentation or user evidence. Use observed only for facts directly supported by the cited source; mark deductions inferred and unknown production behaviour assumed. Code/config citations carry a SHA-256 hash of the normalized cited slice. Documentation may orient the scan but never qualifies as grounding evidence. Mark numeric measurements aspect=performance; code proving that a call exists is architecture evidence, not timing calibration. Every component timing and link network.propagationLatency must be positive; every link must set semantics and fanoutFactor (1 for one-to-one). Async links require a queue/event channel and maxHops. Missing inventory, evidence, workflow or source-state details seal the baseline as PROVISIONAL: it can be evaluated, but cannot be approved or handed off until the grounding report is clear. Two ways in: pass the complete design in one call, or pass fromCandidateId to seal an experiment you drew step by step on the canvas (the version studio_create_study opened, patched with studio_apply_architecture_patch per component and link). Either way this is what makes the drawing the immutable as-is baseline, shown to the person as CURRENT.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"repository":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160,"description":"Repository or workspace display name."},"rootHint":{"type":"string","maxLength":1024,"default":""},"branch":{"type":"string","maxLength":256,"default":""},"revision":{"type":"string","maxLength":256,"default":""},"dirty":{"type":["boolean","null"],"default":null},"scope":{"type":"array","items":{"type":"string","minLength":1,"maxLength":512},"maxItems":128,"default":[]},"excludedScope":{"type":"array","items":{"type":"string","minLength":1,"maxLength":512},"maxItems":128,"default":[]},"changedPaths":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1024},"maxItems":4096,"default":[]},"workingTreeFingerprint":{"type":"string","maxLength":256,"default":""}},"additionalProperties":false,"required":["name"]},"label":{"type":"string","minLength":1,"maxLength":120,"default":"As-is architecture"},"intent":{"type":"string","maxLength":2000,"default":"As-is architecture reconstructed from repository evidence."},"design":{},"fromCandidateId":{"type":"string","minLength":1,"maxLength":64},"expectedRevision":{"type":"integer","minimum":0},"evidence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"target":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}]},"targetKind":{"type":"string","enum":["node","edge","collection","handler","operation"]},"targetId":{"type":"string","minLength":1,"maxLength":128},"aspect":{"type":"string","enum":["architecture","behavior","performance"],"default":"architecture"},"confidence":{"type":"string","enum":["observed","inferred","assumed"]},"source":{"type":"string","enum":["code","config","runtime","documentation","user"]},"path":{"type":"string","maxLength":1024,"default":""},"lineStart":{"type":["integer","null"],"minimum":1,"default":null},"lineEnd":{"type":["integer","null"],"minimum":1,"default":null},"symbol":{"type":"string","maxLength":512,"default":""},"contentHash":{"anyOf":[{"type":"string"},{"const":""}],"default":""},"claim":{"type":"string","minLength":1,"maxLength":2000}},"additionalProperties":false,"required":["id","target","targetKind","targetId","confidence","source","claim"]},"maxItems":4096,"default":[]},"sourceInventory":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"kind":{"type":"string","enum":["entrypoint","work-source","runtime","dependency","queue","state-store"]},"label":{"type":"string","minLength":1,"maxLength":256},"path":{"type":"string","minLength":1,"maxLength":1024},"symbol":{"type":"string","maxLength":512,"default":""},"contentHash":{"anyOf":[{"type":"string"},{"const":""}],"default":""},"disposition":{"type":"string","enum":["modeled","excluded","unresolved"]},"target":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}],"type":["null"],"default":null},"reason":{"type":"string","maxLength":2000,"default":""}},"additionalProperties":false,"required":["id","kind","label","path","disposition"]},"maxItems":4096,"default":[]}},"additionalProperties":false,"required":["repository"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_study","kind":"answer","impl":"imperative","description":"Read the current project: problem, workload, SLOs, business goals, invariants, bounds, and its versions (candidates) with their revisions. Workload, SLOs, invariants and bounds are project-level; a version cannot change them. Contains user-authored text.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_architecture","kind":"answer","impl":"imperative","description":"Read the active or named architecture as a repository-linked model: role, ancestry, revision, full design, topology validation issues, bounded distributed-semantics report, and per-node/per-link evidence. Use this before proposing or patching an experiment. Contains repository paths and user- or agent-authored claims.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_catalog","kind":"answer","impl":"imperative","description":"Read the modelling vocabulary: component kinds, workflow operations and which are indivisible, the shipped patterns, injectable faults, invariant templates and the Invariant shape, layout rules, and network-profile placeholders. Read this before drawing. The operations are a closed set, and the indivisible ones are what make a design safe.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_candidate","kind":"answer","impl":"imperative","description":"Read one version: its design, workflow, revision and stated intent. The revision is required by studio_replace_candidate_draft. Contains user-authored text.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64,"description":"Version id (`candidateId`), from studio_get_study."}},"additionalProperties":false,"required":["candidateId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_apply_architecture_patch","kind":"act","impl":"imperative","description":"Apply a small atomic graph delta to an experiment instead of resending the whole design. Operations can add, update or remove nodes and links, replace the workflow, or rename the design. Every accepted patch is drawn on the canvas immediately, so drawing an architecture one component or link per call lets a person watch it form; coordinates communicate the topology (callers to dependencies left-to-right, parallel branches on separate rows, shared dependencies centered): either choose x/y per node from studio_get_catalog.layoutGuide, or include an auto-layout operation and the studio computes that layout from the links. Overlapping nodes and missing coordinates are otherwise refused, never silently repositioned. Agent-authored servers must set fanout explicitly; agent-authored service components must set positive timing fields explicitly, and links must include explicit synchronous/asynchronous semantics, a network profile with positive one-way propagationLatency plus fanoutFactor (1 for one-to-one; asynchronous queue/event links also require maxHops). Requires the revision read from studio_get_architecture or returned by the previous call, and refuses baselines, promoted versions, stale revisions, missing targets and results with errors (a link to a node that does not exist yet, for example).","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"expectedRevision":{"type":"integer","minimum":0},"operations":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"op":{"const":"add-node"},"node":{"description":"Complete node. x and y are required and should follow studio_get_catalog.layoutGuide (x by dependency depth, parallel branches on separate y rows), unless the same patch contains an auto-layout operation, which places every node."}},"additionalProperties":false,"required":["op","node"]},{"type":"object","properties":{"op":{"const":"update-node"},"nodeId":{"type":"string","minLength":1,"maxLength":128},"patch":{"type":"object","additionalProperties":{},"description":"Shallow node field patch. Cannot contain id or kind."}},"additionalProperties":false,"required":["op","nodeId","patch"]},{"type":"object","properties":{"op":{"const":"remove-node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["op","nodeId"]},{"type":"object","properties":{"op":{"const":"add-edge"},"edge":{}},"additionalProperties":false,"required":["op","edge"]},{"type":"object","properties":{"op":{"const":"update-edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128},"patch":{"type":"object","additionalProperties":{},"description":"Shallow link field patch. Cannot contain id."}},"additionalProperties":false,"required":["op","edgeId","patch"]},{"type":"object","properties":{"op":{"const":"remove-edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["op","edgeId"]},{"type":"object","properties":{"op":{"const":"set-workflow"},"workflow":{}},"additionalProperties":false,"required":["op","workflow"]},{"type":"object","properties":{"op":{"const":"set-design-name"},"name":{"type":"string","minLength":1,"maxLength":160}},"additionalProperties":false,"required":["op","name"]},{"type":"object","properties":{"op":{"const":"auto-layout"}},"additionalProperties":false,"required":["op"],"description":"Move every node to a layered layout computed from the links: callers in the leftmost column, one column per dependency depth, each node level with the middle of its callers, no overlaps. Applied after the other operations in the patch, so nodes added in the same patch may omit x and y. Use it when hand-placed coordinates would be guesswork, or after a newly found dependency changes the shape of the graph."}]},"minItems":1,"maxItems":128,"description":"Atomic graph changes, applied in order and committed only if the final design validates."}},"additionalProperties":false,"required":["candidateId","expectedRevision","operations"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_attach_code_evidence","kind":"act","impl":"imperative","description":"Append evidence to nodes, links, collections, handlers or operations without replacing the architecture. Requires the current version revision and refuses duplicate ids or missing targets. Evidence is append-only through WebMCP so an agent cannot silently erase the basis for an as-is claim.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"expectedRevision":{"type":"integer","minimum":0},"evidence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"target":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}]},"targetKind":{"type":"string","enum":["node","edge","collection","handler","operation"]},"targetId":{"type":"string","minLength":1,"maxLength":128},"aspect":{"type":"string","enum":["architecture","behavior","performance"],"default":"architecture"},"confidence":{"type":"string","enum":["observed","inferred","assumed"]},"source":{"type":"string","enum":["code","config","runtime","documentation","user"]},"path":{"type":"string","maxLength":1024,"default":""},"lineStart":{"type":["integer","null"],"minimum":1,"default":null},"lineEnd":{"type":["integer","null"],"minimum":1,"default":null},"symbol":{"type":"string","maxLength":512,"default":""},"contentHash":{"anyOf":[{"type":"string"},{"const":""}],"default":""},"claim":{"type":"string","minLength":1,"maxLength":2000}},"additionalProperties":false,"required":["id","target","targetKind","targetId","confidence","source","claim"]},"minItems":1,"maxItems":256}},"additionalProperties":false,"required":["candidateId","expectedRevision","evidence"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_upsert_source_inventory","kind":"act","impl":"imperative","description":"Add or replace audited source-inventory items on a repository baseline. The update is deterministic by item id and revision-guarded. Every runtime boundary must be modeled, excluded with a reason, or left visibly unresolved.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"expectedRevision":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"kind":{"type":"string","enum":["entrypoint","work-source","runtime","dependency","queue","state-store"]},"label":{"type":"string","minLength":1,"maxLength":256},"path":{"type":"string","minLength":1,"maxLength":1024},"symbol":{"type":"string","maxLength":512,"default":""},"contentHash":{"anyOf":[{"type":"string"},{"const":""}],"default":""},"disposition":{"type":"string","enum":["modeled","excluded","unresolved"]},"target":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}],"type":["null"],"default":null},"reason":{"type":"string","maxLength":2000,"default":""}},"additionalProperties":false,"required":["id","kind","label","path","disposition"]},"minItems":1,"maxItems":256}},"additionalProperties":false,"required":["candidateId","expectedRevision","items"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_grounding_report","kind":"answer","impl":"imperative","description":"Read the computed grounding status, coverage, source inventory and exact gaps for a repository baseline. This tool cannot set the status; it is derived from the current snapshot, model, evidence and receipt.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_upsert_issue","kind":"act","impl":"imperative","description":"Propose an evidence-linked design issue. Repeated identical analysis updates the same deterministic row rather than creating duplicates. If an existing row changes, pass its current expectedRevision. This tool cannot verify, dismiss, accept risk, or approve anything; those decisions remain with trusted checks or people.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":4000,"default":""},"severity":{"type":"string","enum":["critical","warning","info"]},"category":{"type":"string","enum":["grounding","correctness","reliability","performance","scalability","data-consistency","security","operability","other"]},"candidateId":{"type":["string","null"],"minLength":1,"maxLength":64,"default":null},"targets":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}]},"maxItems":128,"default":[]},"evidence":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"const":"architecture-evidence"},"candidateId":{"type":"string","minLength":1,"maxLength":64},"evidenceId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","candidateId","evidenceId"]},{"type":"object","properties":{"kind":{"const":"evaluation"},"evaluationId":{"type":"string","minLength":1,"maxLength":512},"candidateHash":{"type":"string","minLength":1,"maxLength":256}},"additionalProperties":false,"required":["kind","evaluationId","candidateHash"]},{"type":"object","properties":{"kind":{"const":"grounding-report"},"candidateId":{"type":"string","minLength":1,"maxLength":64},"reportHash":{"type":"string","minLength":1,"maxLength":256},"gapCode":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","candidateId","reportHash","gapCode"]},{"type":"object","properties":{"kind":{"const":"analysis"},"analysisHash":{"type":"string","minLength":1,"maxLength":256},"findingId":{"type":"string","minLength":1,"maxLength":256}},"additionalProperties":false,"required":["kind","analysisHash","findingId"]},{"type":"object","properties":{"kind":{"const":"user-observation"},"observationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","observationId"]}]},"maxItems":256,"default":[]},"verification":{"type":"object","properties":{"kind":{"type":"string","enum":["grounding","correctness","performance","manual"]},"summary":{"type":"string","minLength":1,"maxLength":2000},"requiredSignals":{"type":"array","items":{"type":"string","minLength":1,"maxLength":512},"maxItems":32,"default":[]}},"additionalProperties":false,"required":["kind","summary"]},"expectedRevision":{"type":"integer","minimum":0}},"additionalProperties":false,"required":["title","severity","category","verification"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_issues","kind":"answer","impl":"imperative","description":"Read current-baseline issues with computed states. States come from snapshot-pinned evidence and trusted receipts; they are not agent-authored fields. Pass status=historical to inspect findings from prior source snapshots.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["open","verified","accepted-risk","dismissed","historical"]},"severity":{"type":"string","enum":["critical","warning","info"]},"source":{"type":"string","enum":["user","agent","grounding-gap","correctness-check","performance-analysis"]}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_validate_draft","kind":"act","impl":"imperative","description":"Check a design without storing it. Returns schema, topology and workflow errors naming the field and what is wrong, plus warnings. Call this before creating or replacing a version. A valid result changes nothing on the page; pass the same design to studio_import_architecture or studio_create_candidate to render it.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"design":{"description":"A design document to check without storing it."}},"additionalProperties":false,"required":["design"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_create_candidate","kind":"act","impl":"imperative","description":"Create a new version: isolated, marked agent-authored, revision 0. Omit the design to copy the active version, which is what you want when changing one aspect of it. Called right after studio_create_study, while the blank drawing it opened is still empty, this adopts that drawing (relabelled, filled with the design if one is given) instead of adding a second empty version. The version is drawn on the page at once. Never modifies a version somebody has worked on.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120,"description":"Short human-readable name."},"intent":{"type":"string","maxLength":2000,"default":""},"design":{},"copyFrom":{"type":"string","minLength":1,"maxLength":64},"candidateType":{"type":"string","enum":["exploration","repository-fix"],"default":"exploration"},"issuePlans":{"type":"array","items":{"type":"object","properties":{"issueId":{"type":"string","minLength":1,"maxLength":128},"hypothesis":{"type":"string","minLength":1,"maxLength":2000},"tradeoffs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":32,"default":[]},"verificationPlan":{"type":"string","minLength":1,"maxLength":2000},"expectedArchitectureImpact":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"maxLength":2000},"targets":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}]},"maxItems":128,"default":[]}},"additionalProperties":false,"required":["summary"]}},"additionalProperties":false,"required":["issueId","hypothesis","verificationPlan","expectedArchitectureImpact"]},"maxItems":64,"default":[]}},"additionalProperties":false,"required":["label"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_propose_alternatives","kind":"act","impl":"imperative","description":"Create two to eight isolated alternatives together. Each repository-fix alternative must name registered issues and preserve its own hypothesis, trade-offs, verification plan and expected architecture impact. The alternatives are proposals only: this tool cannot verify issues or approve a version.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"alternatives":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120,"description":"Short human-readable name."},"intent":{"type":"string","maxLength":2000,"default":""},"design":{},"copyFrom":{"type":"string","minLength":1,"maxLength":64},"candidateType":{"type":"string","enum":["exploration","repository-fix"],"default":"exploration"},"issuePlans":{"type":"array","items":{"type":"object","properties":{"issueId":{"type":"string","minLength":1,"maxLength":128},"hypothesis":{"type":"string","minLength":1,"maxLength":2000},"tradeoffs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":32,"default":[]},"verificationPlan":{"type":"string","minLength":1,"maxLength":2000},"expectedArchitectureImpact":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"maxLength":2000},"targets":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"const":"node"},"nodeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","nodeId"]},{"type":"object","properties":{"kind":{"const":"edge"},"edgeId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","edgeId"]},{"type":"object","properties":{"kind":{"const":"collection"},"collectionId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","collectionId"]},{"type":"object","properties":{"kind":{"const":"handler"},"handlerId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId"]},{"type":"object","properties":{"kind":{"const":"operation"},"handlerId":{"type":"string","minLength":1,"maxLength":128},"operationId":{"type":"string","minLength":1,"maxLength":128}},"additionalProperties":false,"required":["kind","handlerId","operationId"]}]},"maxItems":128,"default":[]}},"additionalProperties":false,"required":["summary"]}},"additionalProperties":false,"required":["issueId","hypothesis","verificationPlan","expectedArchitectureImpact"]},"maxItems":64,"default":[]}},"additionalProperties":false,"required":["label"]},"minItems":2,"maxItems":8}},"additionalProperties":false,"required":["alternatives"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_replace_candidate_draft","kind":"act","impl":"imperative","description":"Replace a version's design with a complete, validated document. Requires the revision you read, and is refused if the version changed since, so two editors cannot silently overwrite each other. Refused for the promoted version and for the as-is baseline; create a new version before redesigning code-derived architecture.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"expectedRevision":{"type":"integer","minimum":0,"description":"The revision you believe you are replacing, from studio_get_candidate. The call is refused if the version has moved on."},"design":{"description":"A complete, validated design document."}},"additionalProperties":false,"required":["candidateId","expectedRevision","design"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_run_evaluation","kind":"act","impl":"imperative","description":"Run the bounded correctness search and/or the replicated performance measurement for one version. Refused while the project's workload is still the Studio placeholder, because the first result locks the yardstick for every version. Performance defaults off and is refused for a repository model until every component and link has observed runtime or user performance evidence. Verdicts: VIOLATED, NO_VIOLATION_WITHIN_BOUNDS, INCONCLUSIVE_BOUND_REACHED, INVALID_MODEL. NO_VIOLATION_WITHIN_BOUNDS is not proof of safety, and INCONCLUSIVE_BOUND_REACHED establishes nothing either way. Fetch the counterexample with studio_get_evaluation.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"correctness":{"type":"boolean","default":true},"performance":{"type":"boolean","default":false}},"additionalProperties":false,"required":["candidateId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_run_production_scenarios","kind":"act","impl":"imperative","description":"Run the standard production suite for one version: bounded concurrent requests and retries, a 3x 30-second traffic spike with recovery, a load ramp to the project SLO boundary, and 30% degradation of a high-impact dependency. Returns measured evidence and a specific recommendation for every probe. For a repository model this is refused until every component and link has observed runtime or user performance evidence. An inconclusive result names the missing workflow, invariant, SLO, dependency or bound; never treat it as a pass.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64,"description":"Version id (`candidateId`), from studio_get_study."}},"additionalProperties":false,"required":["candidateId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_evaluation","kind":"answer","impl":"imperative","description":"Read a version's cached evaluation, including the full counterexample trace when an invariant was violated: actor lanes, operation order, state changes and the faults injected. Null when the version has not been evaluated at the current design, seeds and bounds.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64,"description":"Version id (`candidateId`), from studio_get_study."}},"additionalProperties":false,"required":["candidateId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_compare_candidates","kind":"act","impl":"imperative","description":"Compare versions. Returns each eligibility decision with the reason every gate opened or did not, and the Pareto frontier among the ELIGIBLE ones. Eligible means the correctness search ran to exhaustion without a violation, every required issue is verified or has a human disposition, no critical regression is open, repository performance inputs are calibrated, AND the conservative end of the performance interval meets every SLO and goal. The frontier is Pareto-optimal among the versions tested: not globally best, and not ranked. Differences within the measured intervals are ties, not wins.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"candidateIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"maxItems":64,"default":[]}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_get_implementation_handoff","kind":"act","impl":"imperative","description":"Read the exact revision-pinned architecture change a person approved for implementation: repository source state, before/after component and workflow values, issue-to-change-to-verification mappings, source evidence, acceptance criteria, and unresolved production findings. A new repository import invalidates old issue verification. Returns a blocker until a repository-backed experiment has been approved in the interface. This tool does not approve, edit repository files, run tests, deploy, or mark the visual model synchronized.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_annotate","kind":"act","impl":"imperative","description":"Pin a short note to a component, link, counterexample step or version so the person sees your reasoning on the canvas (for example: which component the race happens at, what a proposed version trades off). Notes are session-only narration: they are not part of the project, are never saved or exported, and cannot change any result.","annotations":{},"inputSchema":{"type":"object","properties":{"candidateId":{"type":"string","minLength":1,"maxLength":64},"targetKind":{"type":"string","enum":["node","edge","step","candidate"],"description":"What the note is pinned to (candidate = a whole version). A step is a 0-based index into that version's counterexample."},"targetId":{"type":"string","minLength":1,"maxLength":64,"description":"Node id, edge id, step index as a string, or version id."},"text":{"type":"string","minLength":1,"maxLength":400,"description":"The note, one or two sentences. Say what, and cite where when you can."},"tone":{"type":"string","enum":["info","warn","bad"],"default":"info"}},"additionalProperties":false,"required":["targetKind","targetId","text"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"studio_focus","kind":"act","impl":"imperative","description":"Point the person at something: select and pan the canvas to a component or link, or scrub the active version's counterexample to a step (0-based) so the sprites and state chips show that moment. Changes only what is on screen.","annotations":{},"inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["node","edge","step"],"description":"Select a node or edge, or scrub to a counterexample step."},"id":{"type":"string","minLength":1,"maxLength":64},"index":{"type":"integer","minimum":0},"candidateId":{"type":"string","minLength":1,"maxLength":64}},"additionalProperties":false,"required":["kind"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","apiSurface":"spec","toolCount":26}}