Conversation
Avoid failure on empty/missing cache
…ema-4.26.0 chore(deps): bump jsonschema from 4.25.1 to 4.26.0
…n/babel-42adf62c6e chore(deps-dev): bump the babel group with 4 updates
…ng-26.0 chore(deps): bump packaging from 25.0 to 26.0
…gs with alignment dir
…hildren by calling serializeChildren directly
[Remove Vuetify from Studio] Convert 'Forgot password' unit tests to Vue Testing Library
Add autofocus prop to TipTapEditor, threaded through to the TipTap Editor constructor. AssessmentItemEditor sets shouldAutofocusQuestion when it mounts with an empty question (i.e. a newly created one), which passes autofocus=true to the TipTapEditor so the ProseMirror view receives focus as soon as it initializes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Monkey-patch mathlive's hardcoded English screen reader announcements to support localization for all Studio-supported locales. This is a temporary workaround until the upstream fix lands (arnog/mathlive#2948). - Add MathLiveA11yStrings.js with translatable strings for all known mathlive announcement patterns (prefixes and relation names) - Add mathLiveA11yLocalize.js with regex-based post-processing to replace English patterns with translated equivalents - Add useMathLiveA11yAnnounce.js composable using MutationObserver to intercept and localize aria-live region updates - Wire composable into FormulasMenu.vue alongside existing locale setup - Add comprehensive unit tests for localization logic and observer behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use lodash/camelCase instead of custom camelCase implementation - Pre-compute relation name to translator key map for hot-path efficiency - Use Set for deduplication instead of O(n²) indexOf filter - Fix interceptor cleanup to properly restore textContent descriptor Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show version history in the channel publish side panel
…n/ajv-8.18.0 chore(deps): bump ajv from 8.17.1 to 8.18.0
Ignore topics since they will not be present in the CSV for Khan channels
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 5 to 6.0.3. - [Release notes](https://github.com/pnpm/action-setup/releases) - [Commits](pnpm/action-setup@v5...v6.0.3) --- updated-dependencies: - dependency-name: pnpm/action-setup dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.11.1 to 4.12.0. - [Release notes](https://github.com/pytest-dev/pytest-django/releases) - [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst) - [Commits](pytest-dev/pytest-django@v4.11.1...v4.12.0) --- updated-dependencies: - dependency-name: pytest-django dependency-version: 4.12.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…ons/pnpm/action-setup-6.0.3 chore(deps): bump pnpm/action-setup from 5 to 6.0.3
…jango-4.12.0 chore(deps-dev): bump pytest-django from 4.11.1 to 4.12.0
Add 'opened' to pull-request-target trigger types
Fill the deploy-migrate command with ESoCC migrations
Hotfixes into unstable
unstable to hotfixes, Q1 major release
Perseus's simple-markdown (kolibri-perseus-viewer) treats `__text__` as `<u>`, while marked (CommonMark) treats it as `<strong>`. The serializer now emits `__text__` for the underline mark, and `preprocessMarkdown` rewrites `__text__` to `<u>text</u>` before marked sees it so the round-trip back into TipTap preserves underline instead of converting it to bold. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix(texteditor): align markdown output with Perseus grammar
… yet, filter out this option
Since pre-post-test creation and editing is not implemented in studio…
Pasted <img> tags survived into the editor doc and the saved markdown. Remote image references then blocked channel publish (#5895). Adds a single sync transformer (transformPastedHTML) wired into both native paste (via editorProps.transformPastedHTML) and the toolbar Paste button. Existing Word/Office sanitization is preserved and now applies to both paths — previously only the toolbar ran it. Fixes #5895
Strip <img> tags from pasted HTML in TipTap editor
Update editor toolbar and mobile toolbar to remove unsupported buttons
Comment on lines
+7
to
+12
| name: Call shared workflow | ||
| uses: learningequality/.github/.github/workflows/contributor-pr-reply.yml@main | ||
| secrets: | ||
| LE_BOT_APP_ID: ${{ secrets.LE_BOT_APP_ID }} | ||
| LE_BOT_PRIVATE_KEY: ${{ secrets.LE_BOT_PRIVATE_KEY }} | ||
| SLACK_COMMUNITY_NOTIFICATIONS_WEBHOOK_URL: ${{ secrets.SLACK_COMMUNITY_NOTIFICATIONS_WEBHOOK_URL }} |
Comment on lines
+7
to
+11
| name: Call shared workflow | ||
| uses: learningequality/.github/.github/workflows/pull-request-target.yml@main | ||
| secrets: | ||
| LE_BOT_APP_ID: ${{ secrets.LE_BOT_APP_ID }} | ||
| LE_BOT_PRIVATE_KEY: ${{ secrets.LE_BOT_PRIVATE_KEY }} |
Comment on lines
+8
to
+87
| name: Download translations and update files | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v6 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@v7 | ||
| with: | ||
| python-version: '3.10' | ||
| activate-environment: "true" | ||
| enable-cache: "true" | ||
|
|
||
| - name: Install Python dependencies | ||
| run: uv pip sync requirements.txt | ||
|
|
||
| - name: Use pnpm | ||
| uses: pnpm/action-setup@v6.0.3 | ||
|
|
||
| - name: Use Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version: '20.x' | ||
| cache: 'pnpm' | ||
|
|
||
| - name: Setup Java for crowdin-cli | ||
| uses: actions/setup-java@v5 | ||
| with: | ||
| distribution: 'temurin' | ||
| java-version: '17' | ||
|
|
||
| - name: Install gettext | ||
| run: sudo apt-get update && sudo apt-get install -y gettext | ||
|
|
||
| - name: Install JavaScript dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Download translations | ||
| env: | ||
| CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_API_KEY }} | ||
| run: make i18n-download | ||
|
|
||
| - name: Generate App Token | ||
| id: generate-token | ||
| uses: actions/create-github-app-token@v3 | ||
| with: | ||
| app-id: ${{ secrets.LE_BOT_APP_ID }} | ||
| private-key: ${{ secrets.LE_BOT_PRIVATE_KEY }} | ||
|
|
||
| - name: Create Pull Request | ||
| uses: peter-evans/create-pull-request@v8 | ||
| with: | ||
| token: ${{ steps.generate-token.outputs.token }} | ||
| commit-message: | | ||
| Update translations from Crowdin | ||
|
|
||
| This includes: | ||
| - Updated translation files (.po and .json) | ||
| - Compiled Django messages (.mo files) | ||
| - Updated frontend i18n files | ||
| branch: i18n-update-${{ github.ref_name }} | ||
| base: ${{ github.ref_name }} | ||
| delete-branch: true | ||
| title: 'Update translations from Crowdin for ${{ github.ref_name }}' | ||
| body: | | ||
| ## Summary of changes | ||
|
|
||
| This PR updates translations downloaded from Crowdin. | ||
|
|
||
| ### Changes included: | ||
| - Updated translation files (`.po` and `.json`) | ||
| - Compiled Django messages (`.mo` files) | ||
| - Updated frontend i18n files | ||
|
|
||
| ### Testing checklist: | ||
| - [ ] Verify that translations are not obviously empty or untranslated in the message files | ||
| - [ ] Switch to a few different languages and navigate the app | ||
| labels: | | ||
| i18n | ||
| TAG: user strings |
Comment on lines
+8
to
+50
| name: Extract and upload strings to Crowdin | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v6 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@v7 | ||
| with: | ||
| python-version: '3.10' | ||
| activate-environment: "true" | ||
| enable-cache: "true" | ||
|
|
||
| - name: Install Python dependencies | ||
| run: uv pip sync requirements.txt | ||
|
|
||
| - name: Use pnpm | ||
| uses: pnpm/action-setup@v6.0.3 | ||
|
|
||
| - name: Use Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version: '20.x' | ||
| cache: 'pnpm' | ||
|
|
||
| - name: Setup Java for crowdin-cli | ||
| uses: actions/setup-java@v5 | ||
| with: | ||
| distribution: 'temurin' | ||
| java-version: '17' | ||
|
|
||
| - name: Install gettext | ||
| run: sudo apt-get update && sudo apt-get install -y gettext | ||
|
|
||
| - name: Install JavaScript dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Extract and upload strings to Crowdin | ||
| env: | ||
| CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_API_KEY }} | ||
| run: | | ||
| make i18n-upload | ||
| make i18n-pretranslate-approve-all |
Addresses CodeQL "Information exposure through an exception" findings in views/subscription.py and viewsets/channel.py. Logs the traceback server side via logger.exception so Sentry still captures it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Stop exposing exception details in HTTP responses
marcellamaki
approved these changes
May 13, 2026
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.
/contentcurationdraft_channelsfeature flagChannel.DoesNotExistinremove_selfChannelVersion.sizefield toFloatFieldminReleaseAgeto reduce supply-chain risklibraryfield to v1 and v2 public channel APIs, gate v1ChannelVersionlookupTypeErrorinLanguageDropdownin multiple-select modeNoneversion in_get_version_notescrowdin-clivia sharedkolibri-build/kolibri-i18npackages@babel/preset-env/content/storageunrs-resolverbuild used by JestChannelVersionduring draft publishversion=0inChannelMetadatafor draft publishesexpiresheader from GCS response.poand.jsonfromend-of-file-fixerhookopenedtopull-request-targettrigger typesdeploy-migratecommand with ESoCC migrations<img>tags from pasted HTML in TipTap editor