All files / web/src/test/journey-simulator/profiles stark-contrast.ts

0% Statements 0/90
0% Branches 0/1
0% Functions 0/1
0% Lines 0/90

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91                                                                                                                                                                                     
/**
 * Stark Contrast Profile (Hill Function Model)
 *
 * A student with EXTREME skill gaps designed to trigger weak skill identification:
 * - Very high exposure in basic skills (already mastered)
 * - ZERO exposure in complement skills (never seen before)
 *
 * With K=15, n=2:
 * - 50+ exposures → ~92%+ true probability (strong)
 * - 0 exposures → 0% true probability (will fail every time initially)
 *
 * After ~8 opportunities with consistent failure, BKT should:
 * - Estimate low pKnown (< 0.5)
 * - Build confidence >= 0.3
 * - Trigger weak skill identification
 */

import type { StudentProfile } from '../types'

const initialExposures: Record<string, number> = {
  // Basic skills - VERY HIGH exposure (mastered)
  'basic.directAddition': 60,
  'basic.heavenBead': 55,
  'basic.simpleCombinations': 50,
  'basic.directSubtraction': 55,
  'basic.heavenBeadSubtraction': 50,
  'basic.simpleCombinationsSub': 45,

  // Five complements - ZERO exposure (never seen!)
  // Student will fail these consistently until they get practice
  'fiveComplements.4=5-1': 0,
  'fiveComplements.3=5-2': 0,
  'fiveComplements.2=5-3': 0,
  'fiveComplements.1=5-4': 0,

  // Ten complements - ZERO exposure (never seen!)
  'tenComplements.9=10-1': 0,
  'tenComplements.8=10-2': 0,
  'tenComplements.7=10-3': 0,
  'tenComplements.6=10-4': 0,
  'tenComplements.5=10-5': 0,
}

export const starkContrastProfile: StudentProfile = {
  name: 'Stark Contrast',
  description:
    'Mastered basics (60+ exp), zero complement exposure - designed for weak skill detection',

  // K = 15: Moderate learning rate
  halfMaxExposure: 15,

  // n = 2.0: Standard curve
  hillCoefficient: 2.0,

  initialExposures,

  // Uses less help to make weakness more apparent
  // 70% no help, 30% uses help
  helpUsageProbabilities: [0.7, 0.3],

  // Help bonus: 12% additive when help is used
  helpBonuses: [0, 0.12],

  // Average response time
  baseResponseTimeMs: 5000,

  // Moderate variance
  responseTimeVariance: 0.3,
}

/**
 * Skills that are intentionally WEAK (zero exposure).
 * BKT should identify these after ~8 opportunities with failures.
 */
export const STARK_WEAK_SKILLS = [
  'fiveComplements.4=5-1',
  'fiveComplements.3=5-2',
  'tenComplements.9=10-1',
  'tenComplements.8=10-2',
]

/**
 * Skills that are intentionally STRONG (high exposure).
 * BKT should estimate high pKnown for these.
 */
export const STARK_STRONG_SKILLS = [
  'basic.directAddition',
  'basic.heavenBead',
  'basic.directSubtraction',
]