Auditable research automation
Move from a scientific question to a reviewable analysis contract. This release links deterministic drafting, qualification gates, model-run lineage, receipt closure and review artifacts while preserving the current evidence ceiling.
Execution boundary Draft → review → run The drafting endpoint never reads target outcomes, launches computation or upgrades a scientific claim.
01 Controlled task drafting Turn a research question into an explicit draft contract. Missing dose, time, unit and split fields stay unresolved until a researcher confirms them.
02 Anomaly and leakage gate Check public-field leakage, dataset/task qualification, model provenance and claim ceilings before a workflow can be promoted.
03 Model-run lineage and diff Trace every registered run to its comparison baseline and inspect changes in context, split, decision state and evidence ceiling.
04 Reproducible analysis kit Use the zero-dependency Python client and five clean notebooks for discovery, contracts, baseline review, qualification and report reproduction.
05 Idempotent execution plan Compile a reviewed draft into a six-stage dependency graph with stable task hashes, retry limits, cancellation rules and required receipts.
06 Receipt verification Validate task identity, provenance hashes, attempt limits, terminal state and timestamp order without uploading scientific result payloads.
07 Run closure Verify plan identity, retained retries, dependency order and six-task completion without inspecting the scientific outputs behind their hashes.
08 Run evidence bundle Bind ModelRun identifiers, run closure and report artifacts into one content-addressed review package while keeping result values and private paths outside the validator.
Natural-language interface
Create a bounded TaskContract draft Review every unresolved field before using the contract in a registered analysis.
Execution contract
Make every transition reviewable before a worker starts. Stable identity The TaskContract, runner profile and plan schema produce one content-derived idempotency key.
Dependency gate Qualification precedes baseline and candidate runs; matched comparison waits for both.
Retained outcomes Retries keep the same inputs. Scientific changes create a new plan, while failures and cancellations remain visible.
No silent launch The public endpoint compiles a plan and never creates a queue item or reserves compute capacity.
Receipt verification
Verify provenance structure without exposing result payloads. The validator accepts one bounded receipt, rejects unknown or private fields and never stores the submitted object.
Execution receipt JSON {
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J02-QUALIFY",
"attempt": 1,
"input_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"code_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
"environment_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
"started_at_utc": "2026-09-11T00:00:00Z",
"completed_at_utc": "2026-09-11T00:01:00Z",
"terminal_state": "PASS",
"output_sha256": "3333333333333333333333333333333333333333333333333333333333333333"
} Run closure
Prove that the dependency graph closed without hiding failed attempts. The validator binds receipts to one plan identity, preserves identical retries and reports the next eligible, blocked or completed tasks.
Execution receipt-set JSON {
"receipt_set_schema": "nmd-vcell-execution-receipt-set/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"execution_plan_sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"receipts": [
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J01-CONTRACT",
"attempt": 1,
"input_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:00:00Z",
"completed_at_utc": "2026-09-11T00:01:00Z",
"terminal_state": "PASS",
"output_sha256": "9999999999999999999999999999999999999999999999999999999999999999"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J02-QUALIFY",
"attempt": 1,
"input_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:02:00Z",
"completed_at_utc": "2026-09-11T00:03:00Z",
"terminal_state": "PASS",
"output_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J03-BASELINE",
"attempt": 1,
"input_sha256": "3333333333333333333333333333333333333333333333333333333333333333",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:04:00Z",
"completed_at_utc": "2026-09-11T00:05:00Z",
"terminal_state": "PASS",
"output_sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J04-CANDIDATE",
"attempt": 1,
"input_sha256": "4444444444444444444444444444444444444444444444444444444444444444",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:04:00Z",
"completed_at_utc": "2026-09-11T00:06:00Z",
"terminal_state": "PASS",
"output_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J05-COMPARE",
"attempt": 1,
"input_sha256": "5555555555555555555555555555555555555555555555555555555555555555",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:07:00Z",
"completed_at_utc": "2026-09-11T00:08:00Z",
"terminal_state": "PASS",
"output_sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J06-REPORT",
"attempt": 1,
"input_sha256": "6666666666666666666666666666666666666666666666666666666666666666",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:09:00Z",
"completed_at_utc": "2026-09-11T00:10:00Z",
"terminal_state": "PASS",
"output_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
}
]
} Review package
Bind run closure to a hash-only evidence manifest. A complete run becomes review-ready only when its bounded report matches the passing J06 output hash and a manifest artifact is retained.
Run evidence bundle JSON {
"evidence_bundle_schema": "nmd-vcell-run-evidence-bundle/1.0",
"receipt_set": {
"receipt_set_schema": "nmd-vcell-execution-receipt-set/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"execution_plan_sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"receipts": [
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J01-CONTRACT",
"attempt": 1,
"input_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:00:00Z",
"completed_at_utc": "2026-09-11T00:01:00Z",
"terminal_state": "PASS",
"output_sha256": "9999999999999999999999999999999999999999999999999999999999999999"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J02-QUALIFY",
"attempt": 1,
"input_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:02:00Z",
"completed_at_utc": "2026-09-11T00:03:00Z",
"terminal_state": "PASS",
"output_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J03-BASELINE",
"attempt": 1,
"input_sha256": "3333333333333333333333333333333333333333333333333333333333333333",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:04:00Z",
"completed_at_utc": "2026-09-11T00:05:00Z",
"terminal_state": "PASS",
"output_sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J04-CANDIDATE",
"attempt": 1,
"input_sha256": "4444444444444444444444444444444444444444444444444444444444444444",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:04:00Z",
"completed_at_utc": "2026-09-11T00:06:00Z",
"terminal_state": "PASS",
"output_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J05-COMPARE",
"attempt": 1,
"input_sha256": "5555555555555555555555555555555555555555555555555555555555555555",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:07:00Z",
"completed_at_utc": "2026-09-11T00:08:00Z",
"terminal_state": "PASS",
"output_sha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
},
{
"receipt_schema": "nmd-vcell-execution-receipt/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"task_id": "J06-REPORT",
"attempt": 1,
"input_sha256": "6666666666666666666666666666666666666666666666666666666666666666",
"code_sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"environment_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"started_at_utc": "2026-09-11T00:09:00Z",
"completed_at_utc": "2026-09-11T00:10:00Z",
"terminal_state": "PASS",
"output_sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
}
]
},
"report_manifest": {
"report_manifest_schema": "nmd-vcell-run-report-manifest/1.0",
"execution_plan_id": "JPD-0123456789ABCDEF",
"receipt_set_identity": "JRS-0CE118EF63E6B5A4",
"run_status": "RUN_COMPLETE_PASS",
"model_run_ids": [
"MR-DMD-EXAMPLE-001"
],
"artifacts": [
{
"artifact_id": "bounded-report",
"role": "BOUNDED_REPORT",
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"media_type": "application/pdf",
"release_state": "INTERNAL_REVIEW"
},
{
"artifact_id": "evidence-manifest",
"role": "MANIFEST",
"sha256": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"media_type": "application/json",
"release_state": "REVIEW_SAFE_PUBLIC"
}
],
"claim_ceiling": "BOUNDED_COMPUTATIONAL_REPORT_ONLY",
"created_at_utc": "2026-09-11T00:11:00Z"
}
} Portable workflow
One kit, governed entry points Python SDK Query versioned public objects with Python standard-library networking and explicit error handling.
Download SDK source Five clean notebooks Start from public objects, retain denominators and write reports without embedded private paths or outputs.
Inspect file identities Machine-readable gates Consume the current anomaly gate, lineage registry and run-diff registry from stable JSON endpoints.
Open the gate result