{
  "version": 1,
  "language": "en",
  "title": "Check an experiment before you keep its result",
  "description": "A constructed experiment checks its protocol and results. A failed check can send its trace into revision if attempts are available. Exhaustion stops the search. These checks alone cannot prove a scientific claim.",
  "caption": "This constructed experiment includes protocol and result checks before candidate retention. Revision is permitted after a failed check if budget is available. Budget exhaustion stops the trace. The checks can pass, but that alone cannot prove a scientific claim. Author-created explanatory diagram. Playback time is not experiment duration.",
  "alt": "Constructed research flow: protocol and result checks occur before candidate retention. Revision uses the available budget, or the trace stops.",
  "targets": {
    "question": {
      "id": "flow-question",
      "kind": "node",
      "label": "Question"
    },
    "generate": {
      "id": "flow-generate",
      "kind": "node",
      "label": "Run experiment"
    },
    "validate": {
      "id": "flow-validate",
      "kind": "node",
      "label": "Check evidence"
    },
    "output": {
      "id": "flow-output",
      "kind": "node",
      "label": "Keep result"
    },
    "feedback": {
      "id": "flow-feedback",
      "kind": "node",
      "label": "Change candidate"
    },
    "failure": {
      "id": "flow-failure",
      "kind": "node",
      "label": "Stop search"
    },
    "budget": {
      "id": "flow-budget",
      "kind": "node",
      "label": "Retry budget"
    },
    "input": {
      "id": "flow-input",
      "kind": "edge",
      "label": "supply protocol"
    },
    "candidate": {
      "id": "flow-candidate",
      "kind": "edge",
      "label": "return artifact"
    },
    "pass": {
      "id": "flow-pass",
      "kind": "edge",
      "label": "keep if checked"
    },
    "fail": {
      "id": "flow-fail",
      "kind": "edge",
      "label": "inspect failure"
    },
    "retry": {
      "id": "flow-retry",
      "kind": "edge",
      "label": "retry if permitted"
    },
    "exhausted": {
      "id": "flow-exhausted",
      "kind": "edge",
      "label": "stop search"
    },
    "return": {
      "id": "flow-return",
      "kind": "edge",
      "label": "revise with trace"
    }
  },
  "stateLabels": {
    "attempt": "Experiment attempt",
    "remaining": "Remaining attempts",
    "candidate": "Executed candidate",
    "feedback": "Trace / revision",
    "result": "Evidence status"
  },
  "scenarios": [
    {
      "id": "retry-success",
      "title": "Revise, rerun, pass the checks",
      "description": "This example has two constructed attempts. The first fails a protocol check, and the changed artifact passes. This example gives no success guarantee.",
      "initial": {
        "attempt": "0",
        "remaining": "2",
        "candidate": "No candidate executed",
        "feedback": "There is no failure trace before the first attempt.",
        "result": "Ready with no kept result"
      },
      "unselected": [
        "failure",
        "exhausted"
      ],
      "steps": [
        {
          "title": "Execute the first candidate",
          "description": "The research objective and evaluation protocol are fixed. This example execution uses one attempt. A language-model proposal alone is not the experimental artifact from that execution.",
          "duration": 3000,
          "active": [
            "question",
            "generate"
          ],
          "paths": [
            "input"
          ],
          "state": {
            "attempt": "1",
            "remaining": "1",
            "candidate": "Candidate 1: executed",
            "feedback": "No previous trace",
            "result": "Evidence checks next"
          }
        },
        {
          "title": "Inspect the experimental artifact",
          "description": "In this example, a protocol check fails. This is a constructed intervention. It is not a reported incident in a named research system.",
          "duration": 3000,
          "active": [
            "validate"
          ],
          "paths": [
            "candidate"
          ],
          "state": {
            "attempt": "1",
            "remaining": "1",
            "candidate": "Candidate 1: check failed",
            "feedback": "Protocol mismatch recorded",
            "result": "No validated result"
          }
        },
        {
          "title": "Examine the remaining attempt budget",
          "description": "Only the failure branch reads the retry budget. Validation does not generate another candidate.",
          "duration": 3000,
          "active": [
            "budget"
          ],
          "paths": [
            "fail"
          ],
          "state": {
            "attempt": "1",
            "remaining": "1",
            "candidate": "Candidate 1: check failed",
            "feedback": "Protocol mismatch recorded",
            "result": "Retry permitted"
          }
        },
        {
          "title": "Use the failure trace",
          "description": "The question and evaluation constraints stay fixed. The system uses the trace to change the candidate. A system that keeps a better score without a protocol check would skip this boundary.",
          "duration": 3000,
          "active": [
            "feedback"
          ],
          "paths": [
            "retry"
          ],
          "state": {
            "attempt": "1",
            "remaining": "1",
            "candidate": "Candidate 1: rejected",
            "feedback": "Trace + revised candidate specification",
            "result": "Ready for another execution"
          }
        },
        {
          "title": "Execute the changed candidate",
          "description": "The changed experiment uses the second attempt and returns a new artifact. The example does not show an automatic policy-weight update.",
          "duration": 3000,
          "active": [
            "generate"
          ],
          "paths": [
            "return"
          ],
          "state": {
            "attempt": "2",
            "remaining": "0",
            "candidate": "Candidate 2: executed",
            "feedback": "First trace used for revision",
            "result": "Evidence checks next"
          }
        },
        {
          "title": "Check the new evidence",
          "description": "In this example, the artifact passes the declared checks. Independent replication and scientific interpretation are separate requirements.",
          "duration": 3000,
          "active": [
            "validate"
          ],
          "paths": [
            "candidate"
          ],
          "state": {
            "attempt": "2",
            "remaining": "0",
            "candidate": "Candidate 2: checks pass",
            "feedback": "Revision documented",
            "result": "Retention of this scoped result is permitted."
          }
        },
        {
          "title": "Keep the checked artifact",
          "description": "Another attempt is not necessary for the pass branch. These checks can pass, but that alone does not prove the research hypothesis or guarantee transfer.",
          "duration": 3000,
          "active": [
            "output"
          ],
          "paths": [
            "pass"
          ],
          "state": {
            "attempt": "2",
            "remaining": "0",
            "candidate": "Candidate 2: kept",
            "feedback": "Trace, protocol and revision kept",
            "result": "Passed declared checks / no general truth claim"
          }
        }
      ]
    },
    {
      "id": "budget-exhausted",
      "title": "Stop after the failed check",
      "description": "This example has one constructed attempt. The check fails, and no budget is available.",
      "initial": {
        "attempt": "0",
        "remaining": "1",
        "candidate": "No candidate executed",
        "feedback": "There is no failure trace before the first attempt.",
        "result": "Ready with no kept result"
      },
      "unselected": [
        "feedback",
        "return",
        "retry",
        "pass",
        "output"
      ],
      "steps": [
        {
          "title": "Execute the first candidate",
          "description": "The research objective and evaluation protocol are fixed. This example execution uses one attempt. A language-model proposal alone is not the experimental artifact from that execution.",
          "duration": 3000,
          "active": [
            "question",
            "generate"
          ],
          "paths": [
            "input"
          ],
          "state": {
            "attempt": "1",
            "remaining": "0",
            "candidate": "Candidate 1: executed",
            "feedback": "No previous trace",
            "result": "Evidence checks next"
          }
        },
        {
          "title": "Inspect the experimental artifact",
          "description": "In this example, a protocol check fails. This is a constructed intervention. It is not a reported incident in a named research system.",
          "duration": 3000,
          "active": [
            "validate"
          ],
          "paths": [
            "candidate"
          ],
          "state": {
            "attempt": "1",
            "remaining": "0",
            "candidate": "Candidate 1: check failed",
            "feedback": "Protocol mismatch recorded",
            "result": "No validated result"
          }
        },
        {
          "title": "Examine the remaining attempt budget",
          "description": "Only the failure branch reads the retry budget. Validation does not generate another candidate.",
          "duration": 3000,
          "active": [
            "budget"
          ],
          "paths": [
            "fail"
          ],
          "state": {
            "attempt": "1",
            "remaining": "0",
            "candidate": "Candidate 1: check failed",
            "feedback": "Protocol mismatch recorded",
            "result": "Attempt budget exhausted"
          }
        },
        {
          "title": "Stop without a validated result",
          "description": "The system does not execute another candidate. It does not use the feedback loop or the kept-result branch. A stop is an explicit outcome, not a fabricated successful experiment.",
          "duration": 3000,
          "active": [
            "failure"
          ],
          "paths": [
            "exhausted"
          ],
          "state": {
            "attempt": "1",
            "remaining": "0",
            "candidate": "Candidate 1: rejected",
            "feedback": "Failure trace kept",
            "result": "Stopped with no validated result"
          }
        }
      ]
    }
  ],
  "sources": [
    {
      "file": "content/blog/2026-04-06_The-Age-of-Auto-Research-and-Other-Certainties/post.md",
      "description": "Question, execution, validation, budget and evidence boundaries from the current article; this illustrative workflow is not attributed to any one reviewed system."
    },
    {
      "file": "/Users/jiwenbo/Documents/GitHub/Blog_Illustration_Skill/examples/animated-flow-2026-10-16/03-validation-feedback/diagram.svg",
      "description": "Skill feedback layout adapted to English research-workflow semantics."
    }
  ],
  "limitations": [
    "These are constructed symbolic states and outcomes. They are not experimental measurements.",
    "The diagram shows no policy update or guaranteed research improvement.",
    "A pass of the selected protocol checks does not establish scientific truth or independent replication.",
    "Playback timing is for explanation, not measured runtime."
  ]
}
