Skip to content

CodeLedger v1.2.0

Choose a tag to compare

@github-actions github-actions released this 13 May 07:17
· 73 commits to main since this release
8553164

[1.2.0] — 2026-05-13

Added

  • AI Review Queue — Queue Missing button — dedicated button that queues only problems with no AI review yet, separate from the full re-queue action.
  • AI Review Queue — Requeue All button — queues every problem for re-review (including those already reviewed); asks for confirmation before submitting.
  • AI Review Queue — Cancel Queue button — gracefully cancels all pending reviews: any review currently processing finishes naturally, then the rest are removed. Button appears only when there are pending or processing items.
  • AI Review Queue — built-in dedupenqueueReview() now checks for an existing pending/processing entry before adding; duplicate submissions are silently skipped and reported as skipped in the response.
  • GitHub Pages heatmap full width — activity heatmap now fills the full card width. Cell size is computed from available width via a --hm-cell CSS variable set by a resizeHeatmap() function (minimum 8 px); re-runs on every window resize.
  • User repo README — social banner, logo & badges — generated README.md now opens with the CodeLedger social preview image, the extension logo, and four flat-square shields (total / easy / medium / hard counts) with difficulty colours, all using raw GitHub image links.
  • Auto-save settings to repo — every settings change in the Library UI now calls markSettingsPendingCommit() so the next problem commit automatically includes .codeledger/config.json with the updated portable settings. Manual "Force Commit Settings" and "Backup Config" buttons continue to work as before.
  • AI Behaviour Bank — personal memory layer for the AI assistant: Knowledge Bank (insights), user-defined Skills (trigger on command/difficulty/after-solve), and a learning Roadmap. All context is automatically injected into AI chat conversations. Accessible as a full Library tab.
  • MCP Tool-calling — AI assistant can now invoke tools mid-conversation: save/recall Knowledge Bank insights, open problems, set roadmap goals, list and delete chats. Tools are configurable per-provider in Settings → AI.
  • Cross-device AI chat sync — every AI conversation is committed as chats/YYYY-MM-DD-HH-mm-ss-{id}.md with YAML frontmatter. Bidirectional sync via GitHub on every startup; deleted chats are tombstoned and removed from remote.
  • Rolling GitHub backups — automatically snapshot local problems + settings to backups/YYYY-MM-DD-HH-mm-ss.json in the repo. Configurable interval (default every 20 commits) and retention count (default 10). Full restore from the Library Settings → Backups panel.
  • Deduplication engineduplicate-detector.js finds same-slug same-language duplicates; ai-deduplication.js generates AI merge proposals stored on the problem. A dedicated DedupReviewQueue modal lets users approve/reject proposed merges.
  • MissingMetadataModal — review queue for problems missing tags or difficulty; supports individual refresh, per-problem ignore, and bulk ignore/unignore with persistent state.
  • Setup completion notification — Library sidebar and main content area show a dismissable amber banner if GitHub is not connected or no repo is linked, with a direct link to the Welcome page.
  • Welcome page diagnostic tool — second tab "Diagnostics & Migration" scans the repo for layout version mismatches, missing infra files, and uncommitted problems; offers one-click repair and bulk/individual migration commit.
  • GitHub handler refactorcommit-builder.js (tree items + commit payload), api-client.js (REST wrappers), and infra-builder.js (README/index.html generation) extracted from the monolithic github/index.js.
  • Landing page v1.2 — dynamic "Open Library" links (extension URL when installed, web URL otherwise); "What's new in v1.2" features section; new FAQ entries for Behaviour Bank, MCP tools, sync, and migration.
  • Prettier formatter.prettierrc config; npm run format script formats all src/**/*.js and worker/public/assets/**/*.js files.
  • New repository path layout v2problems/{slug}/{slug}.{ext} (no platform subdir without canonical); problems/{slug}/{platform}/{slug}.{ext} when canonical is assigned. Solution files named after slug (two-sum.py) instead of verbose language name (Python3.py).
  • Commit taxonomy — structured commit messages: [solved], [update], [comprehensive-update], [maintenance], [chore], [init] via src/core/commit-messages.js.
  • Bulk progress-page import → GitHub — imported problems now build proper v2 paths and READMEs; a "Commit N to GitHub" button appears after import that fires a [comprehensive-update] commit.
  • Migration managerMIGRATE_REPO message for layout v1→v2 migration, RESET_REPO for full repo rebuild (self-healing). Finds old topics/ paths and replaces them atomically via GitHub Trees API.
  • Migration UI in Settings → GitHub — "Check layout version", "Migrate to v2 layout", and "Full rebuild" buttons.
  • Extension update detection on startup — compares manifest.version against stored version; sets extensionUpdated flag so UI can prompt user to run migration.
  • Slash-command autocomplete in floating AI assistant — typing / shows a dropdown of available commands; clicking inserts the command.
  • index.html and root README.md always regenerated on every GitHub commit (no longer "only if missing"). GitHub Trees API deduplicates unchanged blobs automatically.
  • index.json layout stats — now includes layoutVersion, byPlatform, and byLang breakdown fields.
  • Root README.md generated in user repos linking to their GitHub Pages stats dashboard (supports custom domains).
  • Under Construction badge in settings section renderer — sections with underConstruction: true show an amber badge and are visually marked.
  • Missing Metadata review modal — surfaces problems missing tags/difficulty and queues metadata refresh from the background.
  • Dedup review queue — same-language duplicate candidates now appear in a dedicated review modal with approve/reject actions.
  • AI merge proposals — same-language duplicates can generate an AI merge proposal that is stored on the problem and reviewed before applying.
  • Mirror repository settings — a dedicated settings panel manages additional git mirrors alongside the primary repository.
  • Cross-device auto-sync — periodic background sync is scheduled with chrome.alarms so remote changes are picked up automatically.
  • LeetCode: non-accepted submissions could auto-sync — submission detail pages now check statusCode === 10 (Accepted) before auto-committing; WA / TLE / Runtime Error submissions are silently skipped. Manual "Sync to Ledger" still works on any submission.
  • LeetCode: sync button appearance delay — replaced the 1200 ms setTimeout retry with a MutationObserver that injects the button the instant the action button row enters the DOM; button now appears as soon as the page renders.
  • LeetCode: Monaco code extraction — added _getCodeFromMonaco() fallback (window.monaco.editor.getModels()[0].getValue()) for cases where GraphQL returns an empty code field.
  • LeetCode: copy button only copied visible linesqol.js copy button now uses the Monaco model API as primary source, getting the full file regardless of scroll position; DOM .view-line scraping kept as fallback for edge cases.
  • LeetCode: copy button produced dirty code — both the copy button and _getCodeFromMonaco() now strip whitespace-visualization characters Monaco injects (U+00B7 middle dot, U+200C ZWNJ, U+00A0 NBSP) so clipboard output is clean, runnable code.
  • Graph: scroll zoom snaps to min/max — replaced binary 0.9/1.1 zoom step with Math.exp(−deltaY × 0.001), making trackpad pinch-to-zoom smooth and proportional while keeping single mouse-wheel notch at ≈ 9.5 % per step.
  • Graph: zoom buttons+ and buttons in the toolbar for click-to-zoom (centered on canvas), grouped with the existing Fit view (▣) button.

Fixed

  • import() banned in MV3 service workers — all dynamic await import(...) calls inside service-worker.js removed and replaced with top-level static imports. Affected modules: ai-review-queue.js, ai-deduplication.js, backup-manager.js, migration-manager.js, api-client.js, and path-builder.js. Fixes "Queue AI Reviews" and "Backup" features that were silently failing in production.
  • AI Review Queue — IndexedDB version conflictai-review-queue.js was opening a "CodeLedger" database at version 1 while the browser had an existing version 2, causing a hard error on every queue operation. Database renamed to "codeledger-queue" to open fresh at version 1.
  • git.apiFetch not a function in PanelGit.js — two call sites replaced with a direct call to ghGetCurrentUser(token) from the statically imported api-client.js. Fixed the manual import preview and individual-sync path when github_owner was unset.
  • 422 non-fast-forward on sequential commitsGitHubHandler.commit() now retries up to 3 times (500 ms, then 1 000 ms back-off), fetching a fresh ref and rebuilding the tree on each retry.
  • Stale index.json showing 0 problems after full sync — a repair commit is now issued when the remote index contains an empty problems: [] but local problems are already committed.
  • Repo name forced to lowercaseGitHubOnboardingModal.js sanitize() no longer calls .toLowerCase(); the allowed-character regex updated to [^a-zA-Z0-9._-] to match GitHub's actual rules.
  • /errors command in AI assistant always showed "no errors" — raw error string from readTestFailures() now passed directly to expandChatVariables, bypassing normalizeList() which was converting the string to [].
  • Manual sync blocked by submission dedupforceCommit: isManual now bypasses the alreadyCommitted session-storage dedup check so the Sync button always commits.
  • AI floating panel overlapping LeetCode's submit bar — moved from bottom: 70px to bottom: 110px.
  • Bulk-imported problems had no READMEs and used old hardcoded topics/ paths — now uses solutionPath() + readmePath() from path-builder and builds a full README per problem.
  • GitHub avatar showed a placeholder instead of the real profile image — avatar is now hydrated from saved settings on startup and stored as a data URL when OAuth can fetch it.
  • Console logging was noisy when debug was disabledconsole.log / console.error are now gated behind the debug flag and re-enabled cleanly after OAuth.
  • index.json could throw on malformed remote content — remote sync now guards JSON parsing and falls back to an empty remote index.
  • providerId could be undefined in the AI review loop — the provider id is now scoped before use and falls back safely.

Changed

  • AI Review Queue stats display — replaced verbose paragraph list with a compact inline pill row that only shows non-zero counts; processing count highlighted in cyan.
  • handleQueueAllAIReviews now accepts a missingOnly flag — single function drives both "Queue Missing" and "Requeue All" to avoid duplicating logic.
  • Shift+Enter inserts newline in AI assistant input (previously single-line <input> — replaced with auto-growing <textarea>).
  • Solution files named after problem slug (two-sum.py) — solutionPath() no longer uses the verbose language name.
  • buildIndexJson includes layout version and per-platform / per-language stats.
  • LeetCode import now preserves every accepted submission — imports keep multiple languages and multiple accepted submissions instead of collapsing them too early.
  • Atomic chore commits include notes and AI chats — maintenance sync commits now bundle notes.md and ai-chats/*.json alongside problem files.
  • AI review tags are ordered by importance — tag presentation is now priority-based instead of alphabetical.

Removed

  • Old topics/{topic}/{slug}/ path pattern — migrated by MIGRATE_REPO.