The Python repository remains unchanged and acts as behavioral reference only. Ports are fixture-driven and land in this standalone repository. Opt-in, read-only live smoke tests on 2026-08-26 covered TIS enrollment reads, Blackboard courses, WS programs, eHall rooms, and library-booking identity, summary, lab, and reservation-count reads. PMS remained blocked by its campus-network gate. That expansion did not perform real account mutations. A later authorized individual Blackboard Original file resubmission passed live CLI submission and REST read-back on 2026-09-11; other mutation paths remain fixture-tested only.
| Area | Read operations | Mutations | Status | Priority |
|---|---|---|---|---|
| Core CLI | text/JSON/JSONL, typed errors, exit codes, capabilities, consequences, structured doctor, cross-platform system credential profiles | local credential login/logout, guarded file writes, confirmation policy | Implemented | P0 |
| CI | cross-platform check/test/pack workflow | none | Active at .github/workflows/ci.yml |
P0 |
| SSO/CAS | shared CAS sessions for TIS, Blackboard, and WS | none | Implemented; opt-in live login smoke passed for all three on 2026-08-26, while fresh login on 2026-08-27 was blocked before password submission by the current interactive slide CAPTCHA | P0 |
| TIS catalog | search, normalized schedules, cache | none | Implemented | P0 |
| TIS personal | selectable courses, normalized enrolled/week schedule | enroll | Enrolled read live-smoked; other reads still need targeted live QA | P0 |
| TIS academics | grades/GPA, exams, TIS-reported structured degree progress, conservative missing-course classification | none | Implemented with fixtures; live QA pending | P1 |
| TIS planning | persistent week-aware timetable plans, scored solver, read-only tis plan explain/recommend, blocked periods, conservative local degree audit |
guarded local plan files | Implemented with fixtures; explain/recommend stay advisory and never select courses automatically |
P1 |
| TIS remaining | catalog and live classroom views, evaluation status, multi-source iCalendar export, selection previews, bid planning | enroll, cart, drop, single and batch bids | Implemented with explicit confirmation and exact post-readback for remote writes; live QA pending | P1 |
| Calendar | academic terms, holidays, date intelligence | local override not ported | Read paths implemented | P1 |
| Transit | facilities, search, lines, schedules, stops, live GPS | none | Implemented and live-smoked; routing not ported | P1 |
| Faculty | department list, search, profile render | none | Implemented and live-smoked; use exact department labels from the public index | P1 |
| Context and profile | truthful calendar/live-class/exam/deadline context; Context v2 --level/--live; whitelisted student summary with independent source status |
guarded versioned profile export | Implemented with conservative omissions and masked identity fields | P1 |
| Academic snapshots | normalized TIS state with optional Blackboard deadlines; academic changes; one-shot academic watch |
guarded versioned snapshot files | Implemented with digest verification, no-overwrite defaults, and no remote write behavior | P1 |
| Resources | built-in campus resource registry and search | none | Implemented | P1 |
| Wi-Fi | current association and recent macOS SUSTC Wi-Fi events | none | Implemented on macOS only | P1 |
| Blackboard | courses, content, roster, course messages, course-message send preview/apply, discussions, teacher-provided attachment listing/download, per-course and cross-course assignments, cross-course grades, deadlines, calendar REST reads, search, attempts, native calendar-link storage/fetch | guarded local sync, optional ICS write, individual Classic/Original file and text submission | CLI CAS login and courses read live-smoked; roster, course-message, discussion-group discovery, and course-message send now follow official current Learn REST endpoints. Message send validates exact roster recipients, binds apply to the previewed text SHA-256, and verifies the created Sent-folder record. Calendar reads, native feed-link storage/fetch and local download/sync use Learn REST/BBML paths or keyring fixtures. Assignment submission uses a fresh Classic/Original HTTP form with CAS cookies, hash binding and REST read-back; individual Original file resubmission passed a live check on 2026-09-11, while text remains fixture-tested | P2 |
| Library catalog | Primo search/detail reads, browser fallback transport | none | Implemented with direct public HTTP plus manual --browser [--interactive] fallback; browser auth stays user-completed and cookies are not persisted by the CLI |
P2 |
| Library booking | account state, idle summary, labs, rooms, reservation counts, reservations | guarded create/cancel | Login, account, summary, labs, and count live-smoked; previews now use conservative exact-availability checks and fail closed when the slot cannot be proved safe | P2 |
| E-Hall booking | redacted user profile, rooms, meetings | guarded create/cancel | Login and rooms read live-smoked; previews now use conservative exact day/time availability checks and fail closed on unreadable overlap state | P2 |
| SUSTech Global | program list and detail | service-specific writes | CLI CAS login and program list live-smoked; detail still fixture-only | P2 |
| PMS | auth check, printer groups, stations, print jobs, scan jobs, usage history | guarded queue upload/delete | Live attempt reached the campus-network gate before login; auth and writes remain fixture-verified and first account link may still need browser help | P2 |
| NCES | course evaluations and search | refresh/import | Implemented; public API only | P3 |
| Papers | CrossRef metadata and optional OA resolution | guarded OA PDF download | Search implemented and live-smoked; PDF signature, redirect, destination, size, and digest checks are fixture-tested | P3 |
| Web UI | local human interface | selection workflows | Separate package later | P4 |
- Finish targeted live QA for remaining authenticated reads and retry PMS from the campus network.
- Exercise only read-only previews against real booking, library-booking, PMS, selection, and Blackboard targets before considering any supervised write.
- Exercise both direct and
--browserPrimo transports on more hosts and keep the browser path as the manual-auth fallback. - Decide whether PMS needs a dedicated first-link browser assist instead of pure CLI fallback messaging.
- Build a separate Web UI package on top of the same typed service layer.
Every mutation stays unavailable until its preview payload, confirmation gate,
success criteria, and post-action verification have fixture tests. As of
v0.11.0, guarded remote mutations include TIS enroll/cart/drop/bid,
Blackboard submission, eHall and library booking create/cancel, and PMS queue
upload/delete. They require an exact typed target, fresh preflight, explicit
--confirm, and operation-specific read-back; an ambiguous result exits 5 with
DO_NOT_RETRY_AUTOMATICALLY. These paths are fixture-validated only. Legacy
venue borrowing, library early-finish, scan download, raw TIS queries, and
browser-driven vendor/database automation remain intentionally unavailable
because the reference implementation does not provide a trustworthy,
verifiable CLI boundary.