Skip to content

feat(vocabulary): quiz previous-question nav + i18n cleanup - #84

Merged
alvachien merged 4 commits into
mainfrom
feat/voc-page
Aug 23, 2026
Merged

feat(vocabulary): quiz previous-question nav + i18n cleanup#84
alvachien merged 4 commits into
mainfrom
feat/voc-page

Conversation

@alvachien

Copy link
Copy Markdown
Owner

Summary

  • Quiz previous-question navigation: the vocabulary quiz session now keeps per-question picks so navigating back (new Previous button / ArrowLeft) restores the earlier answer and its correct/wrong highlight instead of showing a blank slate. Adds previous() + isPreviousDisabled to VocabularyQuizSessionStore, keystroke handling, and unit specs.
  • i18n cleanup: pruned unused translation keys across en.json / zh-CN.json and updated the affected exercise/listing/dialog templates accordingly.
  • Version bump 1.8.432 → 1.8.433 (release 2026-08-23).

Test plan

  • Production build passes (ng build --configuration production)
  • Manual: run a quiz, answer 2+ questions, go Previous and confirm the prior pick + highlight are restored
  • Manual: ArrowLeft at the first question is a no-op

🤖 Generated with Claude Code

alvachien and others added 4 commits August 23, 2026 11:56
…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>
@alvachien
alvachien merged commit 3c37269 into main Aug 23, 2026
2 checks passed
@alvachien
alvachien deleted the feat/voc-page branch August 23, 2026 04:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant