{"record":{"id":"23fa99d2136027c2","repo":"rohitg00/ai-engineering-from-scratch","slug":"mode-decision-needs-rationale-repetition-change","errorCode":null,"errorMessage":"mode decision needs rationale, repetition, change policy, and rejections","messagePattern":"mode decision needs rationale, repetition, change policy, and rejections","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"certifications/claude/lessons/02-model-selection-and-token-economics/code/main.py","lineNumber":213,"sourceCode":"        if selected != best[\"id\"]:\n            errors.append(\"selectedConfiguration must be the least costly passing mode\")\n\n    decision = experiment.get(\"decision\")\n    if (\n        not isinstance(decision, dict)\n        or not str(decision.get(\"why\", \"\")).strip()\n        or not str(decision.get(\"repeatPolicy\", \"\")).strip()\n        or not str(decision.get(\"changePolicy\", \"\")).strip()\n        or not _nonempty_strings(decision.get(\"rejected\"))\n    ):\n        errors.append(\"mode decision needs rationale, repetition, change policy, and rejections\")\n    return errors\n\n\ndef summarize_mode_trials(experiment: dict[str, Any]) -> dict[str, Any]:\n    errors = validate_mode_trials(experiment)\n    if errors:\n        raise ValueError(\"; \".join(errors))\n    selected = next(\n        item for item in experiment[\"configurations\"] if item[\"id\"] == experiment[\"selectedConfiguration\"]\n    )\n    return {\n        \"selectedConfiguration\": selected[\"id\"],\n        \"settings\": selected[\"settings\"],\n        \"minimumQuality\": selected[\"summary\"][\"minimumQuality\"],\n        \"p95LatencyMs\": selected[\"summary\"][\"p95LatencyMs\"],\n        \"meanCostUnits\": selected[\"summary\"][\"meanCostUnits\"],\n        \"supportedConfigurations\": sum(\n            item[\"support\"][\"status\"] == \"docs-supported\" for item in experiment[\"configurations\"]\n        ),\n    }\n\n\ndef _validate_repeated_runs(configuration_id: str, runs: Any, minimum_run_count: int) -> list[str]:\n    if not isinstance(runs, list) or len(runs) < minimum_run_count:\n        return [f\"{configuration_id} requires at least {minimum_run_count} repeated runs\"]","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/certifications/claude/lessons/02-model-selection-and-token-economics/code/main.py#L195-L231","documentation":"Error \"mode decision needs rationale, repetition, change policy, and rejections\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at certifications/claude/lessons/02-model-selection-and-token-economics/code/main.py:213 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}