{
  "change_id": "ENG-DESIGN-ACADEMY-0002J",
  "version": "0002J",
  "purpose": "Enforce nested Round 2 provenance and safety completeness before a practice attempt can be counted",
  "primary_build_engine": "CadQuery",
  "cadquery_version": "2.8.0",
  "blender_required": false,
  "practice_endpoint": "/academy/practice/ask",
  "output_contract": "academy_round_json_v6",
  "round2_contract": "completeness_guard_v1",
  "nested_contract_validation": true,
  "any_round2_contract_corrective_retry": true,
  "service_preassessment_guard": true,
  "initial_and_final_raw_answers_audited": true,
  "remaining_attempts_protected": true,
  "missing_content_invented": false,
  "preserves_round1_and_round3": true,
  "preserves_existing_practice_state": true,
  "starts_worker": false,
  "restarts_services": false,
  "original_file_sha256": {
    "armor/ai/brain_server.py": "079a1ec199c0b96247096519a4f1077a7feb7f1189caff557a9dd25eff7a8e3d",
    "armor/services/design_academy_practice_service.py": "c7b39436ad41394d55adbe9802b6014d1d00a3ad3660f54935a1028883f92d06"
  },
  "new_files_expected_absent": [
    "armor/tools/design_academy_round2_completeness_selftest.py",
    "armor/docs/ENG_DESIGN_ACADEMY_0002J.md"
  ]
}
