All releases

App release

LearnHouse 1.3.3

App1.3.3

6 features34 fixes8 other

2FA, Students Analytics

This release includes 4 database migration(s). Back up your database before upgrading.

  • b8c9d0e1f2a3_add_user_audit_event.py
  • e9f0a1b2c3d4_add_organization_plan_history.py
  • t6u7v8w9x0y1_add_user_mfa_tables.py
  • u9v8w7x6y5z4_add_user_activity_day.py

Features

  • feat(auth): 2FA, magic-link login, per-org auth policy, session isolation & 2FA reset36c6502c
  • feat(billing): active-user tracking and overage billing77c210ed
  • feat(users): integrate student analytics into Users tab (per-row Analytics button + compare); drop separate tab; fix modal spacing31f53151
  • feat(audit): gate student analytics behind Pro plan, not Enterprisef6d7a8de
  • feat(users): per-student audit & analyticsda31eea3
  • feat(api): email users when they join an organizationc6d417c2
  • Merge pull request #972 from learnhouse/feat/2fa-passkeys1ff71127

Fixes

  • fix(editor): scale embed frame height with its container708a3e14
  • fix(deps): update all non-major dependencies440080b9
  • fix(deps): update dependency html2canvas-pro to v228ae73b6
  • fix(transfer): keep S3 walk roots slash-normalised when base path ends in /eed9bd04
  • fix: normalize walk_directory paths to POSIX separators on Windowsa69a191b
  • fix: stop startup, email and list-render failures from cascading4080d4ca
  • fix(web): retrying a partial AI-task save no longer duplicates saved tasks00a02984
  • fix(web): stop losing autosaved answers and align grade previews with the server2e5a6e7f
  • fix(assignments): reconcile grades and certificates when tasks or answers change4edad97c
  • fix(assignments): cap AI tasks, reject negative max grade, block token file access, dedupe submit events3d1cc921
  • fix(api): admin-seat limit allows paid-plan overage (only free is capped)8298adcf
  • fix(api): admin-seat check 403'd every SaaS org — resolve limit from plan, not resolve_featured4ec421d
  • fix(deps): pin dependency regex to v2026.1.157b70e745
  • fix(migration): base user_audit_event on prod head r5s6t7u8v9w0, not the orphan a2b3 branch00170bc7
  • fix(web): use nice-shadow, not a border, on the grading-type cards617828a2
  • fix(web): always close the confirmation modal once the action settlesc07d1084
  • fix(security): run the content access check on the canonical resolved path399ef01e
  • fix(plans): correct SaaS plan limits to 200/500 members, 2000 Pro creditsca0ae9cc
  • fix(api): don't block an instructor from saving their own quiz answers48ce5866
  • fix(web): show the org logo for standard and pro, not just enterpriseab694c6c
  • fix(security): harden local content path handling687206b6
  • fix(api): point organization emails at the org, not the platform pickere646e2ac
  • fix(web): show progress while an assignment submits5c4bd431
  • fix(web): stop truncating gzipped SCORM assets and cache them6f3d02ed
  • fix(web): unify certificate PDF and unblock joining from a signed-in sessiona31ca766
  • fix(web): make shared links absoluteef16ca3d
  • fix(rbac): scope "Users Only" resources to their own organizationdffce3cd
  • fix(invites): key invites on the normalised address and count only pending onesbd737c69
  • fix(certifications): stop deleting awarded certificates with the templatefc6e39e3
  • fix(auth): forward the client IP through the auth proxy, and log refresh outcomesc42b1121
  • fix(web): forward client IP, pass redirects through, resolve roles after SSO3ca647e0
  • fix(auth): join the organization on Google sign-upe6f1e763
  • fix(assignments): learner UX gaps and assignment integrity issuesa04102ae
  • fix(auth): stop unexpected sign-outs from transient refresh failuresc652c159
  • Merge pull request #976 from marceli1404/fix/walk-directory-path-separators10c526dd
  • Merge pull request #978 from learnhouse/renovate/all-minor-patch6dc6dfe0
  • Merge pull request #981 from learnhouse/renovate/html2canvas-pro-2.x7e05755a
  • Merge pull request #974 from learnhouse/fix/assignments-sweep-hardeningc475d394
  • Merge pull request #977 from learnhouse/renovate/pin-dependencies2da76467
  • Merge pull request #968 from learnhouse/fix/saas-plan-member-limits40b47287
  • Merge pull request #967 from learnhouse/fix/instructor-quiz-autosave-blocked857681fe
  • Merge pull request #970 from learnhouse/fix/grading-cards-nice-shadow045d47d2
  • Merge pull request #969 from learnhouse/fix/content-idor-and-modal-closee0322b06
  • Merge pull request #965 from learnhouse/fix/scorm-truncation-submit-ux-email-links755ffca4
  • Merge pull request #966 from learnhouse/fix/org-logo-standard-proe8c6b44d
  • Merge pull request #964 from learnhouse/fix/shareable-links-join-emailc832f214
  • Merge pull request #963 from learnhouse/fix/cross-org-users-only0e42e2cf
  • Merge pull request #956 from learnhouse/fix/learner-ux-feedbackd7332406
  • Merge pull request #961 from learnhouse/fix/auth-client-ip-and-telemetryab18c820
  • Merge pull request #957 from learnhouse/fix/oauth-org-membership8db734c0
  • Merge pull request #958 from learnhouse/fix/session-stabilityfe59ef09
  • Merge pull request #959 from learnhouse/fix/certification-data-lossc3babd2b
  • Merge pull request #960 from learnhouse/fix/invite-lifecycle14574fac
  • Merge pull request #955 from learnhouse/fix/session-unexpected-logoutsfc113110

Performance

  • perf(api): bake bytecode, split docker layers for faster cold startfd1ffb46
  • perf(api): stop repeating the same work inside one assignment submitcaae3a08
  • Merge pull request #986 from learnhouse/perf/api-cold-startc5b8a55e

Refactoring

  • refactor(usage): align member metering with plan seats307bc3a3

Maintenance

  • chore(deps): regenerate apps/web/bun.lock56738fa1
  • chore(deps): regenerate apps/web/bun.locke34abc08
  • chore(deps): update actions/cache action to v62f718e64
  • chore(deps): update astral-sh/setup-uv action to v9ffb78d08
  • chore(deps): update actions/setup-python action to v75dc4de3d
  • Merge pull request #984 from learnhouse/renovate/actions-cache-6.x1a2ad7d6
  • Merge pull request #979 from learnhouse/renovate/actions-setup-python-7.x1d4336e9
  • Merge pull request #980 from learnhouse/renovate/astral-sh-setup-uv-9.x5694e6ff
npx learnhouse update --to 1.3.3