Skip to content

Daily review 2026-06-30 - #65

Draft
NghaReformer wants to merge 1 commit into
mainfrom
daily-review/2026-06-30
Draft

Daily review 2026-06-30#65
NghaReformer wants to merge 1 commit into
mainfrom
daily-review/2026-06-30

Conversation

@NghaReformer

Copy link
Copy Markdown
Owner

Daily Review — 2026-06-30

Reviewer: automated | Branch: daily-review/2026-06-30


1. Bugs & Issues

Overall health

Svelte 5 runes usage is correct throughout — no export let, $:, on:event, or <slot /> violations found. Server/client boundary is enforced for runtime code. The issues below are theme system defects, an i18n gap, and a server-boundary type import.


Issue 1 — Undefined CSS tokens --orange, --blue, --red always resolve to hardcoded hex

Severity: HIGH
Files: 10 components (see list)

tokens.ts and css-generator.ts define no --orange, --blue, or --red custom properties. Every var(--orange, #f59e0b), var(--blue, #3b82f6), and var(--red, #ef4444) call silently falls through to the hardcoded hex fallback on every render. These colours are invisible to the theme system and will never reflect a theme change.

Affected files and approximate line ranges:

File Properties used
src/lib/components/playground/KpiStrip.svelte:76 --orange
src/lib/playgrounds/amortization/components/ChartPanel.svelte:436–533 --orange, --blue, --red
src/lib/playgrounds/amortization/components/ScheduleTable.svelte:240–265 --orange, --blue, --red
src/lib/playgrounds/amortization/components/InputsPanel.svelte:604–605 --red
src/lib/playgrounds/bank-reconciliation/components/LedgerPanel.svelte:149–209 --orange
src/lib/playgrounds/bank-reconciliation/components/BankStatementPanel.svelte --orange
src/lib/playgrounds/bank-reconciliation/components/ReconciliationFlow.svelte --orange, --blue
src/lib/playgrounds/bank-reconciliation/components/ScenarioWalkthrough.svelte --orange
src/lib/playgrounds/bank-reconciliation/components/TransactionJournal.svelte --orange
src/lib/playgrounds/bank-reconciliation/components/VarianceScale.svelte --orange

Suggested fix: Add --orange, --blue, and --red as named aliases in css-generator.ts:

  • --orange → alias --amber (#f5a623 already defined)
  • --blue → new token or alias of --accent-dim (#6366f1)
  • --red → alias --error (#f06070 already defined)

One-file fix in css-generator.ts; eliminates all hardcoded hex fallback exposure.


Issue 2 — Client component imports types from $lib/server

Severity: MEDIUM
File: src/lib/components/feedback/FeedbackForm.svelte:7

import type { FeedbackType, FeedbackSeverity } from '$lib/server/db/types';

SvelteKit's vite plugin blocks $lib/server imports in client-renderable files, including type-only imports in some configurations. Has not triggered a build failure yet but is a latent risk and violates the boundary rule in CLAUDE.md.

Suggested fix: Move FeedbackType and FeedbackSeverity to src/lib/types/feedback.ts; import from there in both FeedbackForm.svelte and $lib/server/db/types.ts.


Issue 3 — Privacy page bypasses i18n entirely

Severity: MEDIUM
File: src/routes/[lang]/privacy/+page.svelte

All user-facing copy is hardcoded English prose. The file imports t from $lib/i18n at line 1 but never calls it (dead import). French-locale visitors at /fr/privacy see English-only content. npm run i18n:check will not catch this because no keys exist.

Suggested fix: Create src/lib/i18n/namespaces/privacy.en.ts and privacy.fr.ts, register in index.ts, replace all strings with $t('privacy.*') calls.


Issue 4 — Hardcoded #fff hex color on accent-background elements

Severity: MEDIUM
Files: 4 files

File Line Context
src/lib/playgrounds/journal-entry/components/EntryHistory.svelte 400 Confirm-action button
src/routes/[lang]/chart-of-accounts/+page.svelte 423 Active framework button
src/routes/[lang]/chart-of-accounts/+page.svelte 458 Active class chip
src/routes/[lang]/learn/+page.svelte 202 CTA group button

Suggested fix: Add --text-on-accent token to tokens.ts (value #ffffff for midnight theme) and replace all four instances.


Issue 5 — static/playgrounds/depreciation-playground.html is unreachable

Severity: LOW
File: static/playgrounds/depreciation-playground.html

No route, PlaygroundCard, or registry entry points to it. The other three static playground HTMLs each have corresponding references; depreciation does not.

Suggested fix: Register a legacy iframe route, or remove the file and build a native Svelte depreciation module instead.


Issue 6 — Three separate $effect calls for related tweens in VarianceScale

Severity: LOW
File: src/lib/playgrounds/bank-reconciliation/components/VarianceScale.svelte:54–60

Three consecutive single-line $effect blocks drive three tweened stores. Should be one merged effect to reduce subscriber count.


2. New Playground Ideas

Existing playgrounds (native Svelte): Amortization, CVP, Journal Entry, Bank Reconciliation, TVM, Interest.
Static HTML only (no native module): Depreciation.


Idea A — VAT Compliance Simulator / Simulateur de Conformité TVA

Target learner: Licence 2–3, practicing professional
Pedagogical objective: Students confuse TVA collectée vs TVA déductible and miscalculate net VAT payable. OHADA-zone rates vary by country (18% Cameroun/Côte d'Ivoire; 19.25% Sénégal) with country-specific exemption categories. No existing playground covers fiscal compliance.

Core interaction: Learner enters purchase/sale transactions, selects OHADA-country VAT rate, marks exempt lines. Playground computes TVA collectée, TVA déductible, and TVA à décaisser/rembourser in real time, then generates journal entries for accounts 4431, 4452, 4454.

Minimum viable inputs / outputs: Transaction type, HT amount, rate selector, exempt toggle → TVA totals, net balance, journal entry preview.

Complements: Natural prerequisite to Journal Entry Playground — teaches how to calculate VAT amounts before recording them.


Idea B — Inventory Costing Playground / Méthodes de Valorisation des Stocks

Target learner: Licence 2–3
Pedagogical objective: SYSCOHADA mandates CMP (Coût Moyen Pondéré); students also face FIFO on exams. The core misconception is that both methods yield identical COGS — the side-by-side comparison surprises them.

Core interaction: Learner adds stock movement rows (entry with cost, exit with quantity). Playground maintains a running stock card for CMP and FIFO simultaneously, with a live divergence indicator.

Minimum viable inputs / outputs: Movement type, quantity, unit cost (entries) → per-method running balance, COGS, ending inventory value, divergence delta.

Complements: Amortization covers non-current assets; this completes the asset side of the SYSCOHADA balance sheet.


Idea C — Payroll Simulator — OHADA Zone / Simulateur de Paie

Target learner: Licence 3, Master, practicing professional
Pedagogical objective: Payroll in OHADA countries involves country-specific social contribution rates (CNPS Cameroun, CNSS Sénégal, etc.) and IRPP brackets that students routinely miscalculate, leading to wrong journal entries for accounts 661, 431, 432, 447.

Core interaction: Learner inputs gross salary and selects country. Playground steps through IRPP bracket calculation, employee charges, employer charges, and net pay, then shows the full payroll journal entry pre-filled.

Minimum viable inputs / outputs: Gross salary, country selector, dependant count → IRPP breakdown, social charges, net pay, journal entry.

Complements: Journal Entry Playground has a fixed payroll scenario; this makes the numbers interactive and country-aware.


Idea D — Financial Ratio Analyser / Tableau de Bord des Ratios Financiers

Target learner: Licence 3, Master
Pedagogical objective: Students produce balance sheets in the Journal Entry Playground but cannot interpret them. They memorise ratio formulas without understanding which values signal danger or how changing one line cascades across multiple ratios.

Core interaction: Learner inputs B/S and P&L line items (or loads a preset SYSCOHADA scenario). Playground computes 12 ratios across four families, colour-codes each against OHADA-sector benchmarks, and renders a radar chart. Sliders let them shift one variable and watch all ratios update.

Minimum viable inputs / outputs: 12–15 B/S and P&L fields → ratio cards, radar chart, colour-coded benchmark verdict.

Complements: Phase 2 could pipe Journal Entry Playground output directly into this dashboard, creating a transaction → statements → analysis pedagogical arc.


Idea E — Budget Variance Workshop / Atelier d'Analyse des Écarts Budgétaires

Target learner: Master, practicing professional
Pedagogical objective: OHADA management accounting students rarely practice variance analysis beyond static tables. The common confusion is between price variance and volume variance, and between F/U sign conventions across cost and revenue lines.

Core interaction: Learner fills a budget template (revenue lines, fixed/variable costs) and then an actuals column. Playground decomposes each variance into price and volume effects, flags F/U per SYSCOHADA convention, and presents a guided root-cause confirmation exercise.

Minimum viable inputs / outputs: Budget and actual figures for up to 4 revenue + 6 cost lines → variance table (amount, %, F/U), price-volume decomposition, flexible budget reconciliation.

Complements: CVP shows the static break-even; this extends into dynamic budget control — together they cover the full managerial accounting arc for Licence 3 / Master.


Generated by Claude Code

@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ohadalearn Ready Ready Preview, Comment Jun 30, 2026 11:08pm

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.

2 participants