{
  "schema": "semiagora.2d-heterojunction-ndr-metric-contract.v1",
  "version": "2026-08-27-v104",
  "experimentId": "SA-DEV-2D-NDR-005",
  "executionMode": "precomputed_browser_csv_replay_only",
  "sweep": {
    "rows": 6144,
    "curves": 384,
    "sweepPairs": 192,
    "axes": {
      "bias_state": 16,
      "gate_state": 4,
      "alignment_state": 3,
      "broadening_state": 2,
      "background_state": 2,
      "series_contact_state": 2,
      "sweep_direction": 2,
      "trap_memory_state": 2
    },
    "sampling": "Complete 16 x 4 x 3 x 2 x 2 x 2 x 2 x 2 Cartesian product in declared array order; no randomness, fitting, optimization, source-result calibration, or hidden rows."
  },
  "ndrRule": {
    "evaluatedBranch": "positive normalized bias only",
    "localSlopeThreshold": -0.035,
    "consecutiveNegativeSegmentsRequired": 2,
    "peakValleyProminenceRequiredPercent": 8,
    "statement": "A stable NDR proxy requires at least two consecutive positive-branch finite-difference slopes below -0.035 and at least 8 percent peak-to-valley prominence. One falling segment is explicitly insufficient."
  },
  "equations": [
    "window_center = clamp(alignment_center + gate_center_shift + series_center_shift + trap_shift * sweep_direction, 0.18, 1.02)",
    "window_width = broadening_width + series_broadening",
    "window_amplitude = alignment_amplitude * gate_amplitude_factor * broadening_amplitude_factor * (1 - trap_amplitude_penalty)",
    "window_current = window_amplitude * abs(bias) * exp(-0.5 * ((abs(bias) - window_center) / window_width)^2)",
    "background_current = background_linear * abs(bias) + background_quadratic * abs(bias)^2",
    "positive_raw_current = background_current + window_current",
    "negative_raw_current = background_current * gate_reverse_background_factor + window_current * gate_reverse_window_factor * alignment_reverse_window_factor",
    "observed_current = sign(bias) * series_transfer * raw_current / (1 + series_compression * raw_current)",
    "local_slope = delta(observed_current) / delta(normalized_bias) on ordered positive-bias samples",
    "rectification_ratio = abs(positive_current_at_equal_magnitude) / abs(negative_current_at_equal_magnitude)",
    "peak_to_valley_proxy and prominence are calculated only after the positive-branch peak and have no physical current unit",
    "sweep deltas compare matched forward/reverse curves; they are history-consistency tests, not extracted trap parameters"
  ],
  "metricDefinitions": {
    "normalized_current_proxy": "Original dimensionless current-shape value; not amperes, current density, measured current, or a calibrated transport result.",
    "local_slope_proxy": "Finite difference within the saved normalized curve; not physical conductance or differential resistance.",
    "rectification_ratio_proxy": "Within-packet equal-magnitude branch ratio; not a measured rectification ratio or proof of NDR.",
    "peak_to_valley_proxy": "Within-packet peak/valley shape ratio; not a source-reported or measured device metric.",
    "sweep_max_current_delta_proxy": "Matched forward/reverse shape difference; not trap density, time constant, drift, or uncertainty.",
    "evidence_readiness_score": "Bounded teaching score capped at 45 because the packet contains no owned measurement or reproduced transport calculation; not technology readiness, confidence, or signoff."
  },
  "zeroBoundaryFields": [
    "external_numeric_values",
    "copied_source_results",
    "copied_trace_points",
    "physical_dimensions",
    "material_parameters",
    "fabrication_conditions",
    "real_contact_values",
    "calibrated_models",
    "live_tcad_runs",
    "live_negf_runs",
    "live_spice_runs",
    "measured_device_rows",
    "mechanism_proof_claims",
    "circuit_advantage_claims",
    "performance_rankings",
    "fabrication_recipe_actions",
    "optimization_recommendations",
    "signoff_actions",
    "live_server_runs"
  ],
  "interpretation": "Compare only within this packet. Keep rectification, stable consecutive NDR, sweep-history consistency, contact/series burden, broadening, mechanism ambiguity, contradictions, and replacement evidence attached to every reused row."
}
