Extract Pensive assignment platform integration logic from legacy repository - #573
Open
cycomachead wants to merge 1 commit into
Open
Extract Pensive assignment platform integration logic from legacy repository#573cycomachead wants to merge 1 commit into
cycomachead wants to merge 1 commit into
Conversation
Extract and implement Pensive LMS integration logic to support syncing assignments and posting whole-day extensions via the legacy Pensive API. Adds a new `PensiveFacade`, database migration for LMS ID 3, request provisioning logic, and configuration documentation. https://www.superconductor.com/tickets/hDh9FH7DgNTw/implementations/PN7CTPJwn9TL#message_fnKC8k68zD9f Co-authored-by: Codex <199175422+chatgpt-connector[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
General Info
Changes
Extracts and implements the Pensive assignment platform integration ported from the legacy
extensionsrepo, per request. This adds Pensive as a third supported LMS:PensiveFacade(registered as LMS id3) supporting:PENSIEVE_ASSIGNMENTS_PATHendpoint (Pensive's legacy API doesn't provide assignment listing, so this must be supplied separately and documented indocs/integrations.md).grant-extensionAPI, using the assignment URL, student email, and a whole-day extension count (rather than absolute due dates like Canvas/Gradescope).Lmss::Pensive::AssignmentandLmss::Pensive::Overridemodel classes to normalize Pensive's response payloads into the shared assignment-sync/extension-provisioning pipeline.3, plusLms.PENSIVE_LMSandCourse#pensive_idhelpers.Request#approveupdated to special-case Pensive's day-count based extension API while keeping the existing date-based flow for other facades.assignment_link_forhelper generalized to fall back toassignment.external_url+ LMS name for any facade without a hardcoded case (used by Pensive, since assignment URLs are the identifier)..env.exampleanddocs/integrations.mdupdated with required config (PENSIEVE_EMAIL,PENSIEVE_API_TOKEN,PENSIEVE_ASSIGNMENTS_PATH, optionalPENSIEVE_API_URL) and the expected assignment-list response contract.Outstanding items before this can be exercised end-to-end (see conversation for details)
PENSIEVE_EMAIL+ an API token from that account.CourseToLmslink per course using LMS id3and the Pensive class id (extracted from the class URL, e.g.data100_fa26)—currently must be created manually via the existingPOST /api/v1/courses/:course_id/lmssAPI or Rails console; no instructor-facing UI yet.api.pensieve.cowas not fully available during implementation (403 Forbidden by network policy, then404s/rate limiting on other paths), so live end-to-end validation against Pensive was not completed.Testing
PensiveFacade(assignment sync, extension provisioning, config validation, error handling) using stubbed HTTP requests.Lms.PENSIVE_LMS/facade_class,assignment_link_forfallback behavior,SyncAllCourseAssignmentsJobwith a Pensive course link, andRequest#approvedispatching whole-day extensions throughPensiveFacade.Documentation
Added a "Pensive" section to
docs/integrations.mdcovering required environment variables, course-linking steps, the assignment-sync response contract Pensive must implement, and how extension posting works..env.exampledocuments the new variables inline.Checklist
Superconductor Ticket Implementation | App Preview | Guided Review