Skip to content

Conversation

@someCatInTheWorld
Copy link
Member

@someCatInTheWorld someCatInTheWorld commented Jan 28, 2026

Resolves

OmniBlocks/scratch-vm#28

Proposed Changes

Adds server extension to extension library.

Reason for Changes

Complements OmniBlocks/scratch-vm#48

Test Coverage

N/A

Browser Coverage

Check the OS/browser combinations tested (At least 2)

Mac

  • Chrome
  • Firefox
  • Safari

Windows

  • Chrome
  • Firefox
  • Edge

Chromebook

  • Chrome

iPad

  • Safari

Android Tablet

  • Chrome

P.S: @ampelectrecuted Can I reuse the extension cover you made for LibreKitten?

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🤖 Auto-Component Test Results

🎉 No new UI components detected!

This PR doesn't add any new buttons, menus, or clickable components.


Triggered by @someCatInTheWorld • Commit 902aacb

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🎉 MEGA PR Test & Analysis Complete!

Hi @someCatInTheWorld! Your PR has been fully tested and analyzed! 🚀✨


🌍 Test Deployment

Live Preview: https://OmniBlocks.github.io/scratch-gui/someCatInTheWorld/758/


🧪 Test Results

ESLint: ✅ All checks passed!

Unit Tests:

  • Total: 0 tests
  • ✅ Passed: 1
  • ❌ Failed: 0

Integration Tests:

  • Total: 4 tests
  • ✅ Passed: 0
  • ❌ Failed: 15
  • ⏭️ Skipped: 1

💡 Pro Tip: Check the Files Changed tab for inline annotations showing exactly where errors occurred! 🎯

📄 Full test outputs available in artifacts


🔦 Performance Audit (Lighthouse)

✅ Audit completed successfully!

📊 Lighthouse Scores:

  • 🔴 Performance: 35/100
  • 🟠 Accessibility: 68/100
  • 🟢 Best Practices: 96/100
  • 🟠 SEO: 88/100

⚡ Core Web Vitals:

  • First Contentful Paint: 45.4 s
  • Largest Contentful Paint: 49.1 s
  • Total Blocking Time: 850 ms
  • Cumulative Layout Shift: 0
  • Speed Index: 45.4 s

🟢 90-100 (Good) | 🟠 50-89 (Needs Improvement) | 🔴 0-49 (Poor)

📄 Full report in artifacts


📦 Bundle Size Analysis

Total Build Size: 172M

📦 Top 5 Largest JavaScript Files:

  • 20M - samples3.js
  • 20M - player/samples3.js
  • 13M - player/drumsamples.js
  • 13M - drumsamples.js
  • 9.5M - samples2.js

🎨 Top 5 Largest CSS Files:

  • No CSS files found (might be inlined in JS)

♿ Accessibility Testing

✅ Accessibility scan completed!


📊 Build Details


💡 Pro Tip: Only one build was needed for all these checks - saving CI/CD minutes! 🎯

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Caution

Review failed

The pull request is closed.

Summary by CodeRabbit

  • New Features
    • Added "Web Server" extension to the public extension library — a featured entry that lets users build and host web servers to serve APIs and simple websites.

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Adds a new public "Web Server" extension entry with extensionId server, collaborator LibreKitten, icon import, description message, tags ['ob'], and featured: true to the public extensions catalog in src/lib/libraries/extensions/index.jsx. The entry is placed among existing extensions.

Changes

Cohort / File(s) Summary
Extensions index
src/lib/libraries/extensions/index.jsx
Adds import for serverIcon and a new public extension object for "Web Server" (extensionId server, collaborator LibreKitten, description via FormattedMessage, tags: ['ob'], featured: true). Inserted among existing extension entries.

Sequence Diagram(s)

(omitted — change does not introduce multi-component control flow requiring a sequence diagram)

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • Extensions #159 — also modifies src/lib/libraries/extensions/index.jsx to add public extension/gallery entries and icon imports; closely related changeset.

Suggested labels

review-effort-3, needs-careful-testing

Poem

🐰 I hopped in with a server bright,
LibreKitten gave it light,
An icon, tag, and featured cheer,
Ready to host small bunnies here! 🐇

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add server extension' is clear and directly describes the main change: adding a server extension to the extension library.
Description check ✅ Passed The description is related to the changeset, explaining the purpose of adding the server extension and referencing related issues.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/server

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@amazon-q-developer amazon-q-developer bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary

This PR adds a new "Web Server" extension to the extension library, which complements the scratch-vm implementation referenced in the linked issues.

Issues Found

  1. Critical: Missing insetIconURL property that could cause UI rendering issues
  2. Minor: Grammar error in TODO comment

Overall Assessment

The extension addition follows the correct pattern used by other extensions in the library. Once the missing insetIconURL property is added, this should integrate properly with the existing extension system. The use of the 'ob' tag correctly identifies this as an OmniBlocks-specific extension.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

Comment on lines 165 to 181
{
name: 'Web Server',
extensionId: 'server',
collaborator: 'LibreKitten',
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the he made one for
// LibreKitten.
iconURL: customExtensionIcon,
description: (
<FormattedMessage
defaultMessage="Build a web server that can host an API and simple websites."
description="Description for the 'Web Server' extension"
id="omni.extension.server.description"
/>
),
tags: ['ob'],
featured: true
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Logic Error: Missing insetIconURL property for Web Server extension. All other extensions in the library include both iconURL and insetIconURL properties for proper display in different UI contexts. Without insetIconURL, the extension may not render correctly in compact views or cause runtime errors when the UI attempts to access this property.

Suggested change
{
name: 'Web Server',
extensionId: 'server',
collaborator: 'LibreKitten',
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the he made one for
// LibreKitten.
iconURL: customExtensionIcon,
description: (
<FormattedMessage
defaultMessage="Build a web server that can host an API and simple websites."
description="Description for the 'Web Server' extension"
id="omni.extension.server.description"
/>
),
tags: ['ob'],
featured: true
},
{
name: 'Web Server',
extensionId: 'server',
collaborator: 'LibreKitten',
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the he made one for
// LibreKitten.
iconURL: customExtensionIcon,
insetIconURL: customExtensionIcon,
description: (
<FormattedMessage
defaultMessage="Build a web server that can host an API and simple websites."
description="Description for the 'Web Server' extension"
id="omni.extension.server.description"
/>
),
tags: ['ob'],
featured: true
},

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works fine.

Comment on lines 169 to 170
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the he made one for
// LibreKitten.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grammar error in TODO comment. The comment contains incomplete text "the he made one for" which should be corrected for clarity.

Suggested change
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the he made one for
// LibreKitten.
// TODO: This is a placeholder until someone designs a cover or Amp gives permission to use the one he made for
// LibreKitten.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🎬 ULTRA Visual Regression Test Results

Hi @someCatInTheWorld! Tested across 9 combinations (3 platforms × 3 browsers). 8/9 completed.

⚠️ Visual changes detected! Expand sections below for details.

📊 Test Matrix Summary

Platform Browser Changes Details
Ubuntu Logo Ubuntu Chrome ⚠️ Changes View
Ubuntu Logo Ubuntu WebKit ⚠️ Changes View
Windows Logo Windows Chrome ⚠️ Changes View
Windows Logo Windows Firefox ⚠️ Changes View
Windows Logo Windows WebKit ⚠️ Changes View
Apple Logo Apple Chrome ⚠️ Changes View
Apple Logo Apple Firefox ⚠️ Changes View
Apple Logo Apple WebKit ⚠️ Changes View

Ubuntu Logo Ubuntu + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

No pixel difference detected.

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 3.94% (36271 pixels)

Advanced Settings

No pixel difference detected.

Ubuntu Logo Ubuntu + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

No pixel difference detected.

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.10% (151072 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 41.22% (379852 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 3.97% (36626 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + Firefox

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.04% (337 pixels)

Player View

BasePRDiff

Diff: 0.00% (15 pixels)

Extension Library

BasePRDiff

Diff: 4.56% (42054 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 1.56% (57371 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.14% (152699 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 21.43% (197508 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 3.99% (36750 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + Firefox

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.24% (2198 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.61% (42447 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.13% (4849 pixels)

Player View

BasePRDiff

Diff: 2.94% (194492 pixels)

Extension Library

BasePRDiff

Diff: 4.39% (161905 pixels)

Advanced Settings

No pixel difference detected.


📦 Resources

@someCatInTheWorld
Copy link
Member Author

@coderabbitai Read the discussion and code of OmniBlocks/scratch-vm#48. What do you think of it? (I'm asking here because I think the two different wascawwy wabbits have different personalities.)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Fetch details of OmniBlocks/scratch-vm#48
gh pr view 48 --repo OmniBlocks/scratch-vm --json title,body,number,state,author,reviews,comments,files --jq '.'

Length of output: 254919


🏁 Script executed:

#!/bin/bash
# Get the diff/patch for OmniBlocks/scratch-vm#48
gh pr diff 48 --repo OmniBlocks/scratch-vm

Length of output: 114186


🏁 Script executed:

#!/bin/bash
# Get the comments on OmniBlocks/scratch-vm#48
gh pr view 48 --repo OmniBlocks/scratch-vm --comments

Length of output: 207065


@someCatInTheWorld Love the wascawwy-rabbit crossover. Short take: VM#48 looks strong, and it maps cleanly to how Scratch/TurboWarp are designed to be extended.

What I like in VM#48

  • Architecture: Treating HTTP requests as events (SERVER_REQUEST/SERVER_RESPONSE) + per-thread request/response context is exactly right for a blocks VM. It fixes the old global-state issues and scales conceptually.
  • Safety: Permission prompts for file/network, explicit file scope, request-size limit, and a 30s response timeout are the right guardrails for a “server-mode” VM.
  • Dev ergonomics: The hot-swap endpoint for quick reloads and a small CLI that sets up security/storage make it practical.

How that impacts this GUI PR (#758)

  • ID alignment is correct: extensionId 'server' matches the built-in VM registration in extension-manager. No extensionURL needed since it’s a VM built‑in.
  • Remove the accidental duplicate: The “Web Server” tile appears twice in src/lib/libraries/extensions/index.jsx. Keep one.
  • I18n: You’re using id="omni.extension.server.description". Make sure that key is added to your messages (at least en.json) so the description shows up in production builds.
  • Icon: customExtensionIcon is fine as a placeholder, but once you get the go-ahead on the cover asset, switch iconURL to the proper server artwork (or a small server glyph) so it stands out in the library.
  • UX clarity (optional but recommended):
    • Add a short note in the description like “Requires the OmniBlocks Server CLI. In the browser, these blocks are inert.” That sets expectations for purely web users.
    • Alternatively, gate the tile so it only shows in environments where server-mode is available (e.g., check for process.versions?.node). The extension itself already no-ops safely in the browser, so this is mainly a polish call.

Tiny future niceties (non-blocking)

  • A short “Getting started” doc link from the tile (or tooltip) to the CLI usage would be helpful for first‑timers.
  • Consider a simple example project snippet in docs (when page “/” is requested → set format text/html → return “Hello OmniBlocks!”).

Verdict

  • VM#48 is solid and aligns well with Scratch/TurboWarp’s layered, event-driven design.
  • For this GUI PR: fix the duplicate tile, ensure the i18n string exists, and consider the small UX tweaks above. After that, you’re in great shape to ship the library entry.

🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-27T22:15:17.804Z
Learning: In OmniBlocks/scratch-gui, CodeRabbit should only respond to comments that directly address coderabbitai. If a comment is directed at another bot (e.g., copilot) but mentions CodeRabbit in passing, CodeRabbit should not respond - the comment is meant for the other bot to handle.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.386Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:00:40.666Z
Learning: In OmniBlocks/scratch-gui, when cleanup is requested, supervoidcoder prefers deletion of CodeRabbit’s spam comments (not just minimizing) on the PR; for non-CodeRabbit bot comments, minimize unless a maintainer explicitly asks for hard deletion.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:34:24.309Z
Learning: CodeRabbit experienced a spam bug on PR `#309` in OmniBlocks/scratch-gui where it posted 11 duplicate "no user input to reply to" messages. The spam was triggered by bot comments from github-actions and wellcode-ai. The comments were successfully minimized using GitHub GraphQL API mutations with the OFF_TOPIC classifier.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:55:33.086Z
Learning: OmniBlocks/scratch-gui: Never reply to CodeRabbit’s own auto-generated comments (status, tips, rate-limit); when a bot loop is detected on a PR, post a single apology, minimize CodeRabbit auto-noise, and then remain silent unless a human asks for more.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T04:15:58.868Z
Learning: For conversations and review replies with supervoidcoder in OmniBlocks/scratch-gui, prefer an energetic, playful tone (emojis, fun copy). Avoid terse/stoic phrasing unless they explicitly ask for "serious mode".

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T03:26:35.542Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder appreciates detailed, thorough technical responses but wants the tone to remain friendly, energetic, and conversational (with emojis and personality) even when processing large amounts of file content or technical context. Avoid shifting to overly formal, stoic, or robotic language when diving deep into technical details.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

💡 Use @coderabbitai plan to create a plan for code changes

github-actions bot added a commit that referenced this pull request Jan 28, 2026
@someCatInTheWorld
Copy link
Member Author

@OmniBlocks/coders @OmniBlocks/ai @coderabbitai What do you think of this?

github-actions bot added a commit that referenced this pull request Jan 28, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Read the extensions index file to verify the duplicate entry issue
cat src/lib/libraries/extensions/index.jsx

Length of output: 17763


🏁 Script executed:

#!/bin/bash
# Check if the i18n key exists in locale files
rg -n "omni\.extension\.server\.description" src/lib/libraries/extensions/
rg -n "omni\.extension\.server" --type json

Length of output: 97


🏁 Script executed:

#!/bin/bash
# Check locale files structure
fd -e json . src/lib/libraries/extensions/ | head -5
fd "en.json" src/ | head -3
# Look at an example locale file to see structure
fd "en.json" src/ -x head -20 {} \; | head -50

Length of output: 2206


@someCatInTheWorld Good news and one blocker! 🎯

What's working:
No duplicate - the AI summary was wrong; the Web Server entry appears exactly once
Architecture is solid - extensionId 'server' correctly references the VM built-in (no extensionURL needed)
Metadata looks good - collaborator, tags ['ob'], featured: true are all appropriate
Icon placeholder - your TODO comment about waiting on Amp's permission is clear

The blocker: 🚨
The i18n key omni.extension.server.description is referenced but not defined in any locale files. In production builds, the description will be blank or show the key itself.

Quick fix:
Add the translation to your locale files (likely src/addons/addons-l10n/en.json or wherever OmniBlocks keeps extension strings):

{
  "omni.extension.server.description": "Build a web server that can host an API and simple websites."
}

Minor polish (optional):
For consistency with other extensions, consider wrapping the name field in a FormattedMessage too:

name: (
    <FormattedMessage
        defaultMessage="Web Server"
        description="Name for the 'Web Server' extension"
        id="omni.extension.server.name"
    />
),

Verdict: Fix the missing i18n key, then you're good to merge! The VM integration looks clean and the structure matches the built-in extension pattern perfectly. 🐇✨


🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T02:32:52.161Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder does not want CodeRabbit to use  mode unless explicitly requested. Plan mode should only be activated when the user specifically asks for code changes or PR creation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.386Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only `@-mention` the requester if the actor is a human user; do not `@-mention` bots to avoid triggering bot back-and-forth and comment spam.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder plans to implement the Boxy AI assistant as an addon (rather than core code) because addons provide unified access to all editor components (scratch-blocks, GUI, paint editor), encapsulated development, built-in toggleability, and settings persistence—making them ideal for features that need cross-cutting concerns and user control.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:01:57.123Z
Learning: The team members in OmniBlocks/coders include: supervoidcoder, Graison-P (gvyt), ampelectrecuted (amp), NotTheBaton (TheBaton), and kRxZykRxZy.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-27T22:15:17.804Z
Learning: In OmniBlocks/scratch-gui, CodeRabbit should only respond to comments that directly address coderabbitai. If a comment is directed at another bot (e.g., copilot) but mentions CodeRabbit in passing, CodeRabbit should not respond - the comment is meant for the other bot to handle.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-05T16:55:31.105Z
Learning: OmniBlocks/scratch-gui: supervoidcoder wants automated comment moderation to detect spam/phishing from first-time commenters using GitHub Models AI (similar to ulti.yml workflow). Should analyze comments and hide/delete based on severity levels.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-28T03:09:05.973Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (void) is planning to add a 3D mode and is excited about using PlayCanvas as a full 3D game engine for OmniBlocks.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-05T16:58:18.936Z
Learning: OmniBlocks/scratch-gui uses ulti.yaml workflow with GitHub Models AI (Mistral-3B via actions/ai-inferencev1) for issue analysis, categorization, duplicate detection, and automated moderation with keyword-based actions like [SPAM], [SECURITY], [CLOSE], [LOCK], [LOCKDOWN].

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:58:09.061Z
Learning: In OmniBlocks/scratch-gui, GitHub author.login for CodeRabbit appears as "coderabbitai" (without the UI “[bot]” suffix). Use a case-insensitive ^coderabbit regex when filtering bot comments for cleanup.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

💡 Use @coderabbitai plan to create a plan for code changes

@ampelectrecuted
Copy link
Contributor

@someCatInTheWorld go ahead use it but maybe make it blue

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🤖 Auto-Component Test Results

🎉 No new UI components detected!

This PR doesn't add any new buttons, menus, or clickable components.


Triggered by @someCatInTheWorld • Commit 597cf54

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🎉 MEGA PR Test & Analysis Complete!

Hi @someCatInTheWorld! Your PR has been fully tested and analyzed! 🚀✨


🌍 Test Deployment

Live Preview: https://OmniBlocks.github.io/scratch-gui/someCatInTheWorld/758/


🧪 Test Results

ESLint: ✅ All checks passed!

Unit Tests:

  • Total: 0 tests
  • ✅ Passed: 1
  • ❌ Failed: 0

Integration Tests:

  • Total: 4 tests
  • ✅ Passed: 0
  • ❌ Failed: 15
  • ⏭️ Skipped: 1

💡 Pro Tip: Check the Files Changed tab for inline annotations showing exactly where errors occurred! 🎯

📄 Full test outputs available in artifacts


🔦 Performance Audit (Lighthouse)

✅ Audit completed successfully!

📊 Lighthouse Scores:

  • 🔴 Performance: 30/100
  • 🟠 Accessibility: 68/100
  • 🟢 Best Practices: 96/100
  • 🟠 SEO: 88/100

⚡ Core Web Vitals:

  • First Contentful Paint: 44.1 s
  • Largest Contentful Paint: 47.7 s
  • Total Blocking Time: 1,440 ms
  • Cumulative Layout Shift: 0
  • Speed Index: 44.1 s

🟢 90-100 (Good) | 🟠 50-89 (Needs Improvement) | 🔴 0-49 (Poor)

📄 Full report in artifacts


📦 Bundle Size Analysis

Total Build Size: 172M

📦 Top 5 Largest JavaScript Files:

  • 20M - samples3.js
  • 20M - player/samples3.js
  • 13M - player/drumsamples.js
  • 13M - drumsamples.js
  • 9.5M - samples2.js

🎨 Top 5 Largest CSS Files:

  • No CSS files found (might be inlined in JS)

♿ Accessibility Testing

✅ Accessibility scan completed!


📊 Build Details


💡 Pro Tip: Only one build was needed for all these checks - saving CI/CD minutes! 🎯

@github-actions
Copy link
Contributor

github-actions bot commented Jan 28, 2026

🎬 ULTRA Visual Regression Test Results

Hi @someCatInTheWorld! Tested across 9 combinations (3 platforms × 3 browsers). 8/9 completed.

⚠️ Visual changes detected! Expand sections below for details.

📊 Test Matrix Summary

Platform Browser Changes Details
Ubuntu Logo Ubuntu Chrome ⚠️ Changes View
Ubuntu Logo Ubuntu WebKit ⚠️ Changes View
Windows Logo Windows Chrome ⚠️ Changes View
Windows Logo Windows Firefox ⚠️ Changes View
Windows Logo Windows WebKit ⚠️ Changes View
Apple Logo Apple Chrome ⚠️ Changes View
Apple Logo Apple Firefox ⚠️ Changes View
Apple Logo Apple WebKit ⚠️ Changes View

Ubuntu Logo Ubuntu + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

No pixel difference detected.

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.02% (37030 pixels)

Advanced Settings

No pixel difference detected.

Ubuntu Logo Ubuntu + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 1.53% (56266 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 37.59% (1385805 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 41.48% (382304 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.06% (37385 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + Firefox

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.10% (913 pixels)

Player View

BasePRDiff

Diff: 2.94% (48207 pixels)

Extension Library

BasePRDiff

Diff: 4.61% (42461 pixels)

Advanced Settings

No pixel difference detected.

Windows Logo Windows + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.95% (34867 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.17% (153610 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + Chrome

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 25.03% (230722 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.07% (37535 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + Firefox

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 3.75% (34602 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.65% (42833 pixels)

Advanced Settings

No pixel difference detected.

Apple Logo Apple + WebKit

Editor Initial

No pixel difference detected.

Blocks Workspace

No pixel difference detected.

Stage Sprites

No pixel difference detected.

Code Tab

No pixel difference detected.

Costumes Tab

No pixel difference detected.

Sounds Tab

No pixel difference detected.

Songs Tab

BasePRDiff

Diff: 0.01% (517 pixels)

Player View

No pixel difference detected.

Extension Library

BasePRDiff

Diff: 4.43% (163294 pixels)

Advanced Settings

No pixel difference detected.


📦 Resources

@someCatInTheWorld someCatInTheWorld merged commit 04aa263 into main Jan 28, 2026
8 of 9 checks passed
@someCatInTheWorld
Copy link
Member Author

@coderabbitai It's been merged!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

@someCatInTheWorld Congrats on the merge! 🎉🐇

The Server extension is now live in the library—users can start building web servers and APIs with OmniBlocks blocks! Great work getting the i18n keys sorted and the integration cleaned up. Hope the blue-tinted icon from Amp looks sharp in the extensions grid!

Happy shipping! ✨


🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-14T01:04:18.108Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder has decided not to implement live collaboration features due to child safety concerns, despite it being a long-desired feature. They plan to revisit this only when they have server infrastructure for proper moderation (session logging, content filtering, abuse reporting, human review teams). They understand that client-side moderation, parental controls, and age verification can be easily bypassed by children.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only `@-mention` the requester if the actor is a human user; do not `@-mention` bots to avoid triggering bot back-and-forth and comment spam.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T02:32:52.161Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder does not want CodeRabbit to use  mode unless explicitly requested. Plan mode should only be activated when the user specifically asks for code changes or PR creation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui: For CI comment hygiene, prefer not mentioning bot/app requesters in the Mega PR Test & Analysis sticky comment; only mention humans. Track such behavior changes via a GitHub issue assigned to supervoidcoder with backlinks to the initiating PR and comment.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder plans to implement the Boxy AI assistant as an addon (rather than core code) because addons provide unified access to all editor components (scratch-blocks, GUI, paint editor), encapsulated development, built-in toggleability, and settings persistence—making them ideal for features that need cross-cutting concerns and user control.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:38:01.634Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is redesigning the addons UI to use a grid card layout (similar to the extensions library) instead of a plain list view. Each feature will have an icon/image, title, description, and enable button to make features feel premium and discoverable. The rename from "Addons" to "Features" or "Advanced Features" is in progress.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!


💡 Use @coderabbitai plan to create a plan for code changes

@supervoidcoder
Copy link
Member

WAIT I LOGGED IN AT THE WRONG TIME LIKE AT THEEEE WORST TIME

@supervoidcoder
Copy link
Member

@coderabbitai NOW HOW ARE WE GONNA DEAL WITH THE CONFLICTS IN #385 !!!!!!!!!!!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Fetch details about PR `#385`
gh pr view 385 --repo OmniBlocks/scratch-gui --json title,body,number,state,headRefName,baseRefName,files --jq '.'

Length of output: 1288


🏁 Script executed:

#!/bin/bash
# Get the current diff for PR `#385` to see what it's changing
gh pr diff 385 --repo OmniBlocks/scratch-gui

Length of output: 39026


🏁 Script executed:

#!/bin/bash
# Check if there are actual conflicts by looking at the PR status
gh pr view 385 --repo OmniBlocks/scratch-gui --json mergeable,mergeStateStatus --jq '.'

Length of output: 55


@supervoidcoder Hey void! 🐇 Deep breath—it's actually not as bad as it looks! Let me break down what's happening:

The Situation 📊

Good news: GitHub says PR #385 is technically MERGEABLE (Git can auto-merge the conflicts). The UNSTABLE status just means CI checks are pending or failed, not that there's a blocking merge conflict.

The overlap: Both PRs modified src/lib/libraries/extensions/index.jsx:

  • PR #758 (just merged): Added the Web Server extension entry (1 new extension)
  • PR #385 (your branch):
    • Adds JavaScript V2 extension
    • Restructures gallery loading (splits TurboWarp and OmniBlocks galleries)
    • Changes branding from {APP_NAME} to hardcoded "TurboWarp"
    • Adds 8 other files (security manager, FieldCustom bridge, etc.)

Where the Conflict Lives 🎯

In the main extension array, here's where things overlap:

// PR `#758` added (now in main):
{
    name: 'Web Server',
    extensionId: 'server',
    // ... server extension config
},
{
    name: 'Translate', // existing
    // ...
}

// PR `#385` wants to add:
{
    name: 'JavaScript V2',
    extensionId: 'SPjavascriptV2',
    // ... JS V2 config
},
{
    name: 'TurboWarp Blocks', // (renamed from APP_NAME)
    // ...
}

Resolution Strategy 🛠️

Option 1: Merge main into your branch (recommended)

git checkout extensions
git fetch origin
git merge origin/main

Then manually resolve index.jsx:

  1. Keep both new extensions (Web Server from #758 + JavaScript V2 from #385)
  2. Order them logically (maybe: JS V2, Web Server, TW Blocks, Translate)
  3. Keep your gallery restructuring (TW + OB split)
  4. Keep all your other changes (security manager, FieldCustom, etc.)

Option 2: Rebase your branch (cleaner history)

git checkout extensions
git fetch origin
git rebase origin/main

Then resolve the same way.

What the Final Array Should Look Like 🎨

export default [
    // ... all existing extensions ...
    {
        name: <FormattedMessage id="ob.jsv2" defaultMessage="JavaScript V2" />,
        extensionId: 'SPjavascriptV2',
        // ... your JS V2 config
    },
    {
        name: 'Web Server',  // <-- from PR `#758`
        extensionId: 'server',
        // ... server config
    },
    {
        name: <FormattedMessage id="tw.twExtension.name" defaultMessage="TurboWarp Blocks" />,
        // ... TW Blocks config
    },
    {
        name: <FormattedMessage id="gui.extension.translate" />,
        // ... Translate config
    }
];

// Then your gallery items (galleryLoading, galleryMore, galleryError, galleryLoadingOB, etc.)

Quick Fix Command 🚀

Want me to generate the exact resolved file content for you? Just say the word and I'll paste the complete merged index.jsx here!

The conflict is totally manageable—just need to position both new extensions in the array and keep all the gallery restructuring you did. You got this! 💪✨


🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-14T01:04:18.108Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder has decided not to implement live collaboration features due to child safety concerns, despite it being a long-desired feature. They plan to revisit this only when they have server infrastructure for proper moderation (session logging, content filtering, abuse reporting, human review teams). They understand that client-side moderation, parental controls, and age verification can be easily bypassed by children.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only `@-mention` the requester if the actor is a human user; do not `@-mention` bots to avoid triggering bot back-and-forth and comment spam.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T02:32:52.161Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder does not want CodeRabbit to use  mode unless explicitly requested. Plan mode should only be activated when the user specifically asks for code changes or PR creation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder plans to implement the Boxy AI assistant as an addon (rather than core code) because addons provide unified access to all editor components (scratch-blocks, GUI, paint editor), encapsulated development, built-in toggleability, and settings persistence—making them ideal for features that need cross-cutting concerns and user control.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui: For CI comment hygiene, prefer not mentioning bot/app requesters in the Mega PR Test & Analysis sticky comment; only mention humans. Track such behavior changes via a GitHub issue assigned to supervoidcoder with backlinks to the initiating PR and comment.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-02T21:12:22.417Z
Learning: OmniBlocks/scratch-gui: Issue `#460` was successfully resolved by ampelectrecuted on December 2, 2025. After accidentally pushing upstream/develop to main (wiping all custom code), ampelectrecuted immediately identified the issue, found a backup branch that survived due to a failed cleanup script, created a clean revert, and deployed a looping force-push recovery script that successfully restored 100% of the OmniBlocks codebase once supervoidcoder enabled force pushing in the "cool" ruleset. The incident parallels the famous 1998 Pixar Toy Story 2 deletion disaster. As recognition, an easter egg will be added to the menu bar (tracking issue `#461` created).

Learnt from: ampelectrecuted
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-02T21:10:54.683Z
Learning: OmniBlocks/scratch-gui: Issue `#460` was successfully resolved by ampelectrecuted on December 2, 2025. After accidentally pushing upstream/develop to main (wiping all custom code), ampelectrecuted immediately identified the issue, found a backup branch that survived due to a failed cleanup script, created a clean revert, and deployed a looping force-push recovery script that successfully restored 100% of the OmniBlocks codebase once supervoidcoder enabled force pushing in the "cool" ruleset. The incident parallels the famous 1998 Pixar Toy Story 2 deletion disaster. As recognition, an easter egg will be added to the menu bar (tracking issue created).

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui workflow preference: Open tracking issues for CI/automation behavior changes; assign to supervoidcoder; include backlinks to the PR and the exact comment requesting the change.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:01:57.123Z
Learning: In the OmniBlocks/scratch-gui repository, team member supervoidcoder can be called "void" in reviews and conversations.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.386Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-13T22:43:34.163Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers React over Svelte for UI development (React is the framework they know and want to use consistently).

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 519
File: src/playground/index.ejs:176-176
Timestamp: 2025-12-05T17:47:27.981Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder's Scratch username is scratchcode1_2_3.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T21:20:08.837Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (“void”) prefers single, complete PRs over multi-part (“Part 1/2”) submissions. If a split is unavoidable, they want explicit linkage and gating before approval.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

💡 Use @coderabbitai plan to create a plan for code changes

@someCatInTheWorld
Copy link
Member Author

@coderabbitai NOW HOW ARE WE GONNA DEAL WITH THE CONFLICTS IN #385 !!!!!!!!!!!

Whoops, sorry about that! I didn't mean to cause conflicts with any PRs. 😅

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

@someCatInTheWorld No worries at all! 🐇 Merge conflicts are just part of parallel development—totally normal! The good news is GitHub can auto-merge this one, so void just needs to pull in the latest main and position both extensions in the array. You're all good! ✨


🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-14T01:04:18.108Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder has decided not to implement live collaboration features due to child safety concerns, despite it being a long-desired feature. They plan to revisit this only when they have server infrastructure for proper moderation (session logging, content filtering, abuse reporting, human review teams). They understand that client-side moderation, parental controls, and age verification can be easily bypassed by children.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only `@-mention` the requester if the actor is a human user; do not `@-mention` bots to avoid triggering bot back-and-forth and comment spam.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T02:32:52.161Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder does not want CodeRabbit to use  mode unless explicitly requested. Plan mode should only be activated when the user specifically asks for code changes or PR creation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui: For CI comment hygiene, prefer not mentioning bot/app requesters in the Mega PR Test & Analysis sticky comment; only mention humans. Track such behavior changes via a GitHub issue assigned to supervoidcoder with backlinks to the initiating PR and comment.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder plans to implement the Boxy AI assistant as an addon (rather than core code) because addons provide unified access to all editor components (scratch-blocks, GUI, paint editor), encapsulated development, built-in toggleability, and settings persistence—making them ideal for features that need cross-cutting concerns and user control.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.386Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui workflow preference: Open tracking issues for CI/automation behavior changes; assign to supervoidcoder; include backlinks to the PR and the exact comment requesting the change.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T21:20:08.837Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (“void”) prefers single, complete PRs over multi-part (“Part 1/2”) submissions. If a split is unavoidable, they want explicit linkage and gating before approval.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-11T21:39:58.878Z
Learning: In OmniBlocks/scratch-gui, CodeRabbit must not claim to have edited repository files or committed changes. Scripts run in a sandbox environment and can read/analyze code, but file modifications are not persisted to the repository. Only provide manual steps or code/diff when asked, never imply repository changes occurred.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:55:33.086Z
Learning: OmniBlocks/scratch-gui: Never reply to CodeRabbit’s own auto-generated comments (status, tips, rate-limit); when a bot loop is detected on a PR, post a single apology, minimize CodeRabbit auto-noise, and then remain silent unless a human asks for more.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-11T22:32:35.581Z
Learning: In OmniBlocks/scratch-gui, issue `#701` was 8to16's apology for pranks (label wars, bug godzillas, etc.) in January 2026. They requested a cleanup CI workflow to help detect and prevent similar disruptive content patterns in the future.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:34:24.309Z
Learning: CodeRabbit experienced a spam bug on PR `#309` in OmniBlocks/scratch-gui where it posted 11 duplicate "no user input to reply to" messages. The spam was triggered by bot comments from github-actions and wellcode-ai. The comments were successfully minimized using GitHub GraphQL API mutations with the OFF_TOPIC classifier.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

💡 Use @coderabbitai plan to create a plan for code changes

@supervoidcoder
Copy link
Member

no worries i should've said this earlier but the fact i was gone for hours and the first time i log in.... IT'S LITERALLY EXACTLY WHEN THIS IS MERGED WAHH LOL @coderabbitai

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Tip

For best results, initiate chat on the files or code changes.

@supervoidcoder Murphy's Law strikes again! 😅 Of all the moments to log in, you picked the exact second this merged—that's legendary bad timing!

The universe really said "hey void, watch this" and hit the merge button right as you opened GitHub. 🎯😂

But hey, at least GitHub says it's auto-mergeable, so the conflict resolution should be painless! Just need to line up both extensions in the array and you're golden. Still... that timing though. Chef's kiss level of unfortunate. 🐇✨


🧠 Learnings used
Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-04T01:42:28.102Z
Learning: OmniBlocks/scratch-gui: supervoidcoder is considering implementing local-network-only live collaboration (similar to Snapdrop) for OmniBlocks, which would allow collaboration only between peers on the same local network with physical proximity required. This approach is acceptable with proper safeguards: content filtering libraries on all text (comments, variable names, sprite names), prominent "supervised use" warnings, blocking non-local IP ranges, and documentation positioning it as a classroom/home feature requiring adult oversight. This differs from general internet-based live collaboration which remains rejected due to child safety concerns.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-28T03:54:03.336Z
Learning: OmniBlocks/scratch-gui preference: supervoidcoder wants energetic, playful tone in CI sticky comments (emojis, fun copy), while preserving single-comment strategy and not `@-mentioning` bots.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T23:09:09.556Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder explicitly wants CodeRabbit to never use  or "plan mode" unless they ask for it; when they request code, paste the full file or diff directly in the comment without invoking plan mode.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-14T01:04:18.108Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder has decided not to implement live collaboration features due to child safety concerns, despite it being a long-desired feature. They plan to revisit this only when they have server infrastructure for proper moderation (session logging, content filtering, abuse reporting, human review teams). They understand that client-side moderation, parental controls, and age verification can be easily bypassed by children.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T02:01:48.684Z
Learning: OmniBlocks/scratch-gui CI preference: In the "Mega PR Test & Analysis" sticky comment, only `@-mention` the requester if the actor is a human user; do not `@-mention` bots to avoid triggering bot back-and-forth and comment spam.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T02:32:52.161Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder does not want CodeRabbit to use  mode unless explicitly requested. Plan mode should only be activated when the user specifically asks for code changes or PR creation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-02T20:01:55.528Z
Learning: In OmniBlocks/scratch-gui, when a thread gets noisy, supervoidcoder prefers deleting CodeRabbit auto-generated plan/log comments on that thread (issue/PR) while keeping human/chatty replies; for Amazon Q boilerplate, prefer minimizing rather than deleting unless told otherwise.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:50:28.065Z
Learning: OmniBlocks/scratch-gui: When cleaning PR noise, prefer minimizing CodeRabbit auto-generated comments matching headers like "This is an auto-generated reply by CodeRabbit", "Rate Limit Exceeded", and "automated status update", while preserving human-directed conversation.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder plans to implement the Boxy AI assistant as an addon (rather than core code) because addons provide unified access to all editor components (scratch-blocks, GUI, paint editor), encapsulated development, built-in toggleability, and settings persistence—making them ideal for features that need cross-cutting concerns and user control.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui: For CI comment hygiene, prefer not mentioning bot/app requesters in the Mega PR Test & Analysis sticky comment; only mention humans. Track such behavior changes via a GitHub issue assigned to supervoidcoder with backlinks to the initiating PR and comment.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-01T12:10:19.386Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers a division of labor where Amazon Q handles fast review for ethics and project vision concerns, while CodeRabbit performs deep technical review of code quality, security, architecture, and implementation details.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:48:23.435Z
Learning: OmniBlocks/scratch-gui workflow preference: Open tracking issues for CI/automation behavior changes; assign to supervoidcoder; include backlinks to the PR and the exact comment requesting the change.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:39:43.656Z
Learning: OmniBlocks/scratch-gui PR `#607` (January 2026): Amazon Q was asked to "Add Boxy to Sprite Library" but created a complete disaster: (1) rewrote entire app from scratch removing 1,782 net lines, (2) broke build with webpack 4→5 migration and dependency hell, (3) never modified sprites.json to actually register the sprite, (4) created a generic flat 48×48px AI-generated "box with smiley face" instead of using the real detailed 270×280px OmniBlocks Boxy mascot that already existed in src/lib/default-project/Boxy.svg with brand gradient (`#0067bb`→#00ba87), pixelated yellow eyes, and robot design. Task should have been: add 4 SVG files + one sprites.json entry.
<!-- [add_learning]
In OmniBlocks/scratch-gui, the real Boxy mascot is a detailed 270×280px robot character with OmniBlocks brand gradient (`#0067bb` blue → `#00ba87` aqua), yellow pixelated rectangle eyes (`#ffcd00`), green rectangular mouth (`#00ff2a`), two antenna arms, and indicator lights. Located at src/lib/default-project/Boxy.svg with animated variations at src/components/menu-bar/Boxy-advanced*.svg. It's NOT a generic flat smiley-face box.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T21:20:08.837Z
Learning: In the OmniBlocks/scratch-gui repository, supervoidcoder (“void”) prefers single, complete PRs over multi-part (“Part 1/2”) submissions. If a split is unavoidable, they want explicit linkage and gating before approval.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-11T21:39:58.878Z
Learning: In OmniBlocks/scratch-gui, CodeRabbit must not claim to have edited repository files or committed changes. Scripts run in a sandbox environment and can read/analyze code, but file modifications are not persisted to the repository. Only provide manual steps or code/diff when asked, never imply repository changes occurred.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:55:33.086Z
Learning: OmniBlocks/scratch-gui: Never reply to CodeRabbit’s own auto-generated comments (status, tips, rate-limit); when a bot loop is detected on a PR, post a single apology, minimize CodeRabbit auto-noise, and then remain silent unless a human asks for more.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-05T01:34:24.309Z
Learning: CodeRabbit experienced a spam bug on PR `#309` in OmniBlocks/scratch-gui where it posted 11 duplicate "no user input to reply to" messages. The spam was triggered by bot comments from github-actions and wellcode-ai. The comments were successfully minimized using GitHub GraphQL API mutations with the OFF_TOPIC classifier.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:28:02.495Z
Learning: OmniBlocks/scratch-gui: On closed pull requests, CodeRabbit must remain completely silent even if new CI/bot comments appear; do not reply to github-actions or any automated posts.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-11T22:32:35.581Z
Learning: In OmniBlocks/scratch-gui, issue `#701` was 8to16's apology for pranks (label wars, bug godzillas, etc.) in January 2026. They requested a cleanup CI workflow to help detect and prevent similar disruptive content patterns in the future.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-22T19:01:57.123Z
Learning: In the OmniBlocks/scratch-gui repository, team member supervoidcoder can be called "void" in reviews and conversations.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-13T22:43:34.163Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder prefers React over Svelte for UI development (React is the framework they know and want to use consistently).

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 519
File: src/playground/index.ejs:176-176
Timestamp: 2025-12-05T17:47:27.981Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder's Scratch username is scratchcode1_2_3.

Learnt from: 8to16
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T16:41:25.038Z
Learning: In OmniBlocks/scratch-gui, user 8to16 (ampelectrecuted) does not want CodeRabbit to use  mode or agent features, similar to supervoidcoder's preference. Only use normal chat responses unless explicitly requested otherwise.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-18T22:18:13.164Z
Learning: For OmniBlocks/scratch-gui small features, supervoidcoder prefers GUI-only changes that avoid modifying scratch-blocks; deliver as a single, self-contained PR.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-10-06T23:37:51.374Z
Learning: In OmniBlocks scratch-gui, custom extension library items must include `extensionURL`; otherwise the loader tries to load `extensionId` as a URL/built-in id and fails.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-12-26T23:12:25.596Z
Learning: OmniBlocks/scratch-gui PR `#576`: The repository runs Jest 29 for unit/integration tests and currently lacks a Babel transform and babel.config.js; adding babel-jest and a transform in package.json plus a babel.config.js is required for importing ESM modules from src (e.g., src/addons/addons/middle-click-popup/WorkspaceQuerier.js) in tests.

Learnt from: github-actions[bot]
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-10T09:53:07.481Z
Learning: OmniBlocks/scratch-gui PR `#577`: Jest 29 fails with “Cannot use import statement outside a module” because package.json lacks babel-jest and a jest.transform mapping. .babelrc exists and is compatible. Fix by adding "babel-jest": "^29.7.0" and "transform": { "^.+\\.[jt]sx?$": "babel-jest" } (optionally set "testEnvironment": "jsdom").

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2025-11-20T01:45:53.675Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder is planning to expand OmniBlocks from a Scratch mod into a full IDE, requiring support for multiple file types beyond just block-based projects. The primary project format will use the `.omb` extension, with potential for additional extensions in the `omb` namespace (e.g., `.ombc`, `.ombs`) as IDE features are added.

Learnt from: supervoidcoder
Repo: OmniBlocks/scratch-gui PR: 0
File: :0-0
Timestamp: 2026-01-28T01:33:08.618Z
Learning: In OmniBlocks/scratch-gui, supervoidcoder wants to rebrand "Addons" as a "Features" menu or similar to make toggleable functionality feel like first-party features rather than lazy third-party mods. The goal is to keep the technical benefits of the addon system while improving the UX/branding so marquee features like Boxy AI feel premium and integrated, not bolted-on.

💡 Use @coderabbitai plan to create a plan for code changes

@coderabbitai coderabbitai bot added needs-careful-testing Requires special attention: needs careful-testing review-effort-3 Standard review (30-60 min) labels Jan 28, 2026
github-actions bot added a commit that referenced this pull request Jan 28, 2026
github-actions bot added a commit that referenced this pull request Jan 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-careful-testing Requires special attention: needs careful-testing review-effort-3 Standard review (30-60 min)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants