Skip to content

Hotfixes into unstable - #6184

Merged
rtibbles merged 16 commits into
learningequality:unstablefrom
rtibbles:hotfixestounstable
Sep 25, 2026
Merged

rtibbles merged 16 commits into
learningequality:unstablefrom
rtibbles:hotfixestounstable

Conversation

@rtibbles

Copy link
Copy Markdown
Member

Summary

Merge down hotfixes into unstable

Conflicts:

contentcuration/contentcuration/frontend/channelList/views/ChannelListIndex.vue

Kept unstable's StudioNavigation; ported the signed-out tabs from hotfixes into navigationTabs.

References

Conflicting change: #6097

Reviewer guidance

  1. Signed out, open /channels/#/community-library — the nav shows only Kolibri Library and Community Library, and the page stays on Community Library.
  2. Signed in, open /channels/#/my-channels — the nav shows all seven tabs, including My organizations and Collections.
Signed out
Signed-out Community Library with two nav tabs

axe (AA): one serious color-contrast violation on the intro link button; none in the nav.

AI usage

Used Claude Code to resolve the conflict and draft the PR description. Verified with the channelList Jest tests, pre-commit, and manual QA in a browser.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E4JCqHREMps4bpLoU73BtS

marcellamaki and others added 16 commits July 28, 2026 18:54
Some ChannelVersion rows were backfilled with duplicate license IDs by
a past one-off migration command, causing repeated license chips/names
to show in the community library submission and review UIs. Dedupe
defensively in the two viewset read paths that serve this field,
rather than backfilling the affected rows.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…table

Navigating back to the admin Channels table (e.g. after opening a
channel and using the browser back button) reset the status filter
even though it was correctly restored from the URL. An immediate
watcher unconditionally overwrote it to the first available option on
every mount instead of only defaulting when the filter is actually
unset. Since the status filter is derived from the current channel
type's options, a status no longer valid for a new type already reads
back as unset, so a single "is it set" check covers both the
type-change reset and back-navigation preservation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The fixed width clipped longer status labels. Let it size to content.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…laneous-fixes

Community Library miscelaneous fixes
…-version-included-licenses-dedup

Dedupe ChannelVersion.included_licenses in API responses
…ication-email

Add ability to send a notification email on review of community libra…
A version whose Community Library submission is live is now readable by
anyone. Every other version stays scoped to the channel's editors,
viewers and admins, so private and Kolibri Library channels are
unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3rKRVLMe9qtMVMHG1N8N9
… users

Both library tabs now render without an account, and the contribute
banner is hidden for visitors who have no channels to submit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3rKRVLMe9qtMVMHG1N8N9
Show the Community Library to signed-out visitors
`get_effective_disk_space()` was only read for display, so uploads and
publishes were still checked against the admin-granted `disk_space`
alone and a subscriber hit a 412 on space they had paid for.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xxy9NqytrugNq59yquMRBA
…torage_quota

Count subscription storage towards the upload quota
Let PasswordResetConfirmView.dispatch gate the form so the token is
validated from the session, and post the new password to the
set-password URL instead of the emailed token.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EZoTHtTrhSDCJsx4PA2AXu
Use Django's built-in password reset confirm flow
@rtibbles
rtibbles marked this pull request as ready for review September 25, 2026 01:13
@rtibbles
rtibbles requested review from a team and marcellamaki September 25, 2026 01:13
@rtibbles
rtibbles merged commit 3bdac30 into learningequality:unstable Sep 25, 2026
56 checks passed
@rtibbles
rtibbles deleted the hotfixestounstable branch September 25, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants