check_plan
Validates a term-by-term degree plan against the Bulletin before you present it, flagging unmet prerequisites, unit caps, duplicate or unknown courses, and uncovered requirements.
Instructions
Validate a term-by-term plan. Call this before presenting any plan, fix every error, and re-check until
valid. courses gives each planned course's title, units and source_page for the plan's table: no get_course
per course. Errors (with Bulletin text/pages): prereq not met by that term, course already passed or planned twice,
unknown course, units over the term's cap (profile.max_units_per_term, else the term's max_units, else 15),
requirement or 120/upper-division units not covered. Warnings: unverifiable prereqs (GPA not given, permission),
loads above the normal 15 (p.2393; "as on the Bulletin roadmap" with no advisor when the term's roadmap semester
prints that load), unfilled slots.
profile.f1: true for an F-1 visa student: a spring/fall term under 12 units is an error (the plan's last term: a
warning and the international office), and so is a skipped spring/fall term (pp.2390, 2393).
profile.permissions: courses the student says an instructor or department already gave them permission for: those
prereq branches count, with a warning to bring it to registration. profile.overload_approved: terms whose overload
the student says their advisor approved: no advisor handoff for that load (the term's cap still applies).
plan: {semesters: [{term: '2027-fall', courses: ['CSC 413', {slot: 'senior_electives', units: 3}]}]}. Pass
build_plan's semesters back as returned: their max_units and roadmap {units, source} keep the roadmap's loads. A slot is an
unfilled pick for a requirement group (group ids from get_program_requirements), or {slot: 'elective', units: 3,
upper_division?: true} for free units. Terms are YYYY-spring/summer/fall, or YYYY-winter for Winter Session (January,
between fall and spring, at most 4 units), after the profile's completed terms.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"profile": "<profile>",
"plan": "<plan>"
},
"name": "check_plan"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | ||
| profile | Yes |