
Platform
Alle wijzigingen, verbeteringen en opgeloste problemen in ColorAptitude™. Actueel gehouden bij elke release.
ageNormResult now stored as a full { rating, note } object so the inline "Norming" metric card shows the age-corrected rating and label, not the non-corrected fallback from projection.summary.norming.normingNote. Age-corrected FM100 norms are *not* applied (different test / different scale); note states "under development — comparison is indicative."resolveScoreBand(score.totalScore) && "..." would short-circuit incorrectly); replaced with explicit typed string literal.Session.certCode column (unique index) populated atomically on session completion via both completeSession() and persistSessionResult(). Eliminates full-table scan for certificate verification; /api/verify/[code] now resolves in O(1) for all new sessions. Legacy sessions (pre-0.5.0) fall back to a bounded scan of certCode IS NULL rows (max 10,000).0_baseline/migration.sql generated from the live schema. Migration infrastructure is now clean and prisma migrate dev works correctly.src/app/[locale]/admin/error.tsx provides a dedicated error UI for the admin panel with "Try again" and "Back to admin" actions.docs/ARCHITECTURE.md — complete English technical reference (21 sections, ~1,800 lines) covering data model, API routes, scoring system, session lifecycle, certificate system, publishing governance, security model, and known limitations.CHANGELOG.md established at project root.src/app/[locale]/pakketten/page.tsx — Grid widened from max-w-5xl md:grid-cols-3 to max-w-6xl sm:grid-cols-2 lg:grid-cols-4. Tier labels added to Assessment and Tier 2 cards. Package Package type generalized to support optional href (renders <Link> instead of Stripe checkout button) and badge fields.src/lib/server/assessment-persistence.ts — Imported sessionIdToCode from src/lib/cert-code.ts. Both completeSession() and persistSessionResult() now write certCode on every session completion.src/app/api/mini-test/complete/route.ts — emailSent update was incorrectly using updateMany({ where: { userId } }), marking *all* mini-test results for the user as email-sent. Fixed to update({ where: { id: miniTestResult.id } }).src/lib/server/user-access.ts — Access code redemption replaced array transaction (cannot check incremented.count inside array form) with interactive transaction; atomically enforces maxUses limit and throws inside the transaction if already at capacity, triggering rollback.src/lib/domain/scoring.ts — Indentation misalignment on note: field corrected.no) and Portuguese (pt) translation files completed with exercises and flow sections./api/org/invite) — endpoint scaffolded; email delivery parked.src/app/api/org/dashboard/route.ts — organization-level aggregated statistics endpoint.src/app/api/training-scores/route.ts — Previous score fetch moved before new score creation to eliminate TOCTOU race condition where concurrent requests could see each other's score as "previous."UserAccess grant model with sources: CODE, PAYMENT, ADMIN, MANUAL./api/mini-test/complete) — unauthenticated, creates LEAD user, grants full access, sends result email via Resend./api/verify/[code]) with public privacy-filtered response.src/lib/cert-code.ts — DJB2-based short code generation (CA-XXXXXX format).certCode (O(1) certificate lookup) — see 0.5.0 for the activation of this path.AssessmentVersion with isCurrent flag; sessions linked to specific version at creation time.src/lib/domain/publishing-governance.ts) with lane model, blocker validation, and advisory warnings.src/lib/domain/exercise-authoring.ts) with full ExerciseTemplateDefinition type.src/lib/domain/session-guard.ts) — ASTM E1499 §8.1.1 and §7.1.1 compliance checks.src/lib/domain/scoring.ts) — diagnostic and training modes, band classification, error analysis.