{
  "schema_version": 1,
  "evidence_type": "executed numerical and synthetic dynamics study",
  "command": "python complete_validation.py",
  "passed": true,
  "checks": [
    {
      "id": "source-current",
      "description": "Executed source matches delivered code",
      "expected": "All source hashes agree",
      "observed": 8,
      "passed": true,
      "method": "SHA-256 of all Python source files and reference inputs."
    },
    {
      "id": "inputs-current",
      "description": "Executed input snapshot is unchanged",
      "expected": "Recorded input SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest of inputs-used.json."
    },
    {
      "id": "csv-candidate-grid.csv",
      "description": "Recorded analysis file is unchanged: candidate-grid.csv",
      "expected": "Recorded file SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest checked before acceptance evaluation."
    },
    {
      "id": "csv-foundation-pulse.csv",
      "description": "Recorded analysis file is unchanged: foundation-pulse.csv",
      "expected": "Recorded file SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest checked before acceptance evaluation."
    },
    {
      "id": "csv-frequency-response.csv",
      "description": "Recorded analysis file is unchanged: frequency-response.csv",
      "expected": "Recorded file SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest checked before acceptance evaluation."
    },
    {
      "id": "csv-runup.csv",
      "description": "Recorded analysis file is unchanged: runup.csv",
      "expected": "Recorded file SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest checked before acceptance evaluation."
    },
    {
      "id": "csv-uncertainty-corners.csv",
      "description": "Recorded analysis file is unchanged: uncertainty-corners.csv",
      "expected": "Recorded file SHA-256 matches",
      "observed": true,
      "passed": true,
      "method": "Digest checked before acceptance evaluation."
    },
    {
      "id": "envelope-static_compression_mm",
      "description": "static compression mm",
      "expected": "<= 8.5",
      "observed": 7.440643124906281,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-operating_reaction_envelope_N",
      "description": "operating reaction envelope N",
      "expected": "<= 18.0",
      "observed": 7.576939635290005,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-operating_sensor_acceleration_m_s2",
      "description": "operating sensor acceleration m s2",
      "expected": "<= 1.8",
      "observed": 1.4148429618479725,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-decay_2percent_s",
      "description": "decay 2percent s",
      "expected": "<= 2.0",
      "observed": 1.4138024406393421,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-transient_relative_motion_mm",
      "description": "transient relative motion mm",
      "expected": "<= 2.0",
      "observed": 1.2648326768970162,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-total_compression_mm",
      "description": "total compression mm",
      "expected": "<= 11.0",
      "observed": 8.677405989552321,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-group_load_min_N",
      "description": "group load min N",
      "expected": ">= 0.0",
      "observed": 318.3659121738203,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "envelope-group_load_max_N",
      "description": "group load max N",
      "expected": "<= 1100.0",
      "observed": 923.5962022701904,
      "passed": true,
      "method": "32 executed parameter corners. Running-band and combined-transient bounds evaluated separately, then enveloped."
    },
    {
      "id": "corners-complete",
      "description": "All declared parameter combinations were executed",
      "expected": "32 distinct accepted corners",
      "observed": 32,
      "passed": true,
      "method": "Full Cartesian product: mass x CG x front stiffness x rear stiffness x damping."
    },
    {
      "id": "stiff-rejected",
      "description": "Stiff retrofit is rejected by force-transmission requirement",
      "expected": "Force envelope exceeds 18 N",
      "observed": 46.25047485968885,
      "passed": true,
      "method": "Same mass, forcing and geometry; 600 kN/m base pair stiffness, damping parameter 0.06."
    },
    {
      "id": "regressions",
      "description": "Independent regression suite passed",
      "expected": "At least 22 tests, no failures",
      "observed": 22,
      "passed": true,
      "method": "Executed unittest suite plus analytical, energy and convergence checks."
    },
    {
      "id": "settled-runup",
      "description": "Selected corner start/stop responses decay after the recorded stop",
      "expected": "Final relative motion < 0.01 mm",
      "observed": 7.292121282738968e-05,
      "passed": true,
      "method": "Actual final sample after 2 seconds of free decay, not the spectral decay estimate."
    }
  ],
  "source_sha256": {
    "complete_validation.py": "318e8efd0f042bffbf1deeca5569065003a69e41235345bc5b632c97b1c21cd3",
    "model.py": "80fd3d031c3d65d294cc67ffe664dc3e255f1c8a9dd7f54e9896b37d65010845",
    "reporting.py": "f0a0676fb5b33f091d27298a6d5060cf5cf1383e0c7f72cdcfe94ff57216b510",
    "run.py": "225b15247516c5f7fcd99db52bbcdd9fd4e6c5cb81f17fd9bff75b656c963c68",
    "study.py": "49fe72e291c282a2d66c8dcf948302e0c7f6b4655fccf17530dc63a09546bc77",
    "test_project.py": "a1dc0f16cf867946a87ea841ee7faa34ae7eabf1e10e49b4ee321c4631a48d64",
    "validation.py": "268671ed3fce969a839d6d88d0d4fa0712000c92cfb072f6cc7097bebb9682f6",
    "inputs.json": "1173cbbd49071fc9dc741dc667e994a05f5eb15c9aa1aae9c2ababef66c4f095"
  },
  "report": "completion/report.html",
  "limitations": [
    "Rigid-body vertical/pitch model with linear equivalent support pairs.",
    "All excitation and property data are declared synthetic reference assumptions.",
    "Finite corner sweep and sampled transient peaks with a 1% allowance; no guarantee over every interior uncertain point.",
    "No fabricated hardware, measured elastomer curves, fatigue life or field qualification."
  ],
  "results": {
    "static_compression_mm": 7.440643124906281,
    "operating_reaction_envelope_N": 7.576939635290005,
    "operating_sensor_acceleration_m_s2": 1.4148429618479725,
    "decay_2percent_s": 1.4138024406393421,
    "transient_relative_motion_mm": 1.2648326768970162,
    "total_compression_mm": 8.677405989552321,
    "group_load_min_N": 318.3659121738203,
    "group_load_max_N": 923.5962022701904
  }
}
