Daily review 2026-06-17 - #53
Draft
NghaReformer wants to merge 1 commit into
Draft
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FG13jvn4URoMTDGSUckbNC
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Daily Review — 2026-06-17
Reviewer: Automated (Claude Sonnet 4.6)
Branch scanned:
main(HEAD)Files audited: 106
.svelte, ~107.ts, 4 static HTML playgroundsCommands run:
grepaudits (manual);npm run i18n:checkskipped —tsxbinary absent fromnode_modules(see §1 issue L-1)1. Bugs & Issues
MEDIUM
M-1 · Hardcoded
#fffhex colors (4 occurrences) — violates CLAUDE.mdAll four are text-on-colored-background situations where the theme lacks a matching token.
tokens.tsdefines--accent,--error, etc. but no--text-on-accentor--text-on-errortoken, so devs fell back to a literal hex value.src/routes/[lang]/learn/+page.svelte.group-cta— text onvar(--accent)CTA buttonsrc/routes/[lang]/chart-of-accounts/+page.svelte.framework-btn.active— text onvar(--accent)active pillsrc/routes/[lang]/chart-of-accounts/+page.svelte.class-chip.active— text onvar(--accent)class filter chipsrc/lib/playgrounds/journal-entry/components/EntryHistory.svelte.btn-confirm— text onvar(--error)destructive buttonSuggested fix: Add
textOnAccentandtextOnErrortokens tosrc/lib/theme/tokens.ts, then replace all fourcolor: #fffwithcolor: var(--text-on-accent)(a, b, c) andcolor: var(--text-on-error)(d).M-2 · Missing
--text-on-accent/--text-on-errordesign tokenssrc/lib/theme/tokens.tshas no tokens for text rendered on accent or error backgrounds — the root cause of M-1. Without the token the linter cannot catch future violations.Suggested fix: Define
textOnAccent: '#ffffff'andtextOnError: '#ffffff'in thecolorssection oftokens.ts.LOW
L-1 ·
npm run i18n:checkbroken —tsxbinary absent fromnode_modulespackage.jsonlists"tsx": "^4.21.0"in devDependencies; bothi18n:checkandprebuildcall it. Withoutnpm install, the i18n parity gate is inoperative andnpm run buildfails.package.json:13-14— both scripts calltsx scripts/generate-i18n-types.tsSuggested fix: Ensure
npm installruns in all CI pipelines before any build step. Alternatively, commit the generatedsrc/lib/i18n/types.tsso builds can succeed without the generator.L-2 · Three separate
$effectblocks inVarianceScale.svelte:54–60for tweened valuesThree single-statement effects that almost certainly fire in the same microtask. Merging them reduces subscription overhead and guarantees all three tweens start in the same frame.
Suggested fix:
$effect(() => { tiltTween.set(tiltTarget); bankTween.set(adjustedBank); booksTween.set(adjustedBooks); });L-3 ·
ScreenshotCapture.svelte:156— file input relies on implicit label association only<input type="file">is inside a wrapping<label>with text in a following<span>. NVDA on Firefox and some mobile ATs announce this as "unlabelled file chooser" (WCAG 1.3.1).Suggested fix: Add
aria-label={$t('feedback.screenshot.upload')}directly to the<input>.L-4 ·
cvp/exercises.ts:162— double-castas unknown as CVPExerciseParamsBypasses TypeScript's structural type check entirely; runtime errors surface inside the solver rather than at the call site.
Suggested fix: Use a proper type guard or narrow the type upstream. If the cast is genuinely unavoidable, add a comment explaining why.
L-5 · Inconsistent ARIA role pairing in
chart-of-accounts/+page.svelteClass filter buttons (line 153) use
role="tablist"while framework switcher buttons (line 134) userole="radiogroup"+role="radio". Both are exclusive-selection in-place filters — the same semantic pattern deserves the same ARIA treatment.Suggested fix: Standardise both groups on
role="radiogroup"+role="radio"+aria-checked.2. Svelte 5 Runes Compliance
No violations found. All 106
.sveltefiles correctly use$props(),$state,$derived,$effect,onclick=,{@render children()}, and$app/state.3. i18n Parity
Manual key-count audit (generator unavailable — see L-1):
All namespaces in parity.
4. Server Boundary & Security
No server-only code found outside
$lib/server/. Both API endpoints implement rate limiting, honeypot, input validation, and silent bot deflection. No findings.5. New Playground Ideas
Existing: Journal Entry, TVM, Interest, Amortization, Bank Reconciliation, CVP, Depreciation (static).
A — SYSCOHADA Balance Sheet Builder / Constructeur de Bilan SYSCOHADA
Target: Licence 1/2 · Gap: Students confuse OHADA's 9-class plan with IFRS/PCG presentation — especially Class 1 and split Class 4 accounts. Interaction: Drag-and-drop 15–20 pre-populated account balances into the correct Bilan cells (Actif immobilisé / Actif circulant / Tréso-Actif; Capitaux propres / Dettes financières / Passif circulant / Tréso-Passif); totals update live, "Check" highlights misclassifications. Reuses: existing
chart-of-accountsshared module +PlaygroundScenariossystem. Natural sequel to Journal Entry.B — VAT Return Calculator / Calculateur de Déclaration TVA (OHADA)
Target: Licence 2/3, professionals · Gap: Students cannot correctly split TVA collectée from TVA déductible or apply prorata rules; UEMOA (18 %) vs CEMAC (19.25 %) rates add confusion. Interaction: Enter purchase/sale lines with HT amount and rate; playground accumulates both sides and produces the monthly declaration (TVA à payer or crédit reportable) plus the Class 445x settlement journal entry. Fills a major gap — no current playground covers indirect taxation.
C — Financial Ratios Analyser / Analyseur de Ratios Financiers
Target: Licence 3 / Master · Gap: Students memorise formulas without interpreting signals for OHADA-zone credit/supplier contexts. Interaction: Edit a pre-populated Bilan + Compte de Résultat; a dashboard of 12 ratios (liquidity, solvency, profitability, activity) updates instantly. "What-if" sliders stress-test single variables. Capstone connecting Journal Entry → Bilan Builder → Ratio Analysis.
D — Overhead Cost Allocation / Imputation des Charges Indirectes
Target: Licence 2/3 · Gap: CVP uses direct costing; SYSCOHADA exams require full costing (coût complet) with allocation keys. Changing the key must visibly change unit cost and profit. Interaction: Define 2–3 cost centres, enter direct costs + indirect charge pool, choose allocation key (machine-hours / labour-hours / turnover %); see per-unit full cost, full-cost break-even, and direct-vs-full profit comparison side by side. Direct complement to CVP.
E — Payroll Journal Entry / Journal de Paie
Target: Licence 3, professionals · Gap: The multi-line payroll entry (gross salary → CNPS salarial + patronal, IRPP, net pay) is universally required but country-rate differences (Cameroon, Ivory Coast, Senegal) make it hard to practise. Interaction: Enter gross salary + country; see a step-by-step Bulletin de Paie, then verify the auto-generated multi-line journal entry (Classes 6/4/5) before the playground marks it complete. Extends the Journal Entry playground with the highest-frequency real-world entry type.
Report generated 2026-06-17. Next run: 2026-06-18.
Generated by Claude Code