feat(vocabulary): quiz previous-question nav + i18n cleanup - #84
Merged
Conversation
…n keys Quiz session now keeps per-question picks so navigating back (Previous button / ArrowLeft) restores the earlier answer and its correct/wrong highlight instead of a blank slate. Adds store previous() + isPreviousDisabled, keystroke handling, and specs. Also prunes unused translation keys across en/zh-CN and updates the affected exercise/listing/dialog templates; bumps version to 1.8.433 (release 2026-08-23). Co-Authored-By: Claude <noreply@anthropic.com>
Direct/Angular: pin @angular/{core,common,compiler,animations,forms,
platform-browser,router,cli,build,compiler-cli} to 21.2.21 (fixes the
i18n XSS CVE-2026-69151 and HttpTransferCache state-poisoning
CVE-2026-68945; 21.2.17 was vulnerable, fix landed in 21.2.19).
Overrides (transitive, no direct dep to bump):
- fast-uri ^3.1.3 -> ^3.1.5 (host-confusion CVE-2026-18446/16221)
- js-yaml ^4.3.0 -> ^4.3.1 (Quadratic-CPU !!omap GHSA-5p4m-2wfm-xmqj)
- postcss ^8.5.16 -> ^8.5.18 (source-map path traversal CVE-2026-73646)
- nanoid -> ^3.3.18 (infinite-loop CVE-2026-67213/67214)
- undici -> ^7.29.0 (cross-user disclosure CVE-2026-13697)
- ip-address -> ^10.3.1 (SSRF via leading-zero octets CVE-2026-69192)
- brace-expansion@^1 -> ^1.1.16, brace-expansion@^2 -> ^2.1.4
(DoS CVE-2026-13149/14257/69152)
Installed with --legacy-peer-deps (Angular's strict monorepo peers);
verified production build + full suite (1605 tests) pass.
Co-Authored-By: Claude <noreply@anthropic.com>
…-test leak
The MockHowl constructor scheduled a 1 ms onload setTimeout that
unload() never cleared, so a superseded/destroyed Howl could fire
onload into a later test and call .next() on already-completed RxJS
subjects — which throws and, under CI runner load, wedged the two
async tests ("should complete all subjects on destroy" and
"should handle load and play cycle") into a 5 s timeout. Store the
timer id and clearTimeout it in unload().
These two tests were the flake that red-bit PR #84 on the loaded
GitHub runner while passing locally.
Co-Authored-By: Claude <noreply@anthropic.com>
The previous deps commit was installed with --legacy-peer-deps, which wrote a partial lockfile missing peer-only packages (@angular-eslint/template-parser, eslint-scope, @emnapi/*, …) — so CI's `npm ci` failed with "package.json and package-lock.json are not in sync". Regenerated from a clean `npm install` (strict peers, no legacy flag); `npm ci --dry-run` now reports up-to-date. Co-Authored-By: Claude <noreply@anthropic.com>
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
ArrowLeft) restores the earlier answer and its correct/wrong highlight instead of showing a blank slate. Addsprevious()+isPreviousDisabledtoVocabularyQuizSessionStore, keystroke handling, and unit specs.en.json/zh-CN.jsonand updated the affected exercise/listing/dialog templates accordingly.1.8.432 → 1.8.433(release 2026-08-23).Test plan
ng build --configuration production)ArrowLeftat the first question is a no-op🤖 Generated with Claude Code