Uh oh!
There was an error while loading. Please reload this page.
feat(learn): Tutor knowledge-map rail overhaul + AI concept descriptions (→ main) - #338
Conversation
Constrain the KnowledgeGraph2D view transform and node dragging so the graph can't be flung into empty space or clipped outside its box: - clampView() keeps the content's bounding box inside the window (or covering it when larger), applied on pan, wheel-zoom, and both zoom buttons - node drag is clamped to the visible bounds mapped back through the current transform Force-simulation parameters are untouched — only the camera/drag bounds. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a tool-less Pydantic AI agent that returns a one-sentence,
student-facing description for a concept, plus the route that drives it:
- agents/concept_describe.py: concept_describe_agent (typed
ConceptDescription output) + build_message helper
- agents/_providers.py: register the concept_describe task on the
gemini-2.5-flash-lite tier (short single-shot generation)
- routes/graph.py: POST /api/graph/{user_id}/concept-description
Backs the Tutor knowledge-map rail's focus card for concepts that lack a
stored description (e.g. manually-added ones).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Redesign the active-session rail to the Tutor Session design and make it a working navigator over the course map: - rail content matches the mockup: Knowledge-map header (course code + name), graph on a transparent radial-glow surface, tier legend, Focused concept card, "In this branch" list, "Elsewhere in course" chips - graph is filtered to the focused course's tree only (not the full multi-course graph) - focus is decoupled from the chat: clicking a node (or a list item) focuses it in the rail without touching the conversation; the focus card's Resume/Start button — or a double-click — switches the session (resume existing session for that concept, else start fresh) - focus card anchors on the course when no concept is focused - per-concept descriptions: shown from stored data, else lazily fetched from the concept-description endpoint and cached (skipped in local mode, which has no AI, falling back to the connected-concepts line) - manually add a concept (links to the focused node / course root) or remove the focused concept; remove also hits deleteGraphNode on real backends - local dataset: real course_id + course codes on nodes, richer concept lists, and one-line descriptions per concept Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The knowledge-map rail's /concept-description endpoint handed the concept name and course label straight to the LLM with no length bound, and ran the agent with no error handling — so an oversized payload could bloat the prompt and any model/transport/validation failure surfaced as an opaque 500. - Truncate concept (200) and course_label (120) before build_message. - Wrap the agent run: (AgentRunError, httpx.HTTPError, ValidationError) -> 502, leaving unexpected exceptions to the generic 500 handler. - Add route tests: happy path, truncation, 502 translation, 400 empty concept, and unexpected-exception-falls-through-to-500. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ConceptDescription.description capped at 240 chars while the prompt asks for a ~12-28 word sentence. A verbose sentence with long technical terms could overflow 240 -> Flashcards-style schema-validation failure -> agent retry -> UnexpectedModelBehavior -> a user-facing 502 instead of a slightly-long-but-valid description. Raise the ceiling to 400 (still bounded against runaway output) and document why, so it isn't tightened back. No test asserts the cap value. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Warning Review limit reached
Next review available in:3 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (10)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with |
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs | frontend-staging | f31342c | Commit Preview URL Branch Preview URL | Jul 15 2026, 05:14 AM |
Uh oh!
There was an error while loading. Please reload this page.
Brings the Tutor knowledge-map rail overhaul (originally #334) to
mainso it deploys tostaging.saplinglearn.com. #334 was merged into thestagingbranch only, which the staging site does not deploy from — so it never went live. This PR lands the same, tested feature on the trunk.What
Replaces the old Tutor session rail (
Mode / Messages / Context / Progress / Related) with the knowledge-map rail:KNOWLEDGE MAPheader + graph, mastery legendFOCUSED CONCEPTcard with an AI-generated concept descriptionIN THIS BRANCHlist (mastery-colored) +ELSEWHERE IN COURSEchipsconcept_describeagent +/describe-conceptendpoint feeding the cardCommits (cherry-picked onto
main)fix(graph): clamp pan/zoom and node-drag to the viewportfeat(graph): concept-description agent + endpointfeat(learn): rebuild the Tutor knowledge-map railfix(graph): bound inputs and handle agent failures in describe_conceptfix(learn): relax concept-description output cap 240 → 400(follow-up fromfix/concept-desc-cap)Validation (local)
tscclean ·lint0 errors ·vitest77 passedmain(0 conflicts)🤖 Generated with Claude Code