Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
223 commits
Select commit Hold shift + click to select a range
d0f6a17
increasing coverage of generate.js
varruunnn Feb 7, 2026
2cfc5a9
fixed test
varruunnn Feb 7, 2026
5dac99d
chore: remove debug console statements from js/palette.js
subhraneel2005 Feb 9, 2026
271dca0
Remove debug console.log from toolbar play handler
DhyaniKavya Feb 10, 2026
09b937c
chore: fix Prettier formatting for CI/CD pipeline
DhyaniKavya Feb 10, 2026
f4659ef
Merge branch 'master' into fix/remove-debug-console-log
DhyaniKavya Feb 10, 2026
45559c5
Merge pull request #5652 from DhyaniKavya/fix/remove-debug-console-log
omsuneri Feb 10, 2026
5f2d47f
Merge pull request #5644 from subhraneel2005/master
omsuneri Feb 10, 2026
e4fbcf1
Fix: add localized tooltips for Close and Minimize buttons (#5196)
shuvro-git Feb 10, 2026
eb5dcd3
[Performance/Memory] Fix event listener leaks in Trash View and Block…
7se7en72025 Feb 11, 2026
4e2993f
fix(painter): implement SVG export for bezier curves (#5568)
kartikktripathi Feb 11, 2026
1b6b7bc
fix(svg): replace fragile string-split block SVG parsing with DOM par…
kartikktripathi Feb 11, 2026
f979aa7
Use strict equality for safe comparisons without altering null semant…
kartikktripathi Feb 11, 2026
ddb815a
fix: resolve initialization crashes and loading screen issues (#5642)
Ashutoshx7 Feb 11, 2026
517b91f
refactor: remove unused test utility functions from synthutils.js (#5…
7se7en72025 Feb 11, 2026
05a98de
docs: add documentation for rationalSum helper (#5603)
mahesh-09-12 Feb 11, 2026
26be0e3
Synchronize Stop Button State with Space Key Playback (#5512)
zealot-zew Feb 11, 2026
943f215
Use named event handlers for cleanup (#5601)
7se7en72025 Feb 11, 2026
39022d1
Enhance AST2BlockList error test assertions
7se7en72025 Feb 12, 2026
98a9e58
refactor: Remove debug console.log statements from loader
7se7en72025 Feb 12, 2026
013fe56
test: add tuner and sample preload edge case coverage for synthutils
Feb 13, 2026
6077416
fix: remove debug console.log from KeySignatureEnv initialization
DhyaniKavya Feb 13, 2026
98e5d76
Merge branch 'master' into fix/remove-activity-debug-console-log
DhyaniKavya Feb 13, 2026
d17b853
chore: trigger CI re-run
DhyaniKavya Feb 13, 2026
2560ed1
style: fix Prettier formatting in js/activity.js
DhyaniKavya Feb 13, 2026
987cd6a
test: add comprehensive unit tests for p5-adapter initialization logic
Feb 13, 2026
fe56dc8
Merge pull request #5694 from badassscoder/test/p5-adapter-coverage
omsuneri Feb 13, 2026
d641f41
Merge pull request #5692 from DhyaniKavya/fix/remove-activity-debug-c…
omsuneri Feb 13, 2026
6ab5a6a
Merge pull request #5687 from badassscoder/test/synthutils-basic-cove…
omsuneri Feb 13, 2026
66ec2db
Merge pull request #5663 from 7se7en72025/test/improve-error-message-…
omsuneri Feb 13, 2026
99ddcc4
test: add extended unit tests for Turtles class
kh-ub-ayb Feb 13, 2026
7991846
added the arpeggio test
lakshay776 Feb 13, 2026
2af7a57
test: add extended unit tests for Boundary class
kh-ub-ayb Feb 13, 2026
4dc4d8d
test added for the pitchdrummatrix
lakshay776 Feb 13, 2026
a8105a0
test: add extended unit tests for Trash class
kh-ub-ayb Feb 13, 2026
3230405
pitchstircase widget tests added
lakshay776 Feb 13, 2026
0ff617f
test: add extended unit tests for turtle-painter
kh-ub-ayb Feb 13, 2026
b57b7ad
added the unit test for phasemaker
lakshay776 Feb 13, 2026
a5486a1
test: add extended unit tests for Turtle-Singer class
kh-ub-ayb Feb 13, 2026
b20a3aa
added the unit tests for timbre widget
lakshay776 Feb 13, 2026
d9fdba2
fix: route effects in serial chain to prevent audio signal duplicatio…
Ady0333 Feb 13, 2026
119fef8
Fix: Remove unused prefetch and reduce size for loading-animation-ja …
farhan-momin Feb 13, 2026
7281203
Update CONTRIBUTING.md (#5718)
walterbender Feb 13, 2026
72d1f82
docs: production deployments are manual clarification (#5657)
Shubhashish-Chakraborty Feb 13, 2026
ed89035
Fix invalid CSS display value for beginner mode button (#5638)
DhyaniKavya Feb 13, 2026
d8f39b8
refactor: Extract camera functionality into CameraManager module (#5662)
7se7en72025 Feb 13, 2026
6e31ce3
Use audio clock for precise note scheduling (#5419)
vyagh Feb 13, 2026
dacbb46
test: add extended unit tests for MUSICALMODES in musicutils (#5683)
parthdagia05 Feb 13, 2026
d6de00c
Fix hertz block exporting incorrect pitch in Lilypond (#5620)
kartikktripathi Feb 13, 2026
74567cf
feat: Enable drag-and-drop from Search Bar results (#5678)
zealot-zew Feb 13, 2026
310da98
Performance Optimizations for Block Operations (#5456)
Ashutoshx7 Feb 13, 2026
de8ad52
fix: Add comprehensive null checks in hideMsgs to prevent initializat…
7se7en72025 Feb 13, 2026
52126f0
Add test coverage for WidgetBlocks.js (#5562)
parthdagia05 Feb 13, 2026
52220a2
test: add unit tests for utils format helper (#5582)
parthdagia05 Feb 13, 2026
23cc3ae
fix(resize): prevent crashes on hidden/zero viewport states (#5602) (…
Ashutoshx7 Feb 13, 2026
b9f8569
Encapsulate layout update rules inside Block (address FIXME in blocks…
kartikktripathi Feb 13, 2026
247d4d1
fix(audio): route effects serially instead of in parallel in _perform…
Ady0333 Feb 13, 2026
1e11bf2
Fix audio buzzing and instability by using safe WebAudio volume sched…
kartikktripathi Feb 13, 2026
0624d3d
fix: address 4 critical bugs in core utilities and singer logic (#5679)
Ashutoshx7 Feb 14, 2026
5a5b1f4
chore: remove obsolete Flash fallback directory (#5715)
vyagh Feb 14, 2026
bcb2576
chore(deps): bump qs from 6.14.1 to 6.14.2
dependabot[bot] Feb 14, 2026
b472296
perf: optimize blockList iteration with for...of instead of for...in …
Ashutoshx7 Feb 14, 2026
b25a6d2
perf: Cache getNoteFromInterval results in temperamentChanged (#5238)
Ashutoshx7 Feb 14, 2026
04773be
fix: add tooltip and aria-label to guide tour navigation arrows (#5723)
mahesh-09-12 Feb 14, 2026
06b96ff
chore: remove dead meSpeak library and assets (#5417)
vyagh Feb 14, 2026
fd761de
perf: add willReadFrequently to read-heavy canvas contexts (#5253)
vyagh Feb 14, 2026
101217d
test: add edge case coverage for MathUtility operations (#5704)
parthdagia05 Feb 14, 2026
f2cb791
perf: Cache DOM element references to reduce repeated lookups (#5457)
Ashutoshx7 Feb 14, 2026
f73c69a
perf: Cache rationalToFraction results to avoid duplicate calls (#5239)
Ashutoshx7 Feb 14, 2026
6abb24e
cache getTurtleCount() in loops to avoid repeated method calls (#5455)
Ashutoshx7 Feb 14, 2026
cc3bc70
refactor doSearch method initialization (#5676)
farhan-momin Feb 14, 2026
d5a3120
Add install button for PWA using deferredPrompt (#5406)
Kunal241207 Feb 14, 2026
201c502
feat(a11y): Implement keyboard navigation for Main Toolbar and Aux Na…
zealot-zew Feb 14, 2026
87360c6
fix(action): correctly detect hasReturn and hasArgs metadata for pale…
vanshika2720 Feb 14, 2026
bf6d9a9
convert synchronous XMLHttpRequest to async fetch API (#5454)
Ashutoshx7 Feb 14, 2026
b71ada4
check for undefined (#5733)
walterbender Feb 14, 2026
0019021
restore missing methods (#5734)
walterbender Feb 14, 2026
21e7353
Fix stale strong beats persisting in beatList across meter changes (#…
Ady0333 Feb 14, 2026
3ace5e0
Merge pull request #5725 from sugarlabs/dependabot/npm_and_yarn/qs-6.…
omsuneri Feb 15, 2026
2d8ad29
chore: remove legacy webL10n library and 1.2MB of dead assets (#5416)
vyagh Feb 15, 2026
d9697f8
ci: add cypress E2E workflow (#5745)
Jetshree Feb 15, 2026
c78b31f
3.7.1 release (#5746)
walterbender Feb 15, 2026
75bb85d
renamed actions for clarity (#5747)
walterbender Feb 15, 2026
3bf0654
chore: remove debug console statements from js/EnsembleBlocks.js
subhraneel2005 Feb 15, 2026
b8ec8cf
fix: eslint formatting
subhraneel2005 Feb 15, 2026
ab8f8df
test: add unit tests for statistics.js with 100% coverage (#4972)
Inuth0603 Feb 15, 2026
72a0438
Implement the new working fix (#5354)
zealot-zew Feb 15, 2026
fa74789
fix(sw): tighten service-worker caching; precache activities.css (#5744)
Chaitu7032 Feb 15, 2026
3e81a77
fix: Add input validation to BPMFactorBlock setter to prevent audio s…
7se7en72025 Feb 15, 2026
d957f14
fix: Cancel active audio voices on stop (Zombie Audio Fix) (#5742)
7se7en72025 Feb 15, 2026
1d68ed4
Harden JS editor console rendering and modernize Lilypond clipboard c…
Kunal241207 Feb 15, 2026
f7a9173
chore: remove debug console statements from jseditor widget (#5567)
abhnish Feb 15, 2026
599a999
feat(logic): complete dynamic MakeBlock types for tempo, volume, and …
vanshika2720 Feb 15, 2026
971a9c6
refactor(phrasemaker): extract pure utilities into PhraseMakerUtils m…
vanshika2720 Feb 15, 2026
bff5f55
fix: eliminate stop icon listener leak causing duplicate handler exec…
DhyaniKavya Feb 16, 2026
83e9713
chore: remove debug console statements from js/EnsembleBlocks.js
omsuneri Feb 16, 2026
66897d4
Merge pull request #5712 from lakshay776/issue-5135-timbre
omsuneri Feb 16, 2026
7c2bfe1
Merge pull request #5709 from lakshay776/issue-5135-phrasemaker
omsuneri Feb 16, 2026
3a282cf
Merge pull request #5710 from kh-ub-ayb/test/add-turtle-singer-extend…
omsuneri Feb 16, 2026
e227461
Merge pull request #5703 from kh-ub-ayb/test/add-turtle-painter-exten…
omsuneri Feb 16, 2026
257c17c
Merge pull request #5702 from kh-ub-ayb/test/add-trash-extended-tests
omsuneri Feb 16, 2026
8b3b896
Merge pull request #5705 from lakshay776/issue-5135-pitchstaircase
omsuneri Feb 16, 2026
6c8237c
Merge pull request #5700 from lakshay776/issue-5135-pitchdrummatrix
omsuneri Feb 16, 2026
8b5dcbf
Merge pull request #5699 from kh-ub-ayb/test/add-boundary-extended-tests
omsuneri Feb 16, 2026
133f360
Merge pull request #5697 from kh-ub-ayb/test/add-turtles-extended-tests
omsuneri Feb 16, 2026
db464a7
Merge pull request #5698 from lakshay776/issue-5135-arpeggio
omsuneri Feb 16, 2026
5a34c5b
Merge pull request #5589 from varruunnn/generatetest
omsuneri Feb 16, 2026
938a676
Fix Turtles Regression and Restore Failing Tests (#5760)
zealot-zew Feb 16, 2026
b7e73c2
Merge pull request #5754 from DhyaniKavya/fix/stop-icon-listener-leak
omsuneri Feb 16, 2026
e72e8f6
Fix Record canvas only, not entire screen (#4873)
Laxmi01345 Feb 16, 2026
0354dcf
refactor(phrasemaker): extract grid logic into PhraseMakerGrid module…
vanshika2720 Feb 16, 2026
3952eb0
Extract UI Logic into PhraseMakerUI Module (#5737)
vanshika2720 Feb 16, 2026
2d5b272
test: add extended unit tests for NOTESFLAT and NOTESSHARP (#5684)
parthdagia05 Feb 16, 2026
e4c1252
test: add unit tests for logoconstants default values and exports (#5…
parthdagia05 Feb 16, 2026
a439d40
Fix: preserve event listeners when toggling cents slider (#5569)
021nirav-blip Feb 16, 2026
7ce3cea
Fix infinite loop protection in PhraseMakerGrid.js (#5728)
Pankajyadav919 Feb 17, 2026
15f04dc
revert fa7478914da442e43204ef44972a585e02820266 (#5776)
walterbender Feb 17, 2026
84ee08c
Fix: npm dev/prod environment handling (#5696)
farhan-momin Feb 17, 2026
ed7a8d8
chore(deps): bump tar and electron-builder
dependabot[bot] Feb 18, 2026
914593d
Merge pull request #5777 from sugarlabs/dependabot/npm_and_yarn/multi…
omsuneri Feb 18, 2026
791d444
Improve macros.js test coverage and fixed module export in macros.js
stutijain2006 Feb 18, 2026
40ba65d
Revert "chore(deps): bump tar and electron-builder"
omsuneri Feb 18, 2026
70ed297
Merge pull request #5792 from sugarlabs/revert-5777-dependabot/npm_an…
omsuneri Feb 18, 2026
2265542
Merge branch 'master' of https://github.com/sugarlabs/musicblocks int…
stutijain2006 Feb 18, 2026
8e3fbee
Improve macros.js test coverage and fixed module export in macros.js
omsuneri Feb 19, 2026
3d012f1
test: add unit tests for PhraseMakerUtils widget
kh-ub-ayb Feb 19, 2026
458aab6
test: add unit tests for PhraseMakerGrid widget
kh-ub-ayb Feb 19, 2026
6800039
Merge pull request #5805 from kh-ub-ayb/test/add-phrasemaker-grid-tests
omsuneri Feb 19, 2026
d30008d
test: add unit tests for PhraseMakerUtils widget
omsuneri Feb 19, 2026
96f0aaa
test: add unit tests for PhraseMakerUI widget
kh-ub-ayb Feb 19, 2026
2cb20e2
test: add unit tests for widgetWindows widget
kh-ub-ayb Feb 19, 2026
22966fd
chore(deps-dev): bump systeminformation from 5.30.7 to 5.31.1
dependabot[bot] Feb 19, 2026
32e5b30
feat(accessibility): enable keyboard navigation for toolbar controls
DhyaniKavya Feb 19, 2026
71c4f40
feat(accessibility): removing duplicate blocks in index.html
DhyaniKavya Feb 19, 2026
3ec1591
Minimal fix: remove leftover debug logging from plugin evaluation
DhyaniKavya Feb 19, 2026
3d5ee54
test: add unit tests for PhraseMakerUI widget
omsuneri Feb 19, 2026
619bd06
Merge pull request #5821 from DhyaniKavya/fix/remove-plugin-eval-debu…
omsuneri Feb 19, 2026
32e1bbf
Merge pull request #5818 from sugarlabs/dependabot/npm_and_yarn/syste…
omsuneri Feb 19, 2026
895b769
Merge pull request #5816 from kh-ub-ayb/test/add-widget-windows-tests
omsuneri Feb 19, 2026
12f92a5
style: fix keyboard focus visibility for toolbar accessibility
DhyaniKavya Feb 20, 2026
c8c44ed
test: address PR feedback for test isolation and strict assertions
varruunnn Feb 20, 2026
f62c1c1
Merge branch 'sugarlabs:master' into testtempo
varruunnn Feb 20, 2026
a4df618
fix failing test:
varruunnn Feb 20, 2026
2f35db1
test: add unit tests for Oscilloscope widget
kh-ub-ayb Feb 20, 2026
4222fcc
test: add unit tests for HelpWidget
kh-ub-ayb Feb 20, 2026
8b8cd69
test: add unit tests for JSEditor widget
kh-ub-ayb Feb 20, 2026
a234436
chore: replace var with const/let across codebase (#5717)
vyagh Feb 20, 2026
1ded6cf
Add additional test cases for logo.js to improve coverage
severe77 Feb 21, 2026
4583b68
Fixed Scrollbar Placement
rashi-cse Feb 21, 2026
031ba60
Add AI guidelines section and minor changes
farhan-momin Feb 21, 2026
217b388
fix(toolbar): sync horizontal scroll icon state on mode switch (#5173)
SaaiAravindhRaja Feb 21, 2026
f5199e5
refactor(SaveInterface): extract duplicated strings to constants (#5190)
WillyEverGreen Feb 21, 2026
1d45d7d
Merge pull request #5849 from severe77/improve-logo-js-tests
omsuneri Feb 21, 2026
e5f6183
Merge pull request #5852 from farhan-momin/update-contributing.md
omsuneri Feb 21, 2026
1857f05
Merge pull request #5850 from rashi-cse/fix_scrollbar_placement
omsuneri Feb 21, 2026
f0b68ef
Merge pull request #5840 from kh-ub-ayb/test/add-jseditor-tests
omsuneri Feb 21, 2026
eda184a
Merge pull request #5836 from kh-ub-ayb/test/add-help-tests
omsuneri Feb 21, 2026
d330a2b
Merge pull request #5835 from kh-ub-ayb/test/add-oscilloscope-tests
omsuneri Feb 21, 2026
fc3ac97
Merge pull request #5823 from varruunnn/testtempo
omsuneri Feb 21, 2026
4bd5515
Merge pull request #5819 from DhyaniKavya/fix/toolbar-keyboard-access…
omsuneri Feb 21, 2026
d43387f
Improve test coverage for utils.js
stutijain2006 Feb 21, 2026
45eb847
test: add extended coverage for JSGenerate error handling and tree pr…
parthdagia05 Feb 21, 2026
dd58281
Files after running prettier
stutijain2006 Feb 21, 2026
36ac918
Chore/production build optimization (#5532)
vanshika2720 Feb 21, 2026
029f16d
Prettier on aiwidget.js
stutijain2006 Feb 21, 2026
134d99b
Remove manual reload message from language selector
anshukaushik4700 Feb 21, 2026
2fa3ce1
added already set message
anshukaushik4700 Feb 21, 2026
ce3449b
Merge pull request #5860 from stutijain2006/UtilsTest
omsuneri Feb 22, 2026
cd58f16
Merge pull request #5862 from anshukaushik4700/autoreload_on_lang_change
omsuneri Feb 22, 2026
5f57f36
fix: Export JSInterface to window object to fix ReferenceError (#5674)
vanshika2720 Feb 22, 2026
aec58f0
refactor: reduce reliance on implicit global state in Logo subsystem …
vanshika2720 Feb 22, 2026
91e0c31
Add extended unit tests for MusicBlocks.run behavior (#5539)
parthdagia05 Feb 22, 2026
03c528e
Improve palette.js test coverage (#5565)
severe77 Feb 22, 2026
26de911
docs: Enhance documentation for pie menu functions in piemenus.js (#5…
Siddharth-732 Feb 22, 2026
81829a6
fix(search): make entire search result row clickable to create block …
kartikktripathi Feb 22, 2026
5abf38d
Fix staccato/slur listener name collision on nested blocks (#5771)
Ady0333 Feb 22, 2026
812f37f
Performance Improvement: Oscilloscope Throttling (#5741)
vanshika2720 Feb 22, 2026
e6f0445
refactor(phrasemaker): extract audio playback logic into PhraseMakerA…
vanshika2720 Feb 22, 2026
d7ef119
Resolve Remaining +/- Issues in PieMenuNumber Blocks (#5758)
stutijain2006 Feb 22, 2026
6fa4eef
added the block highlight minimum time threshold (#5726)
lakshay776 Feb 22, 2026
6c175b3
Fix: remove black empty space in fullscreen mode (#5774) (#5775)
anshukaushik4700 Feb 22, 2026
55252a7
test: add unit tests for Reflection widget
kh-ub-ayb Feb 23, 2026
8846c61
test: fix 13 broken tests after deps refactor and logoconstants update
vyagh Feb 23, 2026
1965f46
fixed auto relaod on same language
Feb 23, 2026
83c5c8d
Merge pull request #5877 from vyagh/fix/update-failing-tests
omsuneri Feb 23, 2026
52c20cb
Add unit tests for temperament.js to improve coverage
stutijain2006 Feb 23, 2026
65360f8
Run prettier on changed files
stutijain2006 Feb 23, 2026
b4c5ec0
Improve test coverage for resolveObject and delayExecution
Thesmoothengineer Feb 24, 2026
e5d882d
Format utils test file with prettier
Thesmoothengineer Feb 24, 2026
34defc9
Fix: remove debug console.log statements from reflection widget
DhyaniKavya Feb 23, 2026
e82f123
Merge branch 'sugarlabs:master' into lang
vara-prasad-07 Feb 25, 2026
c0bee41
Merge pull request #5894 from stutijain2006/UtilsTest
omsuneri Feb 25, 2026
1440885
Merge pull request #5885 from DhyaniKavya/fix/remove-reflection-debug…
omsuneri Feb 25, 2026
382b7b5
Merge pull request #5881 from vara-prasad-07/lang
omsuneri Feb 25, 2026
af23222
Merge pull request #5895 from Thesmoothengineer/improve-utils-coverage
omsuneri Feb 25, 2026
a9f8179
Merge remote-tracking branch 'upstream/master' into test/add-reflecti…
kh-ub-ayb Feb 25, 2026
90e3747
Add IndexedDB integration tests for Planet CacheManager
farhan-momin Feb 25, 2026
d9c3364
Merge pull request #5876 from kh-ub-ayb/test/add-reflection-tests
omsuneri Feb 25, 2026
97cc141
test: add unit tests for Turtle class (part of #5607)
AdityaM-IITH Feb 25, 2026
87187dc
Merge pull request #5906 from farhan-momin/todo-planet-CacheManager-t…
omsuneri Feb 26, 2026
2fda20c
Test Suite: Add unit tests for Turtle class (part of #5607)
omsuneri Feb 26, 2026
9ae0c1b
fix: update status window colors in dark mode (#5773)
kh-ub-ayb Feb 27, 2026
f488f0b
Fix missing inCrescendo.pop() in crescendo end listener (#5767)
Ady0333 Feb 27, 2026
cb1a30f
test: add unit tests for AIDebugger widget
kh-ub-ayb Feb 27, 2026
1b7b798
add missing license header to aidebugger tests
kh-ub-ayb Feb 27, 2026
d373588
Test/add aidebugger tests
omsuneri Feb 27, 2026
79c20c9
test: add unit tests for p5-sound-adapter (100% coverage)
AdityaM-IITH Feb 28, 2026
be7caaa
test(turtle-singer): add regression tests for lifecycle and pitch exe…
mahesh-09-12 Feb 28, 2026
aaa8e33
Test Suite: Add unit tests for JSInterface validateArgs
AdityaM-IITH Mar 1, 2026
af758aa
style: use it() instead of test() for consistency
AdityaM-IITH Mar 1, 2026
a7626ed
Test Suite: Add unit tests for turtledefs Music Blocks mode
AdityaM-IITH Mar 1, 2026
21f3efa
refactor: introduce ActivityContext and de-globalize Activity access …
Chaitu7032 Mar 1, 2026
34b1ca6
Save ~70-120 MB — lazy-cache grid bitmaps & shrink scroll canvas (#5929)
Ashutoshx7 Mar 1, 2026
de7fade
Test Suite: Add unit tests for turtledefs Music Blocks mode
omsuneri Mar 1, 2026
9187696
Test Suite: Add unit tests for JSInterface validateArgs
omsuneri Mar 1, 2026
220b3c2
Test Suite: Add unit tests for p5-sound-adapter
omsuneri Mar 1, 2026
dc9fead
Add regression tests for core lifecycle and pitch execution in turtle…
omsuneri Mar 1, 2026
67bf63b
Test Suite: Add unit tests for IntervalsBlocks
AdityaM-IITH Mar 2, 2026
e95007a
Test Suite: Add unit tests for IntervalsBlocks
omsuneri Mar 2, 2026
ce9439d
test: Add image onload coverage for boundary.js
AdityaM-IITH Mar 3, 2026
9b80948
Merge pull request #6043 from AdityaM-IITH/test/boundary-onload-coverage
omsuneri Mar 3, 2026
0967857
feat(architecture): harden ActivityContext and remove window.activity…
Chaitu7032 Mar 3, 2026
5980640
ci: add PR category check workflow with auto-labeling
Ashutoshx7 Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/generic.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ about: Submit changes to the project for review and inclusion

This PR fixes #

## PR Category

<!--- ⚠️ CI ENFORCED: You MUST check at least ONE category below or the CI will fail. -->
<!--- Check all categories that apply to this pull request. -->

- [ ] 🐛 Bug Fix — Fixes a bug or incorrect behavior
- [ ] ✨ Feature — Adds new functionality
- [ ] ⚡ Performance — Improves performance (load time, memory, rendering, etc.)
- [ ] 🧪 Tests — Adds or updates test coverage
- [ ] 📝 Documentation — Updates to docs, comments, or README

## Changes Made

<!--- Provide a summary of the changes made in this pull request. -->
Expand Down
113 changes: 113 additions & 0 deletions .github/workflows/pr-category-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: PR Category Check

# Ensures every PR has at least one category checkbox checked.
# Automatically applies matching GitHub labels to the PR.
# Uses pull_request_target so it works for fork PRs too (runs in base repo context).
# This is safe because we only read the PR body from the event payload — no fork code is checked out or executed.

on:
pull_request_target:
types: [opened, edited, synchronize, reopened]

permissions:
pull-requests: write
contents: read

jobs:
check-pr-category:
name: Validate PR Category & Auto-Label
runs-on: ubuntu-latest
steps:
- name: Check categories and apply labels
uses: actions/github-script@v7
with:
script: |
const prBody = context.payload.pull_request.body || '';
const prNumber = context.payload.pull_request.number;

// Category checkboxes mapped to their GitHub label names
const categories = [
{ label: 'Issue-Bug', emoji: '🐛', displayName: '🐛 Bug Fix', pattern: /- \[x\]\s*🐛\s*Bug Fix/i },
{ label: 'Issue-Enhancement', emoji: '✨', displayName: '✨ Feature', pattern: /- \[x\]\s*✨\s*Feature/i },
{ label: 'Issue-Performance', emoji: '⚡', displayName: '⚡ Performance', pattern: /- \[x\]\s*⚡\s*Performance/i },
{ label: 'Issue-Testing', emoji: '🧪', displayName: '🧪 Tests', pattern: /- \[x\]\s*🧪\s*Tests/i },
{ label: 'Issue-Documentation', emoji: '📝', displayName: '📝 Documentation', pattern: /- \[x\]\s*📝\s*Documentation/i },
];

const checkedCategories = categories.filter(cat => cat.pattern.test(prBody));
const uncheckedCategories = categories.filter(cat => !cat.pattern.test(prBody));

// --- Step 1: Fail CI if no category is selected ---
if (checkedCategories.length === 0) {
const message = [
'## ❌ PR Category Required',
'',
'This pull request does not have any **PR Category** selected.',
'Please edit your PR description and check **at least one** category checkbox:',
'',
'| Category | Description |',
'|----------|-------------|',
'| 🐛 Bug Fix | Fixes a bug or incorrect behavior |',
'| ✨ Feature | Adds new functionality |',
'| ⚡ Performance | Improves performance |',
'| 🧪 Tests | Adds or updates test coverage |',
'| 📝 Documentation | Updates to docs, comments, or README |',
'',
'Example: Change `- [ ] 🐛 Bug Fix` to `- [x] 🐛 Bug Fix`',
'',
'> **Tip:** You can select multiple categories if your PR spans several areas.',
].join('\n');

core.setFailed(message);
return;
}

// --- Step 2: Auto-apply labels for checked categories ---
const labelsToAdd = checkedCategories.map(cat => cat.label);
const labelsToRemove = uncheckedCategories.map(cat => cat.label);

// Get current labels on the PR
const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});
const currentLabelNames = currentLabels.map(l => l.name);

// Add labels that are checked but not yet on the PR
for (const label of labelsToAdd) {
if (!currentLabelNames.includes(label)) {
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: [label],
});
core.info(`🏷️ Added label: "${label}"`);
} catch (error) {
core.warning(`⚠️ Could not add label "${label}". Make sure it exists in the repo. Error: ${error.message}`);
}
}
}

// Remove labels that are unchecked but still on the PR
for (const label of labelsToRemove) {
if (currentLabelNames.includes(label)) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
name: label,
});
core.info(`🗑️ Removed label: "${label}"`);
} catch (error) {
core.warning(`⚠️ Could not remove label "${label}". Error: ${error.message}`);
}
}
}

const selected = checkedCategories.map(c => c.displayName).join(', ');
core.info(`✅ PR categories selected: ${selected}`);
core.info(`🏷️ Labels synced: ${labelsToAdd.join(', ')}`);
43 changes: 43 additions & 0 deletions .github/workflows/pr-cypress-e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: E2E Test

on:
pull_request:
types:
- opened
- synchronize
push:
branches:
- master

jobs:
e2e:
name: Run Cypress E2E Tests
runs-on: ubuntu-latest

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Run Cypress E2E Tests
uses: cypress-io/github-action@v6
with:
install-command: npm ci
start: npm start
wait-on: 'http://127.0.0.1:3000'
wait-on-timeout: 120
browser: chrome
config: video=false

- name: Upload Cypress Screenshots on Failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: cypress-screenshots
path: cypress/screenshots
if-no-files-found: ignore
86 changes: 50 additions & 36 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
## <a name="CONTRIBUTING"></a>Contributing

We welcome contributions of all kinds — whether it’s code,
documentation, music, lesson plans, artwork, or ideas. Music Blocks
documentation, music, lesson plans, artwork, or ideas. Music Blocks
is a community-driven project, and every meaningful contribution helps
improve the platform for learners and educators around the world.

If you’re new to the project, start by setting up the local
development environment using the guide linked above, then explore
development environment using the guide linked below, then explore
open issues or discussions to find a place to contribute.

- [How to set up a local server](README.md#how-to-set-up-a-local-server)


### Special Notes

Music Blocks is being built from the ground-up, to address several
Expand Down Expand Up @@ -50,9 +49,12 @@ following resources:
- [JavaScript tutorial - w3schools.com](https://www.w3schools.com/js/default.asp)
- [JavaScript reference - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript)

Programmers, please follow these general [guidelines for
For code contributions, please follow these general [guidelines for
contributions](https://github.com/sugarlabs/sugar-docs/blob/master/src/contributing.md).

### AI guidelines

Follow [AI guidelines for Sugar Labs](https://github.com/sugarlabs/sugar-docs/blob/master/src/contributing.md#ai-guidelines-for-sugar-labs)

### Before You Push

Expand All @@ -64,8 +66,20 @@ npx prettier --check . # Formatting
npm test # Jest
```

NOTE: Only run ```prettier``` on the files you have modified.

If formatting fails, run `npx prettier --write .` to fix it.

### After your PR is merged

Please note that production deployments of Music Blocks are **manual**.

This means that even after your pull request is merged, your changes may not immediately appear. Your update will become visible after the next official release is deployed.

If your changes are not visible right away, it does **not** indicate a problem with your PR or implementation.

This note is included to prevent contributors from spending time debugging caching or deployment issues unnecessarily.

### License Header

Music Blocks is licensed under the [AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html).
Expand Down Expand Up @@ -129,60 +143,60 @@ Feel free. But, please don't spam :p.
### Keep in Mind

1. Your contributions need not necessarily have to address any
discovered issue. If you encounter any, feel free to add a fix through
a PR, or create a new issue ticket.
discovered issue. If you encounter any, feel free to add a fix through
a PR, or create a new issue ticket.

2. Use [labels](https://github.com/sugarlabs/musicblocks/labels) on
your issues and PRs.
your issues and PRs.

3. Please do not spam with many PRs consisting of little changes.

4. If you are addressing a bulk change, divide your commits across
multiple PRs, and send them one at a time. The fewer the number of
files addressed per PR, the better.
multiple PRs, and send them one at a time. The fewer the number of
files addressed per PR, the better.

5. Communicate effectively. Go straight to the point. You don't need
to address anyone using '_sir_'. Don't write unnecessary comments;
don't be over-apologetic. There is no superiority hierarchy. Every
single contribution is welcome, as long as it doesn't spam or distract
the flow.
to address anyone using '_sir_'. Don't write unnecessary comments;
don't be over-apologetic. There is no superiority hierarchy. Every
single contribution is welcome, as long as it doesn't spam or distract
the flow.

6. Write useful, brief commit messages. Add commit descriptions if
necessary. PR name should speak about what it is addressing and not
the issue. In case a PR fixes an issue, use `fixes #ticketno` or
`closes #ticketno` in the PR's comment. Briefly explain what your PR
is doing.
necessary. PR name should speak about what it is addressing and not
the issue. In case a PR fixes an issue, use `fixes #ticketno` or
`closes #ticketno` in the PR's comment. Briefly explain what your PR
is doing.

7. Always test your changes extensively before creating a PR. There's
no sense in merging broken code. If a PR is a _work in progress
(WIP)_, convert it to draft. It'll let the maintainers know it isn't
ready for merging.
no sense in merging broken code. If a PR is a _work in progress
(WIP)_, convert it to draft. It'll let the maintainers know it isn't
ready for merging.

8. Read and revise the concepts about programming constructs you're
dealing with. You must be clear about the behavior of the language or
compiler/transpiler. See [JavaScript
docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript).
dealing with. You must be clear about the behavior of the language or
compiler/transpiler. See [JavaScript
docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript).

9. If you have a question, do a _web search_ first. If you don't find
any satisfactory answer, then ask it in a comment. If it is a general
question about Music Blocks, please use the new
[discussions](https://github.com/sugarlabs/musicblocks/discussions)
tab on top the the repository, or the _Sugar-dev Devel
<[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@lists.sugarlabs.org)>_
mailing list. Don't ask silly questions (unless you don't know it is
silly ;p) before searching it on the web.
any satisfactory answer, then ask it in a comment. If it is a general
question about Music Blocks, please use the new
[discussions](https://github.com/sugarlabs/musicblocks/discussions)
tab on top the the repository, or the _Sugar-dev Devel
<[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@lists.sugarlabs.org)>_
mailing list. Don't ask silly questions (unless you don't know it is
silly ;p) before searching it on the web.

10. Work on things that matter. Follow three milestones: `Port Ready`,
`Migration`, and `Future`. Those tagged `Port Ready` are
priority. Those tagged with `Migration` will be taken care of during
or after the foundation rebuild. Feel free to participate in the
conversation, adding valuable comments. Those tagged with `Future`
need not be addressed presently.
`Migration`, and `Future`. Those tagged `Port Ready` are
priority. Those tagged with `Migration` will be taken care of during
or after the foundation rebuild. Feel free to participate in the
conversation, adding valuable comments. Those tagged with `Future`
need not be addressed presently.

_Please note there is no need to ask permission to work on an
issue. You should check for pull requests linked to an issue you are
addressing; if there are none, then assume nobody has done
anything. Begin to fix the problem, test, make your commits, push your
commits, then make a pull request. Mention an issue number in the pull
request, but not the commit message. These practices allow the
competition of ideas (Sugar Labs is a meritocracy)._
competition of ideas (Sugar Labs is a meritocracy)._
Loading
Loading