---
title: "Get Schedule Diagnosis"
method: GET
path: "/schedules/{schedule_id}/diagnosis"
---

# Get Schedule Diagnosis

`GET /schedules/{schedule_id}/diagnosis`

Diagnose hard-constraint feasibility for a submitted session configuration.

Args:
    schedule_id: Unique identifier of the session to diagnose.

Returns:
    Full structured diagnosis including cores, domains, repairs, provenance,
    completeness metadata, timing, and solver status.

Raises:
    HTTPException: Status 404 when no session exists or status 422 if scheduler
        initialization fails. Unhandled executor failures become server errors.

Behavior:
    Scheduler initialization is awaited, then diagnosis runs on the shared Z3
    executor while holding the session generation lock so it cannot race model
    enumeration or auditing. Internal immutable contracts are copied into API
    response models, and successful access refreshes the session TTL.

## Path parameters

- `schedule_id` string, required

## Response `200`

Successful Response

- ScheduleDiagnosisResponse — Structured hard-constraint feasibility analysis for a schedule session. Fields: schedule_id: Session whose configuration was diagnosed. status: Solver feasibility status: satisfiable, unsatisfiable, or unknown. conflicting_constraints: Primary set of conflicting hard rules; consult ``core_is_minimal`` to determine whether subset-minimality was proved. alternative_conflict_sets: Other independently discovered conflict cores. supporting_facts: Relevant non-core facts that explain the conflict. relaxation_suggestions: Ranked configuration changes derived from findings. repair_sets: Solver-verified combinations of relaxations. candidate_domains: Per-course candidate resources and eliminations. capacity_analysis: Necessary resource and workload capacity calculations. day_feasibility: Per-faculty, per-day availability feasibility facts. preflight_findings: Static contradictions found before core extraction. provenance: Edges linking facts, configuration, and conclusions. configuration_fingerprint: Stable digest of the diagnosed configuration. core_is_minimal: Whether the primary conflict core was proven minimal. alternative_cores_complete: Whether alternative-core enumeration completed. repair_sets_complete: Whether repair-set enumeration completed. diagnostic_completeness: Overall completeness classification. diagnostic_version: Version of the diagnostic response semantics. elapsed_ms: Total diagnostic execution time in milliseconds. solver_timeout_ms: Solver timeout used, or null when no timeout was set. reason: Solver or diagnostic explanation for an indeterminate result.
  - `schedule_id` string, required
  - `status` 'satisfiable' | 'unsatisfiable' | 'unknown', required
  - `conflicting_constraints` ConstraintDiagnosticResponse[], required
    - `kind` string, required
    - `subjects` string[], required
    - `message` string, required
    - `code` string, nullable
    - `locations` string[]
  - `alternative_conflict_sets` array[], required
    - ConstraintDiagnosticResponse[]
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
  - `supporting_facts` ConstraintDiagnosticResponse[], required
    - `kind` string, required
    - `subjects` string[], required
    - `message` string, required
    - `code` string, nullable
    - `locations` string[]
  - `relaxation_suggestions` RelaxationSuggestionResponse[], required
    - `kind` string, required
    - `subjects` string[], required
    - `message` string, required
    - `priority` integer, required
  - `repair_sets` RepairSetDiagnosticResponse[], required
    - `relaxed_constraints` ConstraintDiagnosticResponse[], required
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
    - `verified` boolean, required
    - `message` string, required
  - `candidate_domains` CandidateDomainDiagnosticResponse[], required
    - `course` string, required
    - `locations` string[], required
    - `faculty_candidates` string[], required
    - `faculty_origin` string, required
    - `room_candidates` string[], required
    - `lab_candidates` string[], required
    - `section_capacity` integer, required
    - `capacity_compatible_room_candidates` string[], required
    - `capacity_compatible_lab_candidates` string[], required
    - `room_capacity_rejections` ConstraintDiagnosticResponse[], required
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
    - `room_capacity_rejection_count` integer, required
    - `room_capacity_rejections_truncated` boolean, required
    - `lab_capacity_rejections` ConstraintDiagnosticResponse[], required
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
    - `lab_capacity_rejection_count` integer, required
    - `lab_capacity_rejections_truncated` boolean, required
    - `compatible_time_patterns` string[], required
    - `availability_by_faculty` ConstraintDiagnosticResponse[], required
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
    - `rejected_patterns` ConstraintDiagnosticResponse[], required
      - `kind` string, required
      - `subjects` string[], required
      - `message` string, required
      - `code` string, nullable
      - `locations` string[]
    - `rejected_pattern_count` integer, required
    - `rejected_patterns_truncated` boolean, required
    - `modality` string, required
    - `required_room_features` string[], required
    - `required_lab_features` string[], required
    - `feature_compatible_room_candidates` string[], required
    - `feature_compatible_lab_candidates` string[], required
    - `reserve_room_during_lab` boolean, required
  - `capacity_analysis` CapacityDiagnosticResponse[], required
    - `kind` string, required
    - `subjects` string[], required
    - `message` string, required
    - `required` integer, required
    - `available` integer, required
    - `locations` string[], required
  - `day_feasibility` DayFeasibilityDiagnosticResponse[], required
    - `faculty` string, required
    - `day` string, required
    - `availability_windows` string[], required
    - `eligible_courses` string[], required
    - `compatible_pattern_count` integer, required
    - `available_pattern_count` integer, required
    - `is_mandatory` boolean, required
    - `locations` string[], required
  - `preflight_findings` ConstraintDiagnosticResponse[], required
    - `kind` string, required
    - `subjects` string[], required
    - `message` string, required
    - `code` string, nullable
    - `locations` string[]
  - `provenance` ProvenanceEdgeResponse[], required
    - `source` string, required
    - `target` string, required
    - `relationship` string, required
    - `subjects` string[], required
  - `configuration_fingerprint` string, nullable, required
  - `core_is_minimal` boolean, nullable, required
  - `alternative_cores_complete` boolean, nullable, required
  - `repair_sets_complete` boolean, nullable, required
  - `diagnostic_completeness` string, required
  - `diagnostic_version` string, required
  - `elapsed_ms` integer, required
  - `solver_timeout_ms` integer, nullable, required
  - `reason` string, nullable, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/mucsci/apis/course-scheduler-api.md) · [All operations](https://skmtc.net/mucsci/apis/course-scheduler-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mucsci/course-scheduler-api/revisions/f728bfcee693/schema)
