Skip to content

CodeLedger v1.3.0

Choose a tag to compare

@github-actions github-actions released this 17 May 10:38
· 41 commits to main since this release
a37df58

[1.3.0] — 2026-05-17

Added

  • Per-method AI review — each code approach in a multi-method problem gets its own AI review. MethodCard renders per-method code + AI review inline in the Methods tab of ProblemModal. Clicking "Generate Review" triggers an immediate on-demand review for that method alone.
  • Per-method AI review queuehandleQueueAllAIReviews now enqueues ${problemId}::method::${index} entries for methods without a review. processAIReviewQueue detects the ::method:: pattern and processes them separately from problem-level reviews.
  • MAINTENANCE_COMMIT alarm — every 10 minutes the service worker batches all pending AI reviews, metadata edits, and notes updates into a single atomic chore commit instead of one commit per edit.
  • Bulk import resilience — individual-mode sync (onboarding commit-per-problem) persists its state to chrome.storage.local. If the browser closes mid-import, a BULK_IMPORT_RESUME alarm fires 45 seconds after the next browser open to automatically resume.
  • Onboarding progress bar — the "done" step of GitHubOnboardingModal now shows a live progress bar (current/total) streamed from the SW via a sync-keepalive port. "Start Coding" is always enabled; the user can close the modal and sync continues in the background.
  • Refresh README Stats button — new button in Settings → Git that commits a fresh index.json and triggers a full infra rebuild (README + index.html) from current local data, without needing a new problem commit. Useful after repo recreation or when stats are stale.
  • Config backup in every commit — every problem commit and every resync now bundles .codeledger/sync.json (portable settings), .codeledger/behaviour-bank.json, and .codeledger/roadmaps.json into the same atomic tree, keeping user configuration always in sync with the latest solve. GitHub's Trees API deduplicates unchanged blobs so there is no overhead when nothing changed.
  • Collapsible hints in problem READMEbuildProblemMarkdown() now emits a <details><summary>Hint N</summary> block for each hint stored on the problem. Hints are collapsed by default and work in both GitHub's file view and raw markdown.
  • Canonical path resolution at commit time_handleResyncAllInner pre-loads the canonical map and enriches each problem with its canonical ID before building file paths. Problems previously committed without canonical (e.g., via bulk importer) are now placed under problems/{canonicalId}/{platform}/ on resync.
  • Two-phase resync with stable commit history_handleResyncAllInner now categorises problems into newProblems (never committed) and maintenanceItems (committed but layout/content drifted). Phase A commits only new problems (individual backdated or bulk). Phase B issues a single maintenance commit that atomically writes new-layout files and deletes stale old paths via opts.deletes → GitHub Trees API sha: null. Each problem appears in history exactly once for its initial solve; all subsequent path renames or content updates land in a single maintenance commit per sync cycle — no duplicate commits, no orphaned files.
  • _committedPaths tracking — after every commit (regular solve, resync, maintenance) the problem's committed file paths are stored in IndexedDB. Future resyncs use these to compute the exact deletion set instead of guessing.
  • Remote file tree inference — on resync, GET /git/trees/{sha}?recursive=1 fetches the full repo tree once. _inferCommittedPaths() matches problem directory prefixes (including ::submissionId-style old paths) to locate all blobs belonging to a problem, enabling correct deletions even for problems committed before _committedPaths tracking started.
  • Landing page library linksdata-cl-open added to the nav Library link and the CTA button; landing.js already rewrites these to the extension URL when the extension is detected.
  • Landing page platform icons — LeetCode, GeeksForGeeks, and Codeforces chips now use actual favicons instead of emoji.

Changed

  • Problem description file renamed to README.mddescriptionPath() now returns {dir}/README.md instead of {dir}/{platformId}.md. GitHub automatically renders this when browsing the problem directory.
  • Infra bundled into the last meaningful commitindex.json, README.md, index.html, and .codeledger/* are included in whichever commit is already happening (last problem commit in individual mode, the bulk commit, the maintenance commit). No separate trailing infra commit is issued when problem commits are made. An infra-only commit is still issued when all problems are already up-to-date.
  • GitHub Pages "src" link uses v3 pathrepoFileUrl() now reconstructs the correct v3 path (problems/{canonicalId}/{platform}/README.md or problems/{platformId}/README.md) instead of the old v1 slug-based format.
  • Language label normalization on GitHub Pagespythondata → "Python (Pandas)", mysql → "MySQL", postgresql → "PostgreSQL", etc., for cleaner display in the Recent Solves table and badges.
  • Recent Solves date includes year — dates in a prior year now display as "Jan 5, 2024" instead of "Jan 5" to avoid ambiguity.
  • Removed AI "Progress Summary" from README — the AI-generated narrative block is no longer included in the generated repository README; it produced inconsistent output and added noise.
  • Welcome page — removed the Diagnostics & Migration tab and DiagnosticsPanel component. Path fixes and the two-phase resync make manual layout repair tools unnecessary.

Fixed

  • ::submissionId suffix in problem pathsplatformId() now strips the ::number suffix that the LeetCode bulk importer appended (e.g. lc-best-time-to-buy-and-sell-stock::1427680302lc-best-time-to-buy-and-sell-stock). Affected paths are corrected on the next resync via the maintenance commit.
  • Stale README stats (one-commit-lag)buildInfraFiles now accepts an indexMetaOverride parameter. Callers pass the freshly-built index.json data so README stats reflect the new problem count in the same commit rather than the previous state.
  • Stale paths not deleted on layout change — old problem files ({slug}.md, ::submissionId dirs, pre-canonical paths) are now explicitly deleted in the maintenance commit via opts.deletes, eliminating orphaned files that accumulated across layout versions.
  • GitHub App read:org 401/user/orgs returns 401 for GitHub App tokens that lack read:org scope. The onboarding modal now silently treats this as an empty org list instead of clearing the valid auth token.
  • Avatar CORS failure — removed the Authorization header from avatar CDN fetches in library.js; avatars.githubusercontent.com is a public CDN that blocks auth headers via CORS.
  • LaTeX rendering\times, \leq, \geq, \neq, \rightarrow, Greek letters, and other LaTeX symbols are now substituted to Unicode in AI review output via substituteLatex() in katex-stub.js. Applied in both renderMath() and inline parseMarkdown().
  • ProblemModal null notes crash — the Notes tab show guard now uses p?.notes safe navigation, preventing a crash when p is null during modal initialisation.
  • AI review batch size — background queue processes 2 items per alarm tick (was 10) to avoid rate-limiting AI providers during backfill.
  • On-demand AI review no longer commits immediatelyhandleRegenerateAIReview marks the problem as pending for the MAINTENANCE_COMMIT batch instead of making an individual commit per review.

See CHANGELOG.md for full details.