# Compatibility · 0.2.0

Implemented does not mean all native Scratch workflows have been exercised with an unpacked Chrome installation. That remaining verification is explicit below.

| Feature            | Behavior                                                                                                              | Coverage / limits                                                                                                                                                                                              |
| ------------------ | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Workbench & popup  | Dark default, three themes/accents, live preview, numbered navigation, useful feature controls                        | Browser visual review; new defaults preserve explicit saved theme choices. Narrow viewport override was ineffective in the connected browser; responsive CSS needs manual mobile-width QA.                     |
| Native redesign    | Raised cards/surfaces, clearer headers/search, deeper dark palette, focused microinteractions                         | Home, discovery, profiles, studios, My Stuff, messages and project containers. Native/third-party controls can retain their own appearance.                                                                    |
| Verification rules | Scratch API `scratchteam` flag; confirmed 1,001st follower; named viralgoose and -technify- selections                | Case-insensitive. Exactly 1,000 followers does not qualify. Tests cover boundary, errors, whitelist, staff and response validation.                                                                            |
| Badge coverage     | Eligible native username links across cards/comments/lists; profile heading; signed-in account name; late DOM content | Inline @mentions and links inside descriptions/comment bodies are excluded. No badges on avatar-only links, arbitrary prose, editable text, canvas, editor or unknown plain-text username layouts. Badge-only behavior on otherwise unsupported Scratch pages. |
| Badge provenance   | Tooltip and accessible label explain BetterScratch recognition and the qualifying rule                                | Not identity verification or an official Scratch endorsement. API snapshots/cache can lag account changes. Failed lookups remain unbadged until a subsequent load.                                             |
| API service        | Public user, follower and project GETs; credentials omitted; URL allowlist constructed from validated usernames       | Added host permission only for api.scratch.mit.edu. Serial/paced requests, timeout, cache, deduplication and rate-limit cooldown; queued requests recheck enabled/data preferences.                            |
| Public insights    | Profile page and Statistics uWidget; project count, follower lower bound, aggregate views/loves/favorites/remixes     | Up to 40 public projects. Under-limit responses are complete snapshots; capped responses explicitly show sample coverage. No lifetime-total invention or private projects.                                     |
| Follower activity  | Newly seen accounts in the sampled follower list over the last seven days; first check establishes a local baseline | Checked when stats are loaded. Displays tracking start and partial coverage. These are observed list changes, not confirmed follow dates or historical totals.                                                                                   |
| Project shelf      | Local save/remove action, homepage shelf, workbench list; 100-item cap, cross-tab storage refresh                     | Does not perform Scratch favorites/shares/deletes. Oldest saved link is dropped if adding beyond 100; source projects remain untouched.                                                                        |
| Search/Explore     | Refined current `#projectBox` grid, loaded-title filter, counts update with newly loaded results                      | Native Search DOM inspected live; tested for new rows and cleanup. Filters loaded data only and preserves native sort controls.                                                                                |
| My Stuff           | Refined native list, density, loaded-title filter and live counts                                                     | Signed-in native selectors and edit/share/delete regression checks still required. No inferred dates, API private inventory, forced sorting or reparenting.                                                    |
| uWidget            | Welcome, API Statistics, local Recent Activity/Continue, Custom, Hidden; two heights                                  | Local activity means project-page visits, not edits or private account feed. Existing native intro/notices/community sections remain.                                                                          |
| Sidebar            | Collapsible homepage navigation, inline stats categories, username lookup, settings                                               | Overview, project rankings, engagement and local saved projects. Rankings cover at most 40 returned public projects. Hidden below 901 px; live Chrome dashboard review pending.                                                                                                                               |
| Project viewing    | Distraction-free mode; shelf can be enabled independently                                                             | Native fullscreen kept. Custom theater scaling remains deferred to avoid canvas-coordinate errors.                                                                                                             |
| Editor             | Complete exclusion for editor/embed/fullscreen routes and editor DOM                                                  | URL/DOM exclusion tested; native See inside transition observed live. Real edit/save/drag/execution regression tests remain.                                                                                   |
| Feature lifecycle  | Registry, late-anchor retry, replaced-host recovery, SPA URL detection, cleanup                                       | Compiled bundle tested against a Scratch-shaped DOM. Unknown mount points fail closed.                                                                                                                         |
| Preferences        | Per-key sync, JSON import/export, defaults/reset, reduced motion                                                      | Automated persistence and interaction checks. Live Chrome sync/quota/restart QA pending.                                                                                                                       |

## Remaining release checks

- Load the actual unpacked extension in Chrome and verify host permissions, worker lifecycle, CSP and messaging. The connected in-app browser cannot load the Chrome extension.
- Review the injected redesign while signed in, especially My Stuff, profile editing, studio management, messages, native menus, dark contrast, zoom and other-extension coexistence.
- Verify the new badge on real native layouts across comments, headers, dropdowns and infinite-scroll lists. Automatic badges are tested with fixtures; live Chrome rendering remains unverified.
- English extension UI only. Native Scratch localization remains. No blanket claim of accessibility conformance or full-site dark-mode completeness.
- Original artwork/icons remain deliberate placeholders, not final branding.

## Evidence and data sources

Live public reads confirmed the user `scratchteam` field, follower pagination at offset 1000, and project engagement fields. The executable `scripts/check-public-api.mjs` ran the actual service successfully against viralgoose (9 returned public projects at the time of checking) and griffpatch (follower threshold satisfied). These are dated verification observations, not numbers embedded into the product.

Live native DOM inspection confirmed homepage mounts, project-player/editor boundaries and Search `#projectBox .grid` / `.thumbnail-title a` selectors. Profile markup and account-menu source were inspected for usernames.

Primary sources: [Scratch REST API](https://github.com/scratchfoundation/scratch-rest-api), [public user endpoint](https://api.scratch.mit.edu/users/griffpatch), [public follower threshold](https://api.scratch.mit.edu/users/griffpatch/followers?limit=1&offset=1000), [public project list](https://api.scratch.mit.edu/users/viralgoose/projects?limit=40&offset=0), [Scratch navigation source](https://github.com/scratchfoundation/scratch-www/blob/develop/src/components/navigation/www/accountnav.jsx). Public APIs and markup can change; response validation and unavailable states are intentional.

Remix tree: available in project tools, with on-demand branches, 40-item pagination, parent/original navigation, thumbnail links, retry and public-data opt-out. Only public projects returned by Scratch can appear; deleted/private nodes and complete historical trees are unavailable. Automated branch and paging checks plus fixture visual review passed; unpacked Chrome integration remains to be checked.

## Trending and popular projects

The homepage sidebar and workbench Statistics section include a Trending projects view. It reads the first 40 projects from Scratch’s public Explore API in trending or popular mode. The list can retain Scratch’s order or be sorted by views, loves, or favorites. Ranks apply only to the loaded sample. Global and country creator leaderboards are not implemented: the public API does not provide the indexed account dataset needed for them.

The API uses the existing five-minute cache, paced request queue, public-data opt-out, and host permission. Unsupported rows and duplicates are excluded. Automated service and UI checks cover cache reuse, invalid feed requests, sample sorting, mode changes, and disabled access. Live unpacked Chrome QA is still needed.
