{
  "slug": "langgraph",
  "status": "passed",
  "checkedAt": "2026-10-02T04:19:11.786Z",
  "label": "LangGraph local control-flow verification",
  "scope": "@langchain/langgraph 1.4.18: deterministic JavaScript graph, synthetic state, in-memory checkpoints, no LLM provider and no external action.",
  "conclusion": "Rejected inputs produced no output; approved inputs produced one output; an approval interrupt resumed correctly; a transient pre-output failure retried without an extra state update.",
  "artifact": "/evidence/langgraph-control-flow.json",
  "package": {
    "name": "@langchain/langgraph",
    "version": "1.4.18"
  },
  "runtime": "v22.22.3",
  "networkAttempts": 0,
  "checks": [
    {
      "case": "Rejected input",
      "input": {
        "input": "SYNTHETIC-REJECT",
        "approved": false,
        "requireReview": false,
        "retryOnce": false,
        "outputs": 0,
        "trace": []
      },
      "passConditions": [
        "Reject branch selected",
        "No output update"
      ],
      "observed": {
        "outputs": 0,
        "trace": [
          "draft",
          "approval",
          "reject"
        ]
      },
      "status": "passed"
    },
    {
      "case": "Approved input",
      "input": {
        "input": "SYNTHETIC-APPROVE",
        "approved": true,
        "requireReview": false,
        "retryOnce": false,
        "outputs": 0,
        "trace": []
      },
      "passConditions": [
        "Output branch selected",
        "Exactly one output update"
      ],
      "observed": {
        "outputs": 1,
        "trace": [
          "draft",
          "approval",
          "output"
        ]
      },
      "status": "passed"
    },
    {
      "case": "Human-review interrupt and resume",
      "input": {
        "input": "SYNTHETIC-PAUSE",
        "approved": false,
        "requireReview": true,
        "retryOnce": false,
        "outputs": 0,
        "trace": []
      },
      "passConditions": [
        "No output while paused",
        "Approval node checkpoint retained",
        "Resume creates exactly one output",
        "Inspecting completed run does not repeat output"
      ],
      "observed": {
        "pausedOutputs": 0,
        "checkpointNext": [
          "approval"
        ],
        "resumedOutputs": 1,
        "completedOutputs": 1,
        "outputAttempts": 1,
        "trace": [
          "draft",
          "approval",
          "output"
        ]
      },
      "status": "passed"
    },
    {
      "case": "Transient failure before output update",
      "input": {
        "input": "SYNTHETIC-RETRY",
        "approved": true,
        "requireReview": false,
        "retryOnce": true,
        "outputs": 0,
        "trace": []
      },
      "passConditions": [
        "One failed attempt is retried",
        "State receives one successful output update"
      ],
      "observed": {
        "outputs": 1,
        "outputAttempts": 2,
        "trace": [
          "draft",
          "approval",
          "output"
        ]
      },
      "status": "passed"
    }
  ],
  "limits": [
    "No language model or vendor account was used.",
    "The retry failed before its state update; this does not establish idempotency for external side effects.",
    "An in-memory checkpointer does not establish persistence after process termination.",
    "No production scalability, latency, security audit or professional efficacy was assessed."
  ],
  "reproduce": [
    "npm install --prefix outputs/product-tests/langgraph --no-audit --no-fund @langchain/langgraph@1.4.18",
    "node outputs/product-tests/langgraph/check-langgraph.mjs"
  ]
}
