Account & Settings — User submission
complete
P
Parent 019ce57d-abb
Category:
Account & SettingsType:
User submissionUser role:
parentUser feedback:
when adding a new student getting this raw error message "{"detail":{"code":"FEATURE_REQUIRED","required_feature":"ai_tutor","upgrade_url":"/pricing"}}
"
S
Sage Investigator
Re-verification (2026-06-16, commit 4281b987):
Bug confirmed NOT reproducible at HEAD.The June 14 merged report about Montessori framework is addressed by PR #2555 (merged commit 60ea8ad5, "fix(onboarding): alias-aware create-path framework validation"). The fix makes framework validation alias-aware across all paths:
- validate_framework_pack_id_and_level()now resolves aliases the same way asget_learning_standards(viaFrameworkPackService.get_pack_resolved())
- Montessori is properly seeded with canonical ID org.sage3c.montessori-amiand aliases["montessori", "montessori_ami_ams"]
- Both create and edit paths persist the canonical pair, not the raw alias/display name
- Agent contract enforces validation on both preview and confirm steps
The June 14 report ("Montessori isn't available as a selectable curriculum framework") matches the exact failure mode the PR fixed. The report was likely filed before/during production deployment of the fix.
Verified non-reproducible at commit 4281b987; confirmed fixed by #2555.
S
Sage Investigator
Montessori issue resolved by PR #2555 (merged 2026-06-14)
The new report merged into this post today (Montessori framework unavailability during student setup) is the exact issue fixed by PR #2555 (
fix(onboarding): alias-aware create-path framework validation
), which was merged earlier today before the Canny report arrived.Root cause was:
validate_framework_pack_id_and_level
did an exact alias-blind pack_id
match, while get_learning_standards
resolves aliases via FrameworkPackService
. The LLM would drift to alias slugs (e.g., montessori
, ccss
, ib-myp
) and the validator would reject them. PR #2555 makes the validator alias-aware.Status remains
complete
— both the original FEATURE_REQUIRED error (fixed by student auth migration) and the new Montessori alias issue (fixed by PR #2555) are resolved at HEAD (commit 614ce63e).S
Sage Investigator
Investigation (2026-06-14, commit 079cc08d): Montessori framework alias bug — NEW issue, distinct from original
A new report was merged into this post today. The
original bug
(raw FEATURE_REQUIRED JSON error) was correctly fixed and verified on 2026-06-02. The new bug
is different:Symptom:
Parent cannot create student with Montessori curriculum via chat. AI says "Montessori isn't available as a selectable curriculum framework."Root cause:
Validation contract mismatch between two code paths:- get_learning_standards()→FrameworkPackService.get_pack_resolved()resolves aliases (e.g., "montessori" →org.sage3c.montessori-ami) ✅
- validate_framework_pack_id_and_level()inframework_validation.pydoesexact, alias-blindmatching ❌
When the LLM uses the alias "montessori" in the confirm call (instead of the canonical
org.sage3c.montessori-ami
), the validator rejects it. This affects Montessori, Common Core, IB MYP, and any framework with registered aliases.The Montessori pack IS defined:
backend/learning/framework_packs/montessori_ami.json
with aliases ["montessori", "montessori_ami_ams"]
.Fix PR:
#2555 (OPEN) — https://github.com/momentiq-ai/sage3c/pull/2555Makes
validate_framework_pack_id_and_level()
alias-aware using FrameworkPackService.get_pack_resolved()
.Action needed:
Status should be changed from "complete" back to "in progress" (requires Canny admin — investigator bot lacks admin privileges for status changes).S
Sage Investigator
New bug report merged (2026-06-14): Montessori curriculum unavailability
A new report was auto-merged into this completed post today. The new report describes a
different
issue from the original (raw JSON error when adding student):> Parent trying to set up a student with Montessori curriculum: "Montessori isn't available as a selectable curriculum framework in the system right now, so I couldn't finish creating Zach's login with that setting."
Investigation findings (commit 5e8d9949):
- The Montessori framework pack file exists in the codebase: backend/learning/framework_packs/montessori_ami.json
- Pack ID: org.sage3c.montessori-ami, with aliases["montessori", "montessori_ami_ams"]
- The resolve_pack_referencefunction atframework_pack_service.py:257-293resolves aliases correctly — searching "montessori" should match via alias scan
- The load_packfunction atframework_pack_service.py:141-218setsenabled: Trueby default
- The k8s init container (infra/k8s/charts/sage3c/templates/backend-deployment.yaml:68) runspython -m learning.seed_kcson every deployment, which callsseed_framework_packs()loading ALL JSON files from theframework_packs/directory
Root cause hypothesis (medium confidence):
The framework pack exists in code and
should
be loaded on every deployment. The most likely cause is a production seeding failure
— if any pack loaded before Montessori (alphabetically: CBSE, Cambridge, CCSS, IB packs) fails validation, the seed_framework_packs
loop crashes and subsequent packs including Montessori are never loaded. This cannot be verified without production init container logs.Affected files:
- backend/learning/seed_kcs.py:138-178(seed loop — no error isolation per pack)
- backend/learning/framework_pack_service.py:141-218(load_pack)
- backend/learning/framework_packs/montessori_ami.json(pack definition)
Recommendation:
Check production init container logs for seeding errors. If packs are failing, the seed_framework_packs
function needs per-pack error isolation (try/except around each pack load, log and continue) to prevent one bad pack from blocking all subsequent packs.Re-opening this post as "under review" due to the new unresolved report.
Autopilot
Merged in a post:
Account & Settings — User submission
P
Parent 019cb733-d23
Category:
Account & SettingsType:
User submissionUser role:
parentUser feedback:
trying to setup setup student:
I hit a snag: “Montessori” isn’t available as a selectable curriculum framework in the system right now, so I couldn’t finish creating Zach’s login with that setting.
P
Patrick Jean
updated the status to
complete
Verified non-reproducible at commit 5638f435; closing as fixed. The raw JSON error when adding a student was resolved by commit 5a3864fe (cycle 307.4 — student auth migration infrastructure, merged April 2026). The fix added 402 error handling in web/lib/parentApi.ts that catches FEATURE_REQUIRED responses and displays a user-friendly "Upgrade required" message. PR #2317 (which carried an enhanced version) has been closed as superseded.
S
Sage Investigator
Re-verification (2026-06-02, commit 5638f435, local session)
Bug still present at HEAD, though
mitigated by frontend error handling
. Open fix PR #2317 exists but has not been merged.Root cause confirmed:
- auth.py:195-213raisesHTTPException(402)with raw JSON dict (nomessagefield)
- Frontend layers (parentApi.ts:127-140,parentClient.ts:28-42,useParentQueryHooks.ts:54-74) intercept 402 and show "Upgrade required" — this is defense-in-depth, not a proper fix
- If frontend handling is bypassed (e.g., new API client, refactor), raw JSON leaks to users
Action needed:
Merge PR #2317 to add backend message
field as the primary fix.S
Sage Investigator
Re-verification (2026-06-02, commit 5638f435, local session)
Bug confirmed still present at HEAD. Open fix PR #2317 exists but has not been merged.Root cause confirmed (unchanged):
- auth.py:196-213raisesHTTPException(402)with a raw JSON dict (FEATURE_REQUIRED/UPGRADE_REQUIRED). The frontend chat SSE path displayserror.messagedirectly to the user, showing the raw JSON instead of a friendly error message.
S
Sage Investigator
Re-verification (2026-06-02, commit 5638f435, local session)
Bug confirmed still present at HEAD. Open fix PR #2317 exists but has not been merged.
Root cause confirmed (unchanged):
- auth.py:205-213— raisesHTTPException(402)with raw JSON dict (FEATURE_REQUIREDcode)
- parentApi.ts:126-145handles 402 correctly, buterrors.ts(extractErrorMessage) does NOT handle the structured format — other error paths display raw JSON to users
Action needed:
Merge PR #2317 to add user-friendly error formatting.I
Investigator Bot
Re-verification (2026-06-01, commit 5638f435, local session)
Bug confirmed still present at HEAD. Open fix PR #2317 exists but has not been merged.
Root cause:
Backend auth.py:195-213
raises HTTPException(402)
with raw JSON dict. Frontend useParentChat.ts
does not intercept 402 responses — they pass through to @ai-sdk/react
's useBaseChat
, which displays the raw JSON to the user. The parentClient.ts
error middleware handles 402 gracefully, but the chat hook uses a different API path that bypasses it.Fix:
PR #2317 adds a human-readable message
field to the 402 response, adds 402 interception in useParentChat.ts
, and adds a safety-net JSON parser in ParentChatContainer.tsx
. Awaiting merge.Status:
No action needed beyond merging PR #2317.Load More
→