Marsen n8n human approval acceptance lab v1 Tested: 28 September 2026; n8n 2.35.4. Download workflow.json. In a disposable n8n workspace, import the file into a new workflow. Keep it inactive. Choose Execute Workflow. Inspect the final Verify outcomes node: 13 items should have passed: true. The graph is Run lab -> Synthetic cases -> Validate approval -> Simulated CRM -> Verify outcomes. It uses built-in Manual Trigger and Code nodes only. No credentials, webhooks, outbound requests or real CRM writes are needed. Reproduce with Docker (from the directory containing workflow.json): docker run --rm --network none \ -v "$PWD/workflow.json:/lab/workflow.json:ro" \ -e N8N_DIAGNOSTICS_ENABLED=false \ -e N8N_VERSION_NOTIFICATIONS_ENABLED=false \ --entrypoint /bin/sh docker.n8n.io/n8nio/n8n:2.35.4 \ -c 'n8n import:workflow --input=/lab/workflow.json && n8n execute --id=marsenApprovalLabV1 --rawOutput' The command uses a new ephemeral n8n database. It does not mount your live n8n data. The first run may download the image. A successful final output contains status: success and 13 Verify outcomes items with passed: true. The fixture clock is numeric and deterministic: event.at=1000 and proposal.expiresAt=2000. Equality expires. These are test clock values, not measured wait durations. Reviewer strings are mock authorization inputs; they do not authenticate a person. All proposals and receipts exist inside one execution and are discarded. The file is an acceptance lab, not a production approval template. Code-node source copies accompany the import. Production work still requires an authenticated reviewer, durable proposal and receipt storage, atomic decision ownership, a real destination API, monitoring, and tests spanning separate deliveries, concurrent workers and restarts. Never accept a reviewer identity asserted by a public request body. Do not replace the simulated destination with a real writer until those boundaries are implemented. Timeout reconciliation is simulated, not an external API guarantee. A Wait-node timeout waking an execution is not approval. Results: test-results.json. Scenario inputs: scenarios.json.