Repository navigation
Core test coverage to 100%, zero lint warnings, clearer Drive setup, 4 bug fixes - #12
Draft
harshabala wants to merge 9 commits into
Draft
harshabala wants to merge 9 commits into
harshabala wants to merge 9 commits into
Conversation
- Remove unused imports (legacy `h` from the pre-automatic JSX runtime, unused types) and a dead Open Library helper. - Replace `any` with real shapes: TMDb person/credit rows, logger args, scanner poster responses, settings validator, UI message payloads. - Attach `cause` to rethrown errors in llm.ts and keyCrypto.ts. - App.tsx: drop never-rendered stats/people counters and the people fetches that only fed them (startup does less work; demo-library bootstrap kept). - lint:eslint now uses --max-warnings 0, runs in `npm run ci` and in CI. Also: Settings shows a plain message when Drive sign-in fails for setup reasons (detail and redirect URI go to Diagnostics), and the owner checklist has click-by-click Google Auth Platform steps for publishing Drive backup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
…cle events - New suites bring handlers/people.ts, handlers/recommendations.ts, handlers/sync.ts, handlers/alerts.ts, events.ts and recommendations.ts to 100% lines/statements/functions. - Fix: grouped recommendations could list the same cross-medium bridge twice when the generator returned a duplicate for one seed (the seen-id set was never updated while merging). - events.ts: drop the never-used `updateBadge` option on notifyWatchAlertMatches (its only caller owns the badge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
…acks) Simplify two branches that could never be taken (year parse after a four-digit regex, eviction key on a non-empty map). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
…reflections handlers Remove two guards that could never fire (non-object merged prefs; a sanctuaryIntent fallback that re-read the same nullish value). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
…oodreads import) Drop an ISBN fallback that could never succeed: toIsbn13 already returns null exactly when the ISBN is invalid. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
…rator Tighten buildPrompt/buildPersonalizedPrompt parameters that every caller already passes, and drop a '|| 0' on ratings already filtered to >= 8. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
- Fix: mergeSeedCatalog counted every refreshed catalogue title as "added", so Settings' "Merge highlight catalogue" always reported ~150 new titles and RESTORE_DEMO_LIBRARY always said it seeded. Only genuinely new titles count now; refreshed metadata is still written. - Remove checks that could never fail (library-empty re-check inside the seeder, oldVersion < 4 inside an upgrade that only runs below v4, and the undecryptable-key preservation guards whose values always come from the raw record). - Export the dual-write merge helpers so their generic branches are tested directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
- Fix: the page observer restarted its poster-scan debounce with only the newest batch's nodes, so posters from earlier batches in the same 500 ms window were never scanned (common on sites that stream cards in bursts). Image roots now accumulate until the debounced scan runs. - Remove scanner branches that could never be taken (title-length check the regex already enforces, IMG tested against a skip list without IMG, a null response after every path assigned one, a TMDb-URL check inside a TMDb-only helper). - vitest thresholds: 100% statements/branches/functions/lines for the core scope; CI and `npm run ci` now run `test:coverage`, so a drop fails the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
vitest.config.tsnow sets 100% thresholds, and CI plusnpm run ciruntest:coverage, so any drop fails the build. There are 941 tests, up from 674.lint:eslintruns with--max-warnings 0innpm run ciand as a CI step.store/WHAT_YOU_STILL_DO.md§3 now has click-by-click Google Auth Platform steps. The app's two scopes (drive.appdata,userinfo.email) are non-sensitive, so publishing needs no Google review. The steps also cover registering the store item's redirect URI between upload and submit.Bugs found and fixed while writing tests
src/content/scanner.ts): each DOM mutation batch restarted the poster-scan debounce with only its own nodes, so posters from earlier batches in the same 500 ms window were never scanned. Image roots now accumulate until the scan runs.mergeSeedCatalog): every refreshed catalogue title counted as added, so "Merge highlight catalogue" always reported ~150 new titles andRESTORE_DEMO_LIBRARYalways said it seeded. Only new titles count now. Two existing test expectations are updated with the reason.App.tsx): the whole people list was fetched at startup and on every filmmaker update to fill counters that were never shown. Those fetches are removed.Other changes
oldVersion < 4inside an upgrade that only runs below v4).anywith real types: TMDb person/credit rows, logger args, scanner responses, settings validator, UI message payloads. Rethrown errors now carrycause.Scope note
The 100% applies to the existing
coverage.includeset. The Preact UI (src/ui/**) and the content-script renderers (hoverCard.tsx,posterBadge.tsx) stay outside it, as before.Verification
npm run release-checkpasses: typecheck, lint (0 warnings), 941 tests with 100% core coverage, build, package check.subsume.zipin headless Chromium:🤖 Generated with Claude Code
https://claude.ai/code/session_01FHFhkzNyPBLTv6hU2PeX3e
Generated by Claude Code