{"schema_version":"1","site":"https://decosa.ai","id":"csr-number-verifier","num":"71","name":"CSR number-to-table verifier","tool_name":"Check CSR numbers against tables","short":"CSR number QC","blurb":"For medical writing and regulatory operations teams at sponsors and CROs. Give it a clinical study report: the narrative of sections 10 to 12 with its in-text tables and TLFs, as text and rows or as a PDF (born-digital or scanned, read by the document reader). Every number in the narrative is traced to the table cell it reports: an open model points each number at the cell for the right arm, row and timepoint, and code compares the value at the printed decimals and recomputes percentages, differences, totals and relative reductions. It flags numbers that don't match their cell, numbers with no source, and derived numbers that don't compute, with the likely slip (the other arm's value, a stale value from an earlier data cut, transposed digits, rounding, a wrong denominator). In-text tables are checked against their source TLF. You get a QC report and a signed record. A medical-writing QC aid: the medical writer and the QC reviewer decide.","status":"live","labels":{"industry":["science-research","healthcare"],"job":["review","attest"],"input":["text","files"],"deploy":["selfhost"],"status":"live","output":["record","data"],"data":["confidential"],"hardware":"gpu-96","licence":"permissive"},"industries":["science-research","healthcare"],"runs_in":["selfhost"],"part_of":[],"built_from":["document-reader","evidence-retrieval","numeric-grounding","signed-record"],"models":"Qwen3.8-27B (points each number at its cell) · Qwen3-Embedding + Qwen3-Reranker (finding the right table in a long report) · PaddleOCR-VL + Docling layout (reading PDFs and scans)","where":"Self-host for a real report; the hosted demo takes invented or public reports only","hardware":"1x RTX PRO 6000 (96 GB) for Qwen3.8-27B, plus about 10 GB for the embedder and reranker and about 6 GB for the document reader; the comparisons, report and record run on CPU","final_artifact":"A number-QC report in Markdown (each flag with its section, cell, expected value and likely slip; in-text table mismatches) and a signed decosa.record.v1 of every number's cell and verdict.","self_host_first":true,"verification":{"receipt_coverage":"full","summary":"Receipt per model call; signed search receipts with the index hash; every comparison and recomputation done in code; signed hash-chained record of each number's cell and verdict","manual_qa":{"hosted":{"date":"2026-09-27","result":"pass","p50_ms":6525,"p95_ms":null,"runs":null,"receipts_per_run":6,"cost_per_run_usd":0.004468},"selfhost":{"date":"2026-09-27","result":"pass","method":"fresh clone into a clean directory, api image from docker/api/Dockerfile, compose api with a named volume, direct route to the local Qwen3.8-27B, the running document reader (:8497) and retrieval (:8499) services, local signing; torn down after","notes":"The rehearsal bundle passed 15/15 in 62 s; every receipt attested. The reader and retrieval services were the running ones, not built from the compose file here."},"known_limits":["Hosted verification ran on the pre-release server (decosa-api the pre-release branch on our server, gateway route). The production API gets this tool when the branch merges.","Measured on synthetic CSRs written by the same author as the prompts and on ClinicalTrials.gov results with a template narrative; not on a real sponsor CSR or against a QC reviewer's findings.","Figures, listings and patient narratives are not read; RTF and SAS outputs must be exported to PDF or rows first.","A PDF run reads up to 40 pages; split a longer report by section.","An unflagged number is not proven right: 'matched by value only' means the value was found in one cell, not that the sentence was matched to it. A run where model calls failed is marked incomplete."],"nightly_covers":null},"nightly":"https://api.decosa.ai/verify/status"},"eval_summary":{"metrics":[{"name":"Planted number errors caught","value":"92 / 96","unit":null,"n":96,"split":"test","note":"held-out synthetic CSRs, 8 errors each: transposition, other arm, wrong N, wrong denominator, rounding, stale cut; re-measured 30 Sep 2026"},{"name":"Planted number errors caught, second writer","value":"93 / 96","unit":null,"n":96,"split":"test","note":"the held-out CSRs with each paragraph rewritten by Qwen3.8 (numbers kept)"},{"name":"Planted number errors caught, ClinicalTrials.gov tables","value":"170 / 178","unit":null,"n":178,"split":"heldout","note":"30 trials' posted results as CSR tables, template narrative"},{"name":"False flags per 100 numbers on clean reports","value":"0 (0 / 899)","unit":null,"n":899,"split":"test","note":null},{"name":"Traced numbers citing the gold cell","value":"99.1%","unit":null,"n":884,"split":"test","note":null},{"name":"Time per 100 pages","value":"129 s (JSON); 300 s (PDF); 493 s (scan)","unit":null,"n":null,"split":"test","note":null}],"dataset":"Synthetic CSRs of fictional phase 3 trials (sections 10-12, 11 tables each, an earlier data cut): dev seeds 1-4, held-out seeds 101-112 with a template narrative and again rewritten by Qwen3.8; 30 ClinicalTrials.gov trials' posted results laid out as CSR tables with a template narrative. Each report scored clean and with 8 planted errors.","held_out":true,"caveats":["Same author wrote the synthetic reports, the planter and the prompts; real CSRs are longer and messier.","The ClinicalTrials.gov narratives come from templates, not from a sponsor's CSR.","No real CSR and no comparison with a QC reviewer's findings.","Misses are mostly the other arm's value when nothing else in the sentence breaks (3 of 24 held out). Numbers inside real arm names (for example 'Chondroitin 4&6') cause most false flags on the ClinicalTrials.gov set."],"date":"2026-09-27","doc_url":"https://decosa.ai/metrics/evals/csr-number-verifier"},"stack":{"summary":"For medical writing and regulatory operations teams at sponsors and CROs, and QC contractors who do the independent number check. Give it a clinical study report: the narrative of sections 10 to 12 with its in-text tables and TLFs, as text and table rows or as a PDF (born-digital or scanned, read by the document reader block). Code finds every number in the narrative and sets aside context (table references, doses, visit weeks, the 95% of a CI). For each paragraph, the evidence retrieval block picks the tables it most likely reports, after any it names, and Qwen3.8-27B points each number at the cell the sentence claims to report: the right arm, row and timepoint. Code then compares the value at the printed decimals, recomputes percentages, differences, totals and relative reductions, and names the likely slip for a mismatch: the other arm's value, a value from an earlier data cut, transposed digits, rounding, a percentage on the wrong denominator. In-text tables are compared with their source TLF cell by cell. You get a QC report and a signed record of every number's cell and verdict. A medical-writing QC aid: the medical writer and the QC reviewer decide.","tagline":"Every number in a clinical study report traced to the table cell it reports, checked in code, with the slips flagged.","deployment":"self-host-first","regulatory_note":"No regulation requires this check; it supports the manual number QC that sponsors and CROs already run on clinical study reports. Written 27 Sep 2026. ICH E3 (Structure and Content of Clinical Study Reports) defines the CSR's sections, including the efficacy (11) and safety (12) evaluations and the tables that support them (not re-read for this note). The FDA's draft guidance 'Considerations for the Use of Artificial Intelligence to Support Regulatory Decision-Making for Drug and Biological Products' (January 2025; https://www.fda.gov/regulatory-information/search-fda-guidance-documents/considerations-use-artificial-intelligence-support-regulatory-decision-making-drug-and-biological) is still a draft and is about AI used to produce information supporting regulatory decisions; a QC aid that only flags numbers for a person to check is not that, but a sponsor's own quality system decides how to qualify any tool it uses. The EMA reflection paper on the use of AI in the medicinal product lifecycle (adopted 30 Sep 2024; https://www.ema.europa.eu/en/use-artificial-intelligence-ai-medicinal-product-lifecycle-scientific-guideline) asks sponsors to take a risk-based approach and keep a human accountable. This tool is not a validated (GxP) system and not a regulatory submission tool: the medical writer and the QC reviewer decide what to change, and the TLFs remain the biostatistician's responsibility. Dates and scope from the Decosa wiki's sourced notes (page 33, S35 and S36, checked 26 Sep 2026); read the documents before relying on this.","components":[{"id":"verifier","role":"Finds the numbers, keeps the tables as typed cells, compares and recomputes in code, names the likely slip, checks in-text tables against their TLF, writes the QC report and the signed record (no model; CPU)","name":"decosa-api CSR verifier (decosa_api/verticals/csr), importing the document reader, the evidence retrieval block and the numeric-grounding block's rounding helpers","hf_repo":null,"license":"AGPL-3.0-or-later","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"Python 3.12; Decimal arithmetic at the printed decimals (half-up, no truncation); CSR cell shapes (n (%), mean (SD), estimate (CI), p-values with their bound); decosa.record.v1 hash chain","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["lite","standard"],"alternative_to":null},{"id":"model","role":"One call per paragraph: which cell each number claims to report (by arm, row and timepoint), or which cells a derived number is computed from; a second look for numbers left unplaced; a second reading (values hidden) between two neighbouring cells","name":"Qwen3.8-27B (NVFP4)","hf_repo":"nvidia/Qwen3.8-27B-NVFP4","license":"Apache-2.0","params":"27.8B","quant":"NVFP4 (MLP NVFP4, GDN/attention FP8) + FP8 KV cache; MTP head, 3 draft tokens","vram_gb":20,"memory_gb_estimate":null,"engine":"vLLM 0.29.0, temperature 0, thinking off, JSON answers","receipt_coverage":"strong","in_hosted_demo":true,"tiers":["lite","standard"],"alternative_to":null},{"id":"retrieval","role":"Finds the tables a paragraph most likely reports in a long report (after the tables it names), with a signed receipt per search","name":"Evidence retrieval block: Qwen3-Embedding-0.6B + Qwen3-Reranker-4B (decosa-retrieval service)","hf_repo":"Qwen/Qwen3-Reranker-4B","license":"Apache-2.0","params":"0.6B + 4B","quant":"BF16","vram_gb":9,"memory_gb_estimate":null,"engine":"services/retrieval (transformers, one process, loaded once); decosa_api.retrieval in the API; used when a report has more than four tables","receipt_coverage":"partial","in_hosted_demo":true,"tiers":["standard"],"alternative_to":null},{"id":"reader","role":"PDFs and scans: finds and orders the regions of each page (Docling Heron layout) and reads tables as cells with spans (PaddleOCR-VL-1.6); born-digital text comes from the PDF's text layer","name":"Document reader block: Docling 2.130 (Heron layout) + PaddleOCR-VL-1.6 (0.9B)","hf_repo":"PaddlePaddle/PaddleOCR-VL-1.6","license":"Apache-2.0 (PaddleOCR-VL-1.6 weights, Heron layout weights); MIT (Docling)","params":"0.9B","quant":"BF16","vram_gb":6,"memory_gb_estimate":null,"engine":"services/docreader (Docling on CUDA) with the parser on vLLM 0.29.0; decosa_api.docreader in the API","receipt_coverage":"partial","in_hosted_demo":true,"tiers":["standard"],"alternative_to":null},{"id":"number-checker","role":"Optional tier for numbers the pointer leaves untraced: a small encoder trained on planted number errors reads the sentence against the table","name":"Number-consistency checker (decosa_api.checkers.numbers, on a pre-release build)","hf_repo":null,"license":"AGPL-3.0-or-later (decosa-api code); the model is Decosa's own, trained on licence-clean planted data","params":null,"quant":"ONNX, CPU","vram_gb":0,"memory_gb_estimate":null,"engine":"ONNX Runtime on CPU, in process; switched on with DECOSA_CSR_NUMBER_TIER=1","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["alternates"],"alternative_to":null}],"tiers":[{"id":"lite","label":"Lite · text and rows, keyword search","summary":"Send the narrative as text and the tables as rows (exported from the TLF outputs), and run with DECOSA_CSR_RETRIEVAL=bm25: no retrieval service and no document reader, so only the language model needs a GPU. Same pointer, checks and record.","components":["verifier","model"],"hardware":"1x GPU for Qwen3.8-27B","quality_evidence":[{"metric":"Planted number errors caught, held-out synthetic CSRs, keyword search","value":"93 / 96 (96.9%), 1 false flag in 899 clean numbers","source":"decosa-api docs/evals/csr-number-verifier.md, test split, BM25 ablation"}],"latency_note":"measured: about a minute per hundred pages on the held-out synthetic set (BM25 only, shared gateway)","in_hosted_demo":false,"receipt_coverage":"strong","receipt_note":"Every model call is receipted; searches are BM25 in code, so there are no embed or rerank attestations.","hosting":null},{"id":"standard","label":"Standard · retrieval + document reader + the model (hosted demo)","summary":"The retrieval block picks the tables per paragraph, the document reader reads PDFs and scans, Qwen3.8-27B points each number at its cell and code checks everything. This is what the hosted demo runs, on invented or public reports only.","components":["verifier","model","retrieval","reader"],"hardware":"1x RTX PRO 6000 96 GB (measured on shared cards)","quality_evidence":[{"metric":"Planted number errors caught, held-out synthetic CSRs (template narrative)","value":"92 / 96 (95.8%)","source":"decosa-api docs/evals/csr-number-verifier.md, test split"},{"metric":"Planted number errors caught, held-out synthetic CSRs rewritten by a second writer (Qwen paraphrase, numbers kept)","value":"93 / 96 (96.9%)","source":"decosa-api docs/evals/csr-number-verifier.md, test-para split"},{"metric":"Planted number errors caught, 30 ClinicalTrials.gov trials laid out as CSR tables","value":"170 / 178 (95.5%)","source":"decosa-api docs/evals/csr-number-verifier.md, ctgov split"},{"metric":"False flags on clean reports (per 100 numbers checked)","value":"0 per 100 (0 / 899) on held-out synthetic; 0.11 (1 / 899) rewritten; 2.04 (19 / 931) on ClinicalTrials.gov tables","source":"decosa-api docs/evals/csr-number-verifier.md"},{"metric":"Traced numbers citing the right cell","value":"99.1% (884 numbers, held-out synthetic); 98.2% (901, ClinicalTrials.gov)","source":"decosa-api docs/evals/csr-number-verifier.md"},{"metric":"Time per 100 pages","value":"129 s from JSON; 300 s from a born-digital PDF, 493 s from a scan (reading included), shared gateway","source":"decosa-api docs/evals/csr-number-verifier.md"}],"latency_note":"measured: a couple of minutes per hundred pages from JSON on the shared gateway (longer under heavier load); under a minute for the sample and its scan; seconds for the smoke check","in_hosted_demo":true,"receipt_coverage":"strong","receipt_note":"Every Qwen3.8 call is a separate gateway call with a gateway-signed receipt; every search has a signed search receipt; the PDF read has a signed document receipt; the record lists them all.","hosting":null}],"alternates":[{"id":"number-checker","label":"Number-consistency checker tier (CPU)","components":["number-checker"],"hardware":"CPU, in process","use":"For numbers the pointer leaves untraced: a small encoder trained on planted number errors reads the sentence against the table; it can mark a number supported but never overrules a code mismatch. The hook is built; the checker is on an unmerged branch and not measured with this tool.","status":"not built"}],"services":[{"name":"decosa-api","port":8445,"image":"${DECOSA_REGISTRY}/decosa-api:<tag>","purpose":"GET /csr/info, /csr/samples; POST /csr/verify (SSE or JSON); POST /record/verify. Keeps no report text."},{"name":"decosa-retrieval","port":8499,"image":"built from services/retrieval (no published image yet)","purpose":"Embedder and reranker for the evidence retrieval block, on the same GPU box."},{"name":"decosa-docreader","port":8497,"image":"built from services/docreader (no published image yet), with PaddleOCR-VL-1.6 on vLLM","purpose":"Reads PDFs and scans into paragraphs and table cells with page and box."},{"name":"vLLM (model)","port":8114,"image":"vllm/vllm-openai@sha256:c2914767605584b6d8f45686b82de173ecc99e781897aa3d0a66dacd72c51ae1","purpose":"Qwen3.8-27B NVFP4 behind our gateway (hosted) or called directly (self-host)."}],"tools":[{"name":"ClinicalTrials.gov results (API v2)","url":"https://clinicaltrials.gov/data-api/about-api","license":"ClinicalTrials.gov terms (updated 31 Jan 2023): attribute ClinicalTrials.gov, show the processing date, state modifications","purpose":"Eval only: 30 completed phase 3 trials' posted results laid out as CSR tables (percentages computed from the posted counts), with a template narrative; data retrieved 27 Sep 2026."},{"name":"Synthetic CSRs of fictional trials","url":null,"license":"AGPL-3.0-or-later (decosa-api, decosa_api/verticals/csr/synth.py)","purpose":"The samples and the dev and test sets: invented drugs, sponsors and numbers, with an earlier data cut and six kinds of planted number error."},{"name":"EMA clinical data publication (Policy 0070)","url":"https://clinicaldata.ema.europa.eu/about/term-of-use","license":"Terms of use allow general information and non-commercial research only (EMA/144064/2019, Annex 1 and 2)","purpose":"Not used: published CSRs there may not be used commercially, so they are not in the demo or the eval."}],"hardware":[{"tier":"1x RTX PRO 6000 Blackwell 96 GB","fits":true,"notes":"Measured on our server: the eval and the hosted demo ran Qwen3.8-27B through the shared gateway, with the retrieval service (about 10 GB) and the document reader (about 6 GB) on another GPU."},{"tier":"1x RTX 5090 32 GB","fits":false,"notes":"Estimate: Qwen3.8-27B NVFP4 (about 20 GB with a small KV cache) plus the reranker and reader is too tight; run the lite tier (text and rows, keyword search) or put the retrieval and reader services on a second card."},{"tier":"CPU only","fits":false,"notes":"The model needs a GPU. The comparisons, report and record run on CPU."}],"latency":[{"lane":"the seeded 12-page sample as text and rows (78 numbers, 11 tables), hosted gateway route","typical_ms":25000,"source":"measured on our server 2026-09-27 (pre-release server, gateway shared with other workloads): 25.0 s seeded, 27.1 s clean; console run from the browser 36 s"},{"lane":"the same report as a 12-page scanned PDF (read from pixels, then checked)","typical_ms":57600,"source":"measured on our server 2026-09-27 (pre-release server): 57.6 s including the document reader"}],"benchmark":null,"notes":["Every comparison and recomputation is code: the model only says which cell a sentence speaks of. A wrong number it points at a cell that does not hold it is flagged; one it points at a cell that happens to hold it (usually the other arm's) passes, which is where most misses come from.","Held out: 93 of 96 planted errors caught with no false flags in 899 clean numbers (synthetic), 93 of 96 after a second writer rewrote the prose, 170 of 178 on ClinicalTrials.gov tables (2 false flags per 100 numbers); the right cell cited 98-99% of the time; 129 s per 100 pages from JSON, 300-493 s from PDF or scan.","A QC aid: it does not validate the TLFs, read figures or listings, or judge interpretation; an unflagged number is not proven right, and the medical writer and QC reviewer decide."]},"buyer_facts":[{"label":"Data retention","value":"Nothing stored: the report lives in memory for the request. The signed record holds each number's status, cell and expected value, table hashes and receipt ids, never the report text; logs carry counts and timings only."},{"label":"What leaves the box","value":"Self-hosted on the direct route: nothing. The model, the retrieval service, the document reader and the checks run on the same machine. Hosted: model calls go through the Decosa API, and only invented or public reports are accepted."},{"label":"What it checks","value":"Every number in the narrative (counts, Ns, percentages, means, differences, CIs, hazard ratios, p-values) against the cell it reports, derived numbers recomputed, in-text tables against their source TLF, and the likely slip for each mismatch."},{"label":"What it is not","value":"A validated (GxP) system or a regulatory submission tool. It does not check the TLFs themselves, figures, listings or interpretation. The medical writer and the QC reviewer decide."}],"data_handling":{"page":"/data#csr-number-verifier","self_host":{"level":"confidential","leaves":"nothing","summary":"Runs on your machine; nothing is sent to Decosa or a third party by default."},"hosted":{"level":"operator-processed","demo_only":true,"summary":"Hosted demo on sample or public data only; self-host for real data.","gpus":"operator-contracted","third_parties":[],"retention":"Nothing stored: the report lives in memory for the request. The signed record holds each number's status, cell and expected value, table hashes and receipt ids, never the report text; logs carry counts and timings only.","used_for_training":false,"encrypted_while_processed":false},"sealed_tier":{"applies":false,"note":"The sealed tier (raw chat only, never use-case pipelines) is paused at launch (/docs/sealed-tier)."},"external_calls":[]},"console":{"href":"/tools/life-sciences/csr-number-verifier","input":"csr","lanes":[{"id":"numbers","title":"Numbers","kind":"list"},{"id":"flags","title":"Flags","kind":"list"},{"id":"tables","title":"In-text tables","kind":"list"},{"id":"record","title":"QC report and signed record","kind":"json"}],"samples":[{"n":1,"id":"zenavotide-301","title":"A fictional zenavotide phase 3 report with planted errors (sections 10 to 12, 11 tables)","deep_link":"/tools/life-sciences/csr-number-verifier?sample=1&autorun=0"},{"n":2,"id":"zenavotide-301-clean","title":"The same fictional report with no errors","deep_link":"/tools/life-sciences/csr-number-verifier?sample=2&autorun=0"},{"n":3,"id":"zenavotide-301-pdf","title":"The report with planted errors, as a PDF made from the text","deep_link":"/tools/life-sciences/csr-number-verifier?sample=3&autorun=0"},{"n":4,"id":"zenavotide-301-scan","title":"The report with planted errors, as a 12-page scan","deep_link":"/tools/life-sciences/csr-number-verifier?sample=4&autorun=0"}],"deep_link_params":{"sample":"1-based index into samples, or a sample id","autorun":"1 = start the run once the sample is loaded; 0 (default) = only preselect","reduce-motion":"1 = turn off animations"}},"api":{"base":"https://api.decosa.ai","contract":"/api/contract.json","contract_markdown":"/api/contract.md","reference":"/docs/api","keys":"/account/keys"},"prompts":{"hosted":"/prompts/csr-number-verifier-hosted.md","selfhost":"/prompts/csr-number-verifier-selfhost.md","assemble":"/prompts/csr-number-verifier-assemble.md","mac":null},"rehearsal":{"bundle":"/samples/csr-number-verifier.zip","bundle_url":"https://decosa.ai/samples/csr-number-verifier.zip","folder":"/samples/csr-number-verifier/","expected":"/samples/csr-number-verifier/expected.json","files":["/samples/csr-number-verifier/expected.json","/samples/csr-number-verifier/inputs/clean-report.json","/samples/csr-number-verifier/inputs/report.json","/samples/csr-number-verifier/inputs/report.pdf"],"bytes":14976,"checks":["the transposed mean age (75.5 for 57.5) is flagged","the rounding slip in disposition (71.8% for 71.9%) is flagged","the wrong N in the analysis sets (313 for 317) is flagged","the percentage left over from the interim cut (53.5% for 58.3%) is flagged","the percentage on the wrong denominator (2.2% for 3.7%) is flagged","the other-arm count in 11.4.3 is caught: its percentage no longer computes","the stale cell in in-text Table 11-1 is found against its source TLF 14.2.1","at least 70 numbers are checked","the report says who decides","the signed record verifies","the record fails once its flag count is changed","the clean report comes back with at most one flag","the PDF is read into at least ten of its eleven tables","reading the PDF, at least four of the seeded numbers are flagged","every model call has a signed receipt (the document reader’s own receipt, dr-..., is a different format and is checked by the reader)"],"licence":"Synthetic: the drug, sponsor, trial and every number are invented (decosa_api/verticals/csr/synth.py, seed 72; scripts/csr_samples.py). Part of decosa-api, AGPL-3.0-or-later.","about":"ZEN-395, an invented phase 3 psoriasis trial of an invented drug (zenavotide) with placebo and two doses: sections 10-12 of the narrative and eleven tables (nine TLFs, two in-text tables), plus the same TLFs at an earlier (interim) data cut. Seeded: transposed digits (75.5 for 57.5), a last-digit rounding slip (71.8% for 71.9%), a wrong N (313 for 317), a percentage on the wrong denominator (2.2% for 3.7%), the other arm’s count (72 for 14) and a percentage left over from the interim cut (53.5% for 58.3%), and one stale cell in in-text Table 11-1. The run must flag each seeded number (the other-arm count through its percentage, which then does not compute), keep the clean report clean, sign a record that verifies and fails when changed, and read the same report from a PDF.","run":{"containers":"docker compose exec api python scripts/rehearse.py csr-number-verifier","checkout":"python scripts/rehearse.py csr-number-verifier --bundle csr-number-verifier.zip --base-url http://127.0.0.1:8445","mac":".venv/bin/python scripts/rehearse.py csr-number-verifier"},"guidance":"Set up with a coding agent (we recommend Claude Code with Claude Opus 5.5; any capable coding agent works) on mock data only, run the rehearsal until every check passes, then run your own data locally yourself. Never give the agent real data during setup."},"hardware_fit":{"check":"/self-host/hardware?use=csr-number-verifier","data":"/api/hardware.json","tiers":[{"id":"lite","gpu_gb":57.6,"basis":"stack","unknown":[]},{"id":"standard","gpu_gb":72.6,"basis":"stack","unknown":[]},{"id":"alternate-number-checker","gpu_gb":0,"basis":null,"unknown":[]}],"mac":null},"links":{"page":"/tools/life-sciences/csr-number-verifier","json":"/use-cases/csr-number-verifier.json","metrics":"/metrics/csr-number-verifier","console":"/tools/life-sciences/csr-number-verifier","console_sample":"/tools/life-sciences/csr-number-verifier?sample=1&autorun=0","stack":"/tools/life-sciences/csr-number-verifier#stack","try_live":"/tools/life-sciences/csr-number-verifier","watch":"/tools/life-sciences/csr-number-verifier","build":"/tools/life-sciences/csr-number-verifier#build","self_host":"/tools/life-sciences/csr-number-verifier#self-host","prompts":{"hosted":"/prompts/csr-number-verifier-hosted.md","selfhost":"/prompts/csr-number-verifier-selfhost.md","assemble":"/prompts/csr-number-verifier-assemble.md","mac":null}}}