{
  "schema": "semiagora.cluster-tool-routing-metric-contract.v1",
  "version": "2026-08-30-cluster-tool-routing-v1",
  "experimentId": "SA-EQP-CLUSTER-TOOL-033",
  "stateContractVersion": "2026-08-30-cluster-tool-routing-v1",
  "executionMode": "deterministic-original-dimensionless-teaching-model",
  "coefficientOrigin": "Original bounded teaching coefficients authored for this packet; no source numeric value, equation, fit, calibration, queue-time record, chamber-matching result, contamination result, equipment output, or production result is used.",
  "sourceNumericUse": "none",
  "roundDigits": 9,
  "numericClosureTolerance": 0,
  "sweep": {
    "rowCount": 6912,
    "physicalRows": 3456,
    "evidencePairs": 3456,
    "orderedStateCount": 8,
    "orderedStateIsTime": false
  },
  "axisCoefficients": {
    "platform_family": {
      "single-arm-like": {
        "routeTopologyAffinity": 0.62,
        "chamberMatchingTolerance": 0.42,
        "queueTimeSeparationAffinity": 0.58,
        "carryoverSignatureTolerance": 0.54,
        "trackingEvidenceControl": 0.58,
        "evidenceFlow": 0.6
      },
      "dual-arm-like": {
        "routeTopologyAffinity": 0.58,
        "chamberMatchingTolerance": 0.48,
        "queueTimeSeparationAffinity": 0.54,
        "carryoverSignatureTolerance": 0.52,
        "trackingEvidenceControl": 0.6,
        "evidenceFlow": 0.58
      },
      "multi-cluster-like": {
        "routeTopologyAffinity": 0.54,
        "chamberMatchingTolerance": 0.56,
        "queueTimeSeparationAffinity": 0.5,
        "carryoverSignatureTolerance": 0.58,
        "trackingEvidenceControl": 0.62,
        "evidenceFlow": 0.56
      }
    },
    "route_topology_state": {
      "serial-route-constrained-like": {
        "routeRepresentativeness": 0.38,
        "routeVariationSensitivity": 0.44,
        "trackingContextCorrelation": 0.42,
        "factoryContextCompatibility": 0.52,
        "modelLimitBurden": 0.56,
        "evidenceFlow": 0.46
      },
      "parallel-route-exposed-like": {
        "routeRepresentativeness": 0.5,
        "routeVariationSensitivity": 0.52,
        "trackingContextCorrelation": 0.5,
        "factoryContextCompatibility": 0.56,
        "modelLimitBurden": 0.46,
        "evidenceFlow": 0.54
      },
      "revisit-route-supported-like": {
        "routeRepresentativeness": 0.72,
        "routeVariationSensitivity": 0.68,
        "trackingContextCorrelation": 0.7,
        "factoryContextCompatibility": 0.7,
        "modelLimitBurden": 0.34,
        "evidenceFlow": 0.68
      },
      "loadlock-transition-exposed-like": {
        "routeRepresentativeness": 0.46,
        "routeVariationSensitivity": 0.4,
        "trackingContextCorrelation": 0.44,
        "factoryContextCompatibility": 0.48,
        "modelLimitBurden": 0.62,
        "evidenceFlow": 0.42
      }
    },
    "chamber_match_state": {
      "chamber-match-constrained-like": {
        "chamberMatchingMargin": 0.28,
        "workloadBalanceMargin": 0.48,
        "chamberMismatchBurden": 0.72
      },
      "workload-balance-constrained-like": {
        "chamberMatchingMargin": 0.48,
        "workloadBalanceMargin": 0.3,
        "chamberMismatchBurden": 0.68
      },
      "chamber-match-supported-like": {
        "chamberMatchingMargin": 0.76,
        "workloadBalanceMargin": 0.74,
        "chamberMismatchBurden": 0.24
      }
    },
    "queue_time_state": {
      "residency-time-exposed-like": {
        "queueTimeBalance": 0.34,
        "residencyConstraintMargin": 0.42,
        "routeTimingSeparationMargin": 0.38,
        "queueTimeBurden": 0.72
      },
      "transfer-delay-ambiguity-exposed-like": {
        "queueTimeBalance": 0.46,
        "residencyConstraintMargin": 0.3,
        "routeTimingSeparationMargin": 0.44,
        "queueTimeBurden": 0.68
      },
      "queue-time-supported-like": {
        "queueTimeBalance": 0.76,
        "residencyConstraintMargin": 0.74,
        "routeTimingSeparationMargin": 0.72,
        "queueTimeBurden": 0.24
      }
    },
    "contamination_carryover_state": {
      "carryover-signature-constrained-like": {
        "carryoverSignatureMargin": 0.36,
        "routeTraceabilityMargin": 0.38,
        "falseAttributionBurden": 0.66
      },
      "carryover-signature-supported-like": {
        "carryoverSignatureMargin": 0.76,
        "routeTraceabilityMargin": 0.74,
        "falseAttributionBurden": 0.24
      }
    },
    "tracking_job_state": {
      "tracking-job-supported-like": {
        "trackingEvidenceMargin": 0.76,
        "jobAmbiguityBurden": 0.22,
        "handoffMargin": 0.72
      },
      "tracking-job-constrained-like": {
        "trackingEvidenceMargin": 0.34,
        "jobAmbiguityBurden": 0.7,
        "handoffMargin": 0.38
      }
    }
  },
  "proxyEquations": {
    "ordered_state_norm": "round9(stateIndex / 7)",
    "routing_readiness_proxy": "round9(clamp01(0.10 + 0.46*chamberMatch.chamberMatchingMargin + 0.18*family.routeTopologyAffinity + 0.14*routeTopology.routeRepresentativeness + 0.12*(1 - abs(stateNorm - 0.22))))",
    "chamber_matching_readiness_proxy": "round9(clamp01(0.10 + 0.30*chamberMatch.workloadBalanceMargin + 0.22*p.routing_readiness_proxy + 0.16*routeTopology.routeRepresentativeness + 0.12*queueTime.queueTimeBalance + 0.10*(1 - chamberMatch.chamberMismatchBurden)))",
    "workload_balance_readiness_proxy": "round9(clamp01(0.08 + 0.30*queueTime.queueTimeBalance + 0.22*queueTime.residencyConstraintMargin + 0.16*family.chamberMatchingTolerance + 0.14*routeTopology.routeVariationSensitivity + 0.10*(1 - abs(stateNorm - 0.45))))",
    "queue_time_readiness_proxy": "round9(clamp01(0.08 + 0.24*p.chamber_matching_readiness_proxy + 0.22*p.workload_balance_readiness_proxy + 0.18*family.queueTimeSeparationAffinity + 0.12*stateNorm + 0.10*carryoverSignature.carryoverSignatureMargin + 0.06*(1 - trackingJob.jobAmbiguityBurden)))",
    "residency_constraint_readiness_proxy": "round9(clamp01(0.10 + 0.28*routeTopology.trackingContextCorrelation + 0.20*trackingJob.trackingEvidenceMargin + 0.18*carryoverSignature.routeTraceabilityMargin + 0.14*family.carryoverSignatureTolerance + 0.10*(1 - carryoverSignature.falseAttributionBurden*stateNorm)))",
    "contamination_traceability_readiness_proxy": "round9(clamp01(0.10 + 0.30*carryoverSignature.carryoverSignatureMargin + 0.20*family.carryoverSignatureTolerance + 0.16*routeTopology.factoryContextCompatibility + 0.14*trackingJob.handoffMargin + 0.10*(1 - stateNorm*carryoverSignature.falseAttributionBurden)))",
    "substrate_tracking_readiness_proxy": "round9(clamp01(0.08 + 0.24*p.queue_time_readiness_proxy + 0.20*p.chamber_matching_readiness_proxy + 0.18*p.contamination_traceability_readiness_proxy + 0.14*stateNorm + 0.10*p.residency_constraint_readiness_proxy + 0.06*family.queueTimeSeparationAffinity))",
    "routing_burden_proxy": "round9(clamp01(0.06 + 0.24*(1 - queueTime.routeTimingSeparationMargin) + 0.18*(1 - p.queue_time_readiness_proxy) + 0.16*trackingJob.jobAmbiguityBurden + 0.14*stateNorm + 0.12*(1 - p.residency_constraint_readiness_proxy) + 0.10*chamberMatch.chamberMismatchBurden))",
    "chamber_mismatch_burden_proxy": "round9(clamp01(0.05 + 0.30*p.routing_burden_proxy*(0.45 + 0.55*stateNorm) + 0.20*(1 - p.substrate_tracking_readiness_proxy) + 0.16*(1 - p.contamination_traceability_readiness_proxy) + 0.12*trackingJob.jobAmbiguityBurden + 0.10*chamberMatch.chamberMismatchBurden))",
    "queue_time_burden_proxy": "round9(clamp01(0.06 + 0.26*p.chamber_mismatch_burden_proxy + 0.22*(1 - p.routing_readiness_proxy) + 0.18*(1 - p.chamber_matching_readiness_proxy) + 0.14*(1 - p.queue_time_readiness_proxy) + 0.12*queueTime.queueTimeBurden + 0.08*carryoverSignature.falseAttributionBurden))",
    "route_localization_readiness_proxy": "round9(clamp01(0.10 + 0.24*p.residency_constraint_readiness_proxy + 0.20*routeTopology.routeVariationSensitivity + 0.18*family.trackingEvidenceControl + 0.14*trackingJob.handoffMargin + 0.08*(1 - p.routing_burden_proxy) + 0.06*(1 - stateNorm)))",
    "module_process_tracking_readiness_proxy": "round9(clamp01(0.10 + 0.24*p.substrate_tracking_readiness_proxy + 0.20*p.residency_constraint_readiness_proxy + 0.18*p.contamination_traceability_readiness_proxy + 0.14*p.queue_time_readiness_proxy + 0.08*(1 - p.queue_time_burden_proxy) + 0.06*p.route_localization_readiness_proxy))",
    "job_traceability_readiness_proxy": "round9(clamp01(0.10 + 0.24*p.residency_constraint_readiness_proxy + 0.20*p.route_localization_readiness_proxy + 0.18*p.contamination_traceability_readiness_proxy + 0.14*trackingJob.handoffMargin + 0.08*(1 - p.routing_burden_proxy) + 0.06*family.evidenceFlow))",
    "contamination_carryover_burden_proxy": "round9(clamp01(0.06 + 0.30*p.queue_time_burden_proxy + 0.20*p.chamber_mismatch_burden_proxy + 0.16*chamberMatch.chamberMismatchBurden + 0.14*queueTime.queueTimeBurden + 0.10*(1 - p.module_process_tracking_readiness_proxy) + 0.10*carryoverSignature.falseAttributionBurden))",
    "false_attribution_burden_proxy": "round9(clamp01(0.06 + 0.24*abs(stateNorm - 0.55) + 0.20*carryoverSignature.falseAttributionBurden + 0.18*queueTime.queueTimeBurden + 0.14*trackingJob.jobAmbiguityBurden + 0.10*(1 - routeTopology.routeVariationSensitivity) + 0.08*chamberMatch.chamberMismatchBurden))",
    "model_limit_burden_proxy": "round9(clamp01(0.08 + 0.28*routeTopology.modelLimitBurden + 0.20*carryoverSignature.falseAttributionBurden + 0.16*stateNorm + 0.12*queueTime.queueTimeBurden + 0.10*trackingJob.jobAmbiguityBurden + 0.06*(1 - family.evidenceFlow)))",
    "equipment_review_readiness_proxy": "round9(clamp01(0.10 + 0.18*p.module_process_tracking_readiness_proxy + 0.16*p.job_traceability_readiness_proxy + 0.16*(1 - p.queue_time_burden_proxy) + 0.14*p.route_localization_readiness_proxy + 0.12*p.residency_constraint_readiness_proxy + 0.08*stateNorm + 0.06*routeTopology.evidenceFlow))",
    "factory_evidence_readiness_proxy": "round9(clamp01(0.08 + 0.22*p.route_localization_readiness_proxy + 0.20*p.job_traceability_readiness_proxy + 0.18*p.module_process_tracking_readiness_proxy + 0.14*(1 - p.contamination_carryover_burden_proxy) + 0.10*p.equipment_review_readiness_proxy + 0.08*family.trackingEvidenceControl))",
    "downstream_handoff_readiness_proxy": "round9(clamp01(0.08 + 0.18*p.substrate_tracking_readiness_proxy + 0.16*p.queue_time_readiness_proxy + 0.15*p.residency_constraint_readiness_proxy + 0.14*p.module_process_tracking_readiness_proxy + 0.12*p.job_traceability_readiness_proxy + 0.10*p.factory_evidence_readiness_proxy + 0.07*(1 - p.contamination_carryover_burden_proxy)))"
  },
  "integerLedgerEquations": {
    "route_input_total_tokens": "72 + 3*platformFamilyIndex + 2*routeTopologyIndex + carryoverSignatureIndex + trackingJobIndex + stateIndex",
    "route_topology_support_tokens": "14 + 3*chamberMatchIndex + 2*trackingJobIndex + (stateIndex % 2)",
    "chamber_match_support_tokens": "12 + 3*queueTimeIndex + 2*(1 - carryoverSignatureIndex) + (stateIndex % 3)",
    "unresolved_route_input_tokens": "route_input_total_tokens - route_topology_support_tokens - chamber_match_support_tokens",
    "route_input_ledger_residual": "route_input_total_tokens - route_topology_support_tokens - chamber_match_support_tokens - unresolved_route_input_tokens",
    "scheduling_response_total_tokens": "82 + 2*platformFamilyIndex + 2*routeTopologyIndex + chamberMatchIndex + queueTimeIndex + stateIndex",
    "queue_time_support_tokens": "18 + 4*queueTimeIndex + 2*routeTopologyIndex + ((7 - stateIndex) % 3)",
    "carryover_signature_review_tokens": "10 + 5*chamberMatchIndex + trackingJobIndex + floor(stateIndex/2)",
    "unresolved_scheduling_response_tokens": "scheduling_response_total_tokens - queue_time_support_tokens - carryover_signature_review_tokens",
    "scheduling_response_ledger_residual": "scheduling_response_total_tokens - queue_time_support_tokens - carryover_signature_review_tokens - unresolved_scheduling_response_tokens",
    "factory_handoff_total_tokens": "96 + 3*platformFamilyIndex + 2*queueTimeIndex + routeTopologyIndex + carryoverSignatureIndex + stateIndex",
    "residency_constraint_review_tokens": "24 + 5*chamberMatchIndex + routeTopologyIndex + (stateIndex % 2)",
    "tracking_evidence_review_tokens": "18 + 4*queueTimeIndex + 2*carryoverSignatureIndex + floor(stateIndex/3)",
    "chamber_match_evidence_review_tokens": "14 + 4*carryoverSignatureIndex + (2 - chamberMatchIndex) + routeTopologyIndex",
    "unresolved_factory_handoff_tokens": "factory_handoff_total_tokens - residency_constraint_review_tokens - tracking_evidence_review_tokens - chamber_match_evidence_review_tokens",
    "factory_handoff_ledger_residual": "factory_handoff_total_tokens - residency_constraint_review_tokens - tracking_evidence_review_tokens - chamber_match_evidence_review_tokens - unresolved_factory_handoff_tokens"
  },
  "clusterToolRoutingRegimePrecedence": [
    "route-topology-limited when routing readiness < 0.48",
    "chamber-matching-limited when chamber-matching readiness < 0.52",
    "workload-balancing-limited when workload-balance readiness < 0.52",
    "queue-time-limited when queue-time readiness < 0.54",
    "residency-constraint-limited when residency-constraint readiness < 0.54",
    "contamination-carryover-limited when contamination-traceability readiness < 0.58 or queue-time burden > 0.58",
    "tracking-job-evidence-limited when module-process-tracking readiness < 0.60 or job-traceability readiness < 0.60 or equipment-review readiness < 0.60 or model-limit burden > 0.60",
    "bounded-cluster-tool-routing-review otherwise"
  ],
  "decisionThresholds": {
    "routeTopologyLimited": 0.48,
    "chamberMatchLimited": 0.52,
    "workloadBalanceLimited": 0.52,
    "queueTimeLimited": 0.54,
    "residencyConstraintLimited": 0.54,
    "carryoverSignatureLimited": 0.58,
    "queueTimeBurdenHigh": 0.58,
    "moduleProcessTrackingLimited": 0.6,
    "jobTraceabilityLimited": 0.6,
    "equipmentReviewLimited": 0.6,
    "modelLimitHigh": 0.6
  },
  "bandRules": {
    "commonReadiness": {
      "limitedBelow": 0.54,
      "boundedAtOrAbove": 0.68
    },
    "burden": {
      "lowerAtOrBelow": 0.4,
      "higherAbove": 0.58
    },
    "priority": {
      "highAbove": 0.58,
      "lowerAtOrBelow": 0.4
    },
    "note": "All thresholds are original dimensionless categorical label rules, not route times, queue durations, residency limits, chamber matching criteria, contamination limits, equipment specifications, throughput limits, or production decisions.",
    "factoryGate": {
      "trackingEvidenceBelow": 0.6,
      "queueTimeBurdenAbove": 0.52,
      "moduleProcessTrackingBelow": 0.63,
      "jobTraceabilityBelow": 0.61,
      "factoryEvidenceBelow": 0.64,
      "equipmentReviewBelow": 0.66
    },
    "downstreamFacilityAbatementReadiness": {
      "limitedBelow": 0.64,
      "boundedAtOrAbove": 0.68
    },
    "upstreamEdgeBevelBacksideReadiness": {
      "limitedBelow": 0.58,
      "boundedAtOrAbove": 0.68
    },
    "upstreamChamberStateFdcReadiness": {
      "limitedBelow": 0.6,
      "boundedAtOrAbove": 0.68
    },
    "upstreamEndpointSensorReadiness": {
      "limitedBelow": 0.6,
      "boundedAtOrAbove": 0.68
    },
    "upstreamCleanSurfaceReadiness": {
      "limitedBelow": 0.6,
      "boundedAtOrAbove": 0.68
    },
    "upstreamThermalHistoryReadiness": {
      "limitedBelow": 0.6,
      "boundedAtOrAbove": 0.68
    },
    "downstreamModelLimitPriority": {
      "queueTimeBurdenAbove": 0.58,
      "chamberMismatchBurdenAbove": 0.52,
      "routeTopologyBelow": 0.48,
      "chamberMatchingReadinessBelow": 0.54,
      "workloadBalanceBelow": 0.54,
      "queueTimeReadinessBelow": 0.58,
      "moduleProcessTrackingBelow": 0.66,
      "factoryEvidenceBelow": 0.64,
      "modelLimitAbove": 0.58,
      "falseAttributionAbove": 0.44
    },
    "factoryAutomationEngineerModelLimit": {
      "reviewAbove": 0.46
    },
    "downstreamVacuumRoutingPriority": {
      "highAbove": 0.56,
      "lowerAtOrBelow": 0.4
    },
    "evidenceTraceabilityGate": {
      "planRequiredBelow": 0.66
    }
  },
  "boundary": "All equations produce normalized teaching proxies or exact integer bookkeeping tokens. They are not route schedules, queue durations, chamber assignments, matching results, process values, contamination measurements, throughput predictions, qualification results, equipment controls, recipes, or production models.",
  "roleGatePrecedence": {
    "equipmentEngineer": [
      "platform and route-context review",
      "chamber-state and carryover review",
      "owned equipment evidence review"
    ],
    "factoryAutomationEngineer": [
      "job and substrate tracking review",
      "model-limit review",
      "bounded routing comparison"
    ],
    "schedulingEngineer": [
      "queue-time and residency review",
      "workload and robot-conflict separation",
      "owned schedule replacement"
    ],
    "processIntegrationEngineer": [
      "chamber-matching evidence",
      "cross-process carryover evidence",
      "bounded integration review"
    ]
  },
  "serialization": {
    "numericFormat": "finite decimal rounded to 9 places; no exponent notation",
    "integerLedgers": "base-10 integers with exact zero residuals",
    "categoricalLabels": "closed enumerations only",
    "csvJsonIdentity": "Every CSV cell must equal the canonical JSON value under string conversion."
  },
  "validationGates": [
    "full Cartesian row count and order",
    "physical identity across evidence pairs",
    "all normalized proxy equations independently recomputed",
    "all eight cluster-tool routing regimes represented",
    "all role, bridge, priority, and evidence labels represented",
    "three integer ledgers close exactly",
    "all 112 prohibited fields remain numeric zero",
    "CSV and JSON agree cell-for-cell",
    "two isolated unchanged-input generator reruns are byte-identical",
    "source-body, physical-unit, equipment-action, disposition-action, and live-run boundaries pass"
  ],
  "reachabilityAmendments": [
    {
      "id": "CTR-RA1",
      "field": "factory_automation_engineer_gate review-model-limit categorical branch",
      "change": "model_limit_burden_proxy > 0.58 to > 0.46",
      "reason": "An isolated pre-amendment 6,912-row diagnostic reached all eight regimes but missed factory_automation_engineer_gate:review-model-limit at the original 0.58 boundary; this source-independent label-only boundary exposes both bounded-review branches.",
      "sourceNumericUse": "none",
      "equationsChanged": false,
      "coefficientsChanged": false,
      "axesChanged": false,
      "physicalBoundaryChanged": false
    },
    {
      "id": "CTR-RA2",
      "field": "downstream_vacuum_routing_priority_band high-priority categorical branch",
      "change": "chamber_mismatch_burden_proxy > 0.58 to > 0.56",
      "reason": "The same isolated pre-amendment diagnostic missed downstream_vacuum_routing_priority_band:high-priority because the chamber-mismatch proxy maximum remained below the original 0.58 boundary; the source-independent label-only boundary is set below that maximum without changing the proxy equation.",
      "sourceNumericUse": "none",
      "equationsChanged": false,
      "coefficientsChanged": false,
      "axesChanged": false,
      "physicalBoundaryChanged": false
    }
  ],
  "status": "locked-for-deterministic-generation"
}
