Releases: heznpc/skillBridge
Releases · heznpc/skillBridge
v3.5.6
What's Changed
- ci: close the gap that let stale Skilljar selectors ship by @heznpc in #88
- chore: drop ghost slug, surface extendedThinking deck in API course by @heznpc in #89
- chore: simplify review follow-ups (memoize sort, cache npm, trim comments) by @heznpc in #90
- fix(cd): idempotent CWS deploy — skip if version already tagged by @heznpc in #91
- fix: v3.5.6 production hotfixes — 6 audit-surfaced bugs + drop tabs permission by @heznpc in #92
Full Changelog: v3.5.5...v3.5.6
v3.5.5
What's Changed
- docs: sync README and landing page with v3.5.4 / 10 Premium languages by @heznpc in #70
- ci: gracefully skip CWS/AMO deploys when secrets are missing by @heznpc in #71
- chore: add store-update skill overlay and bump store listing to v3.5.4 by @heznpc in #72
- fix(ci): grant docs.yml write permission and align node version by @heznpc in #73
- fix(landing): render real Unicode in language tags instead of literal \u escapes by @heznpc in #74
- fix(cd): repair file change detection and switch CWS to draft-only upload by @heznpc in #75
- fix(docs): correct case in github.io landing page URLs (skillbridge -> skillBridge) by @heznpc in #76
- refactor(ci): clean up CD and docs workflows after /simplify review by @heznpc in #77
- feat: platform detection module + yt client version override by @heznpc in #78
- chore: pending local updates (docs, CI, fixes) by @heznpc in #81
- fix: harden sanitizer, CI, docs cleanup by @heznpc in #79
- chore: add review notes by @heznpc in #86
- fix: refresh stale Skilljar course-page selectors, bump to 3.5.5 by @heznpc in #87
Full Changelog: v3.5.4...v3.5.5
v3.5.4 — CI Modernization, Zero Lint Warnings, Permission Cleanup
Changes
CI Modernization
- Upgraded from Node.js 20 to 22 LTS — preempts forced migration on June 2, 2026
Code Quality
- ESLint warnings: 24 → 0 — added
caughtErrorsIgnorePatternto config, fixed all unused vars across 12 files - Zero errors, zero warnings across entire codebase
Permission Cleanup
- Removed unused
activeTabpermission — not referenced anywhere in source code, reduces Chrome Web Store review friction and attack surface
Full Changelog: v3.5.3...v3.5.4
v3.5.3 — Medium/Low Hardening: Caps, Cleanup, Guards, Tests
Fixes
Memory & Cleanup
- originalComments Map cap: Size check at insertion point (5000 limit, consistent with other Maps)
- history.pushState/replaceState cleanup: Original methods restored on
pagehideto prevent wrapper stacking across bfcache navigations
Performance
- YouTube subtitle efficiency: Skip retry timers on pages without YouTube iframes, reduce retries from 5 to 3, guard against calling destroyed manager, clean up timers in
destroy()
Robustness
- window._sb null guard: All 5 consumer modules (code-comments, sidebar-chat, text-selection, header-controls, keyboard-shortcuts) now fail gracefully with a warning if
_sbis not initialized — prevents cascading errors on load-order issues
Test Coverage
- 11 new tests for postMessage handling and pendingCallbacks:
- Nonce validation (correct/wrong/missing/different source)
- pendingCallbacks lifecycle (_ts timestamps, stale eviction, size cap)
- Callback dispatch and unknown ID handling
- 309 tests total, all passing
Full Changelog: v3.5.2...v3.5.3
v3.5.2 — Critical: Load Order Fix, Memory Leaks, XSS Boundary
Critical Fixes
Manifest Load Order Bug (all users affected)
constants.js was loading before selectors.js, causing EXAM_SKIP_SELECTORS and all subsequent constants to throw ReferenceError. Exam mode answer protection was completely broken — answer choices were being translated on quiz/exam pages, which could alter meaning.
pendingCallbacks Memory Leak
The pendingCallbacks Map in translator.js could grow unbounded when requests failed outside the timeout path. Added:
- Size cap (100 concurrent callbacks)
- Stale entry eviction (auto-cleanup after 2 minutes)
High-Priority Fixes
- XSS error boundary: gemini-block
innerHTMLassignment now wrapped in try-catch with fallback to original HTML - Await cache/quota operations:
_cleanupExpiredCache()and_checkStorageQuota()were fire-and-forget ininitialize(), errors silently swallowed - Offline queue leak:
restoreOriginal()now clears_offlinePendingItemsto prevent memory growth on repeated language switches
Code Quality
- ESLint warnings reduced from 27 to 10
let→constfor Maps that are never reassigned- Unused variables prefixed with
_per convention
Full Changelog: v3.5.1...v3.5.2
v3.5.1 — Code Review Fixes, Skilljar 2026 Selectors & Test Coverage
What's Changed
Bug Fixes
- Eviction bug: Fixed storage quota eviction formula that could delete wrong entries
- Unbounded offline queue: Added
PENDING_NODES_MAXcap to prevent memory growth - Race condition: Fixed verify queue lock not releasing on bridge-ready edge case
- Maintenance workflow: Added
issues: writepermission
Enhancements
- Skilljar 2026 selectors: AI Tutor, Course Families, Course Ratings, AI Feedback
- AI Tutor exclusion: Prevents DOM conflicts by excluding AI Tutor widget from translation
- Bilingual tutor prompt: SkillBridge Tutor now proactively clarifies AI/ML terms across languages
Test Coverage
- Added tests for
_rateLimiter,fetchWithRetry,registerAlarms - Added tests for offline queue cap, detached node filtering, Map size cap
- Added tests for exam page detection patterns, storage eviction logic
- Added tests for all new Skilljar selectors
- 298 tests total, all passing
Maintenance
- Fixed Prettier formatting
- Synced
package.jsonversion (was stuck at 3.4.0) - Added release automation workflow
Full Changelog: v3.5.0...v3.5.1
v3.5.0 — Infrastructure Hardening, New Features & Deployment Pipeline
What's New
Features
- Per-Lesson Term Preview — floating card shows 6 key terms when entering a lesson, auto-dismisses after 15s, remembers dismissal per lesson
- PDF Export — export any translated lesson as a clean, print-friendly PDF from the sidebar header
- Offline Translation Cache — skip Google Translate when offline (cache-only mode), auto-retry pending items on reconnect
- Flashcard State Persistence — progress saved per course+language with stable card-text keys, current position restored on reload
Infrastructure
- IndexedDB Quota Management —
navigator.storage.estimate()check on init, auto-eviction of oldest 30% entries when storage is high,QuotaExceededErrorrecovery with user warning banner (11 languages) - Firefox AMO CD Workflow —
cd-firefox.ymlwithweb-ext@8 signautomation (requiresAMO_API_KEY/AMO_API_SECRETsecrets) - Chrome i18n Expansion — 22 new
_locales/directories, now covering 33 languages total
Docs
- CHANGELOG.md — v1.0.0–v3.4.0 with actual git commit dates
- Removed
ROADMAP.md(stale) and cleaned all references - Updated README, landing page, and 6 i18n READMEs to v3.5.0
Stats
- 32 files changed, +966 -190 lines
- 262/262 tests passing
- 0 lint errors
Full diff: v3.4.0...v3.5.0
v3.4.0 — Architecture Hardening & Full Course Coverage
What's New
Architecture & Module Decomposition
- Extracted 3 modules from
content.js(-280 lines):protected-terms.js,gemini-block.js,code-comments.js - Deduplicated
escapeHtml(single canonical source) - Removed dead code, tightened public API surfaces
Full Anthropic Academy Coverage (16/16 Courses)
- All 16 Skilljar courses now fully mapped with correct URL slugs
- Added
claudeCoworkandsubagentsdictionary sections to all 10 premium languages - Course-specific flashcard loading via
FLASHCARD_COURSE_MAPwith longest-first matching - Fixed slug substring collision bug (
ai-fluencyvsai-fluency-for-educators)
i18n Completeness
- zh-TW, pt-BR, ru, vi added to all 19 UI label objects
- All 10 premium languages now have complete UI translations
- Fixed hardcoded Korean-only error fallback in translator
RTL Support (Arabic & Hebrew)
dir="rtl"attribute now set on<html>for Arabic/Hebrew- Full CSS RTL section for sidebar, FAB, chat, progress bar, flashcards, and more
Offline Graceful Degradation
- Network status tracking via
online/offlineevents - Amber offline banner with localized message
- AI Tutor shows offline notice instead of failing silently
Developer Experience
- ESLint 9 + Prettier — enforced in CI, 0 errors
- esbuild bundling — optional
npm run build:bundle(43% JS size reduction) - JSDoc type annotations — translator, gemini-block, protected-terms, youtube-subtitles
- Auto-docs —
npm run docs+ GitHub Actions workflow auto-updates version/language info - Constants sync —
npm run check:syncvalidates background/content constant consistency
Bug Fixes
- Flashcard
_rawSectionscache not invalidated on language switch flashcardCardsnot reassigned after async section fetchoriginalCommentsMap missing size cap (inconsistent with other Maps)web_accessible_resourcesnarrowed (assets/*→assets/icons/*)- Removed dead
offlineflag from background.js error responses
Stats
- 36 files changed, +3,326 / -501 lines (feature code)
- 36 files formatted with Prettier (+1,975 / -1,187 lines)
- 262 tests passing, 0 ESLint errors
- Content bundle: 169.6 KB → 97.1 KB (43% smaller)
v2.1.0 — Certification Safety, New Courses, UX Overhaul
What's New
Certification Exam Safety
- Kill-switch for proctored exams: Extension fully disables on CCA-F and other proctored certification pages — no translation, no UI, no AI tutor — to prevent being flagged as a cheating tool
- Course-completion quizzes retain existing exam mode (answer choice protection)
New Course Support
- Added translations for Introduction to Claude Cowork, Introduction to subagents, and MCP Advanced Topics across all 6 premium languages
- New protected terms: Cowork, Dispatch, Computer Use, Subagent
UX Improvements
- Onboarding for all first-time visitors — including English speakers who previously saw nothing
- FAB pulse animation on first visit to draw attention to the AI Tutor
- Example question chips in sidebar for new users
- Error retry button in AI Tutor chat
- Exam warning on sidebar open (not after first message)
- History clear confirmation dialog
- Mobile responsive — sidebar goes full-width on screens ≤600px
- Localized aria-labels for dark toggle, FAB, sidebar buttons (7 languages)
Infrastructure
- SPA navigation handling: popstate, hashchange, pushState/replaceState detection — translations re-apply on route change
- MutationObserver reconnect after navigating away from certification pages
- Expired cache cleanup: stale IndexedDB entries deleted on access
- 4 new tests for CERT_DISABLE_PATTERNS (certification vs course URL separation)
- Firefox dist synced
- README, ROADMAP, CONTRIBUTING, TESTING docs updated
Bug Fixes
- Fixed domObserver not reconnecting after cert page → course page SPA navigation
- Fixed greeting not re-localizing on language switch (children count check)
- Moved inline style to CSS class
Full Changelog
v2.0.0 — Exam Mode, Firefox Support, Security Hardening
What's New
🎓 Exam Mode
- Auto-detect certification/quiz/assessment pages via URL patterns and DOM selectors
- Answer choices (radio/checkbox labels) are not translated to preserve academic integrity
- Exam mode banner warns users that answers stay in English
- AI Tutor switches to exam-safe mode — refuses to help with answers directly
🦊 Firefox & Edge Support
- Browser polyfill for cross-browser API compatibility
npm run build:firefoxgenerates a Firefox-compatible build- Edge works via Chromium compatibility (no changes needed)
🔒 Security Hardening
- DOM-based XSS sanitizer (replaces regex approach) with attribute allowlist
hrefallowlist: onlyhttp://,https://,#permitted — blocksjavascript:,data:, entity-encoding bypassesstyleattribute stripping prevents CSS-based UI redressing- FETCH_URL domain allowlist with subdomain matching
♿ Accessibility (WCAG 2.1 AA)
- ARIA roles and labels on all interactive elements
- Keyboard-navigable FAB button
- Progress toast with
role="status"andaria-live="polite"
⌨️ Keyboard Shortcuts
Ctrl+Shift+Stoggle AI Tutor sidebarCtrl+Shift+Ltoggle dark modeCtrl+Shift+/show shortcut help overlayEscapeclose panel,/focus chat input
⚡ Performance
- Viewport-first translation with
requestIdleCallbackchunking - GT queue cap (200 items) prevents unbounded memory growth
pruneOriginalTexts()cleans detached DOM elements- Centralized Skilljar selectors for DOM change resilience
🔧 Maintenance Automation
- Chrome Alarms: cache cleanup (every 24h), version check (every 7d)
- Automatic badge notification when new version is available
📚 Exam UI Terms
- 16 exam terms (Pass, Fail, Score, Retake, etc.) added to all 6 premium language dictionaries
Full Changelog: v1.0.1...v2.0.0