{
  "slug": "scratch",
  "name": "Scratch",
  "category": "Coding",
  "updated": "2026-11-04",
  "status": "Draf operasional; perlu tinjauan mentor dan uji pada aplikasi kelas",
  "app": "Scratch",
  "sessionsPerLevel": 32,
  "duration": 60,
  "ages": [
    "SD"
  ],
  "setup": "Editor Scratch yang dapat dibuka; coba suara, simpan, serta buka ulang salinan proyek. Gunakan gambar buatan siswa atau aset latihan.",
  "placement": [
    "Buat sprite bergerak dengan event",
    "Tambah kondisi serta skor sederhana",
    "Uji dari awal dan perbaiki satu blok yang salah",
    "Jelaskan apa yang direset saat main ulang"
  ],
  "sources": [
    {
      "label": "Panduan Scratch",
      "url": "https://scratch.mit.edu/ideas"
    }
  ],
  "paths": [
    {
      "id": "sd-pemula",
      "age": "SD",
      "level": "pemula",
      "name": "SD · Pemula",
      "entry": "Tidak memerlukan pengalaman pada kursus ini. Mentor menyesuaikan kecepatan serta bantuan perangkat.",
      "target": "Menyelesaikan proyek dasar, menunjukkan fungsi atau kualitas visualnya, dan menjelaskan proses dengan panduan ringan.",
      "scope": "Gunakan 2–3 sprite dan satu aturan inti per proyek; perluas setelah aturan utama berjalan.",
      "adaptation": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
      "projects": [
        {
          "name": "Petualangan di Luar Angkasa",
          "topic": "Animasi dan cerita interaktif",
          "out": "Cerita pendek dua tokoh dengan satu pergantian giliran melalui broadcast. Dibuat dengan melanjutkan latihan tersimpan pada sesi 7 dan dipresentasikan pada sesi 8; tiga bagian cerita menjadi pengayaan.",
          "art": "scratch-pemula-p1-ai.png",
          "steps": [
            "Sesi 1–2: mengenal editor dan event, lalu bereksperimen dengan koordinat melalui latihan terpisah.",
            "Sesi 3–4: gerak bertahap dan pengulangan, lalu animasi dua kostum pada latihan berbeda.",
            "Sesi 5–6: dialog/suara, lalu broadcast dua tokoh; setiap sesi memakai contoh khusus keterampilannya.",
            "Sesi 7: lanjutkan latihan tersimpan menjadi cerita dua tokoh dengan satu pergantian giliran. Sesi 8: presentasi, uji ulang dan revisi. Tiga bagian cerita adalah pengayaan."
          ],
          "checks": [
            "Dua tokoh melakukan aksi secara bergiliran",
            "Satu broadcast memulai giliran tokoh penerima",
            "Bendera hijau mengembalikan keadaan awal",
            "Siswa menjelaskan satu perubahan aksi atau tema yang dibuat sendiri"
          ],
          "faults": [
            "Sprite salah dipilih",
            "Koordinat awal tidak diatur",
            "Pesan tidak sama namanya",
            "Dua dialog mulai bersamaan"
          ],
          "recipe": "Cerita pendek dua tokoh dengan satu pergantian giliran melalui broadcast. Dibuat dengan melanjutkan latihan tersimpan pada sesi 7 dan dipresentasikan pada sesi 8; tiga bagian cerita menjadi pengayaan.",
          "number": 1,
          "start": 1,
          "end": 8,
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-pemula-p1-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 1–6: enam pembelajaran dan latihan berbeda; sesi 7: membuat proyek; sesi 8: presentasi proyek.",
          "minimumOutcome": "Cerita pendek dua tokoh dengan satu pergantian giliran melalui broadcast. Dibuat dengan melanjutkan latihan tersimpan pada sesi 7 dan dipresentasikan pada sesi 8; tiga bagian cerita menjadi pengayaan.",
          "minimumChecks": [
            "Dua tokoh melakukan aksi secara bergiliran",
            "Satu broadcast memulai giliran tokoh penerima",
            "Bendera hijau mengembalikan keadaan awal"
          ],
          "enrichment": "Tambahkan bagian ketiga cerita setelah dua tokoh dan satu pergantian giliran berjalan.",
          "transferTask": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Tangkap Bintang",
          "topic": "Kontrol pemain, skor, dan waktu",
          "out": "Anak mengembangkan game pertama dengan kontrol keyboard dan aturan sederhana. Variabel digunakan untuk mencatat skor, sementara perulangan dan kondisi mengatur jalannya permainan.",
          "art": "scratch-pemula-p2-ai.png",
          "steps": [
            "Kontrol pemain dengan tombol panah; Batas gerak di tepi arena.",
            "Objek jatuh dan posisi acak; Sentuhan dan skor satu tangkapan.",
            "Hitung mundur dan status permainan; Layar hasil dan tombol main lagi.",
            "Sesi 15: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 16: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Panah kiri dan kanan menggerakkan keranjang",
            "Bintang kembali ke atas setelah tertangkap atau terlewat",
            "Satu tangkapan menambah tepat satu skor",
            "Skor dan waktu kembali ke awal saat main ulang"
          ],
          "faults": [
            "Pemain keluar panggung",
            "Bintang tidak kembali",
            "Skor bertambah berkali-kali saat bersentuhan",
            "Skrip timer ganda berjalan"
          ],
          "recipe": "Contoh satu putaran: skor=0, waktu=30, status=bermain. Bintang jatuh; saat menyentuh keranjang, skor bertambah 1 dan bintang segera kembali ke atas. Ketika waktu=0, ubah status ke selesai. Uji dengan tiga tangkapan: skor harus 3.",
          "number": 2,
          "start": 9,
          "end": 16,
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-pemula-p2-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 9–14: enam pembelajaran; sesi 15: membuat proyek; sesi 16: presentasi proyek.",
          "minimumOutcome": "Anak mengembangkan game pertama dengan kontrol keyboard dan aturan sederhana. Variabel digunakan untuk mencatat skor, sementara perulangan dan kondisi mengatur jalannya permainan.",
          "minimumChecks": [
            "Panah kiri dan kanan menggerakkan keranjang",
            "Bintang kembali ke atas setelah tertangkap atau terlewat",
            "Satu tangkapan menambah tepat satu skor"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Tangkap Bintang dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Labirin Kunci Rahasia",
          "topic": "Percabangan, sensor, dan level",
          "out": "Anak membuat permainan yang merespons kondisi menang dan kalah. Mereka melatih penggunaan sensor sentuh, percabangan, serta pesan antar-sprite untuk mengatur rintangan dan perpindahan level.",
          "art": "scratch-pemula-p3-ai.png",
          "steps": [
            "Peta labirin dan gerak dua sumbu; Deteksi dinding dan posisi aman.",
            "Nyawa dan satu hukuman per kontak; Kunci sebagai data keadaan.",
            "Pintu dan kondisi penyelesaian; Pergantian level dan reset.",
            "Sesi 23: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 24: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Karakter bergerak di peta buatan siswa",
            "Dinding mengembalikan posisi dan mengurangi nyawa sekali",
            "Pintu menolak pemain tanpa kunci",
            "Dua level dan main ulang menyiapkan kunci serta posisi kembali"
          ],
          "faults": [
            "Warna sensor dinding salah",
            "Kunci dihitung dua kali",
            "Pintu terbuka sebelum kunci",
            "Data kunci tidak direset"
          ],
          "recipe": "Contoh: level=1, kunci=0, nyawa=3. Saat kunci disentuh, set kunci=1 dan sembunyikan kunci. Pintu hanya memindahkan level ketika kunci=1. Saat dinding tersentuh, kurangi satu nyawa lalu pindahkan pemain ke awal sebelum mendeteksi lagi.",
          "number": 3,
          "start": 17,
          "end": 24,
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-pemula-p3-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 17–22: enam pembelajaran; sesi 23: membuat proyek; sesi 24: presentasi proyek.",
          "minimumOutcome": "Anak membuat permainan yang merespons kondisi menang dan kalah. Mereka melatih penggunaan sensor sentuh, percabangan, serta pesan antar-sprite untuk mengatur rintangan dan perpindahan level.",
          "minimumChecks": [
            "Karakter bergerak di peta buatan siswa",
            "Dinding mengembalikan posisi dan mengurangi nyawa sekali",
            "Pintu menolak pemain tanpa kunci"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Labirin Kunci Rahasia dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Misi Hindari Meteor",
          "topic": "Game akhir dan penyempurnaan",
          "out": "Anak menggabungkan kemampuan sebelumnya untuk membuat game yang lebih lengkap. Mereka belajar menggunakan clone untuk objek berulang, mengatur tingkat kesulitan, dan menguji pengalaman bermain bersama teman.",
          "art": "scratch-pemula-p4-ai.png",
          "steps": [
            "Brief permainan dan kontrol pesawat; Sprite induk dan clone pertama.",
            "Kemunculan acak dan pembersihan clone; Tabrakan meteor dan nyawa.",
            "Skor dan peningkatan kesulitan; Game over dan main ulang yang bersih.",
            "Sesi 31: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 32: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Pesawat bergerak sesuai kontrol",
            "Meteor muncul dan dibersihkan saat keluar",
            "Nyawa hanya berkurang sekali per kejadian",
            "Dua putaran memiliki kondisi awal sama"
          ],
          "faults": [
            "Meteor tidak pernah dihapus",
            "Nyawa turun selama kontak",
            "Level naik tanpa batas",
            "Main ulang menambah pemicu baru"
          ],
          "recipe": "Contoh: mulai skor=0, nyawa=3, kesulitan=1. Gunakan satu pengatur kemunculan. Setiap meteor selesai melewati arena menambah skor. Pada tabrakan, pindahkan atau hapus meteor agar kontak yang sama tidak terus mengurangi nyawa.",
          "number": 4,
          "start": 25,
          "end": 32,
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-pemula-p4-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 25–30: enam pembelajaran; sesi 31: membuat proyek; sesi 32: presentasi proyek.",
          "minimumOutcome": "Anak menggabungkan kemampuan sebelumnya untuk membuat game yang lebih lengkap. Mereka belajar menggunakan clone untuk objek berulang, mengatur tingkat kesulitan, dan menguji pengalaman bermain bersama teman.",
          "minimumChecks": [
            "Pesawat bergerak sesuai kontrol",
            "Meteor muncul dan dibersihkan saat keluar",
            "Nyawa hanya berkurang sekali per kejadian"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Misi Hindari Meteor dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        }
      ],
      "sessions": [
        {
          "number": 1,
          "project": 1,
          "phase": 1,
          "title": "Mengenal editor dan bendera hijau",
          "target": "Sapaan berasal dari sprite yang mempunyai skrip; siswa menemukan panggung, daftar sprite dan area kode.",
          "demo": "Mentor memperagakan kegiatan pertama: Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber. Pilih sprite lain; tunjuk pemilik skrip dan prediksi siapa yang berbicara saat bendera ditekan.",
          "check": "Sapaan berasal dari sprite yang mempunyai skrip; siswa menemukan panggung, daftar sprite dan area kode.",
          "fault": "Blok dipasang pada sprite lain atau belum tersambung ke bendera hijau",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S01-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "onboarding",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "onboarding",
            "label": "Orientasi alat",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 10
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 20
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 5,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Sumber latihan baru; perangkat siap sebelum kelas.",
            "minimum": "Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber.",
            "understanding": "Pilih sprite lain; tunjuk pemilik skrip dan prediksi siapa yang berbicara saat bendera ditekan.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Belajar orientasi alat dan simpan-buka ulang.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber.",
            "probe": "Pilih sprite lain; tunjuk pemilik skrip dan prediksi siapa yang berbicara saat bendera ditekan.",
            "check": "Sapaan berasal dari sprite yang mempunyai skrip; siswa menemukan panggung, daftar sprite dan area kode.",
            "studentItems": [
              "Buat sapaan satu sprite dengan bendera hijau, lalu simpan sumber.",
              "Pilih sprite lain; tunjuk pemilik skrip dan prediksi siapa yang berbicara saat bendera ditekan.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "Koordinat x dan y",
          "target": "Membedakan perubahan x saja dan y saja serta menentukan satu titik pilihan sendiri.",
          "demo": "Mentor memperagakan kegiatan pertama: Ubah x saja; prediksi lalu uji posisi robot. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Ubah x saja dan prediksi posisi; ubah y saja dan prediksi lagi; pilih satu titik sendiri lalu cocokkan pada grid.",
          "check": "Siswa membedakan x kiri–kanan dan y bawah–atas, menunjukkan dua prediksi satu sumbu serta satu titik pilihannya sendiri.",
          "fault": "Sumbu x dan y tertukar atau posisi awal tidak diatur",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Mentor menandai satu titik baru pada grid; siswa mencari koordinatnya tanpa menyalin angka contoh.",
          "evidence": "scratch-sd-pemula-S02-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Dari posisi awal (-120,-60), ubah x menjadi 120 tanpa mengubah y; lalu ubah y menjadi 60. Prediksi tiap posisi sebelum menjalankan.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Ubah x saja; prediksi lalu uji posisi robot.",
            "understanding": "Pilih titik baru, tunjukkan posisinya pada grid sebelum menjalankan, lalu jelaskan mengapa x dan y menghasilkan posisi itu.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Dua percobaan satu sumbu dan satu titik mandiri; periksa formal serta simpan terpisah."
            },
            "workloadFactors": [
              "Menghubungkan beberapa bagian; mulai satu perubahan dan satu uji.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Ubah x saja; prediksi lalu uji posisi robot.",
            "probe": "Ubah y saja; prediksi lalu uji kembali.",
            "check": "Siswa membedakan x kiri–kanan dan y bawah–atas, menunjukkan dua prediksi satu sumbu serta satu titik pilihannya sendiri.",
            "studentItems": [
              "Ubah x saja; prediksi lalu uji posisi robot.",
              "Ubah y saja; prediksi lalu uji kembali.",
              "Pilih satu titik sendiri dan cocokkan pada grid."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 2,
          "title": "Gerak bertahap dan pengulangan",
          "target": "Enam langkah berakhir y=50, empat langkah y=0; siswa membedakan jumlah ulang dan besar langkah.",
          "demo": "Mentor memperagakan kegiatan pertama: Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan. Bandingkan repeat 4 dari awal yang sama; pilih satu jumlah lain dan hitung tujuan sebelum uji.",
          "check": "Enam langkah berakhir y=50, empat langkah y=0; siswa membedakan jumlah ulang dan besar langkah.",
          "fault": "Wait diletakkan di luar repeat atau posisi awal tidak direset",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S03-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan.",
            "understanding": "Bandingkan repeat 4 dari awal yang sama; pilih satu jumlah lain dan hitung tujuan sebelum uji.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan.",
            "probe": "Bandingkan repeat 4 dari awal yang sama; pilih satu jumlah lain dan hitung tujuan sebelum uji.",
            "check": "Enam langkah berakhir y=50, empat langkah y=0; siswa membedakan jumlah ulang dan besar langkah.",
            "studentItems": [
              "Dari y=-100, prediksi hasil repeat 6 dengan change y 25 lalu jalankan.",
              "Bandingkan repeat 4 dari awal yang sama; pilih satu jumlah lain dan hitung tujuan sebelum uji.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 2,
          "title": "Kostum untuk animasi sederhana",
          "target": "Jeda mengubah kecepatan pergantian, bukan posisi; setiap putaran dimulai dengan kostum yang sama.",
          "demo": "Mentor memperagakan kegiatan pertama: Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi. Coba jeda lebih singkat lalu lebih lama; pilih yang sesuai dan uji reset kostum awal.",
          "check": "Jeda mengubah kecepatan pergantian, bukan posisi; setiap putaran dimulai dengan kostum yang sama.",
          "fault": "Dua kostum dibuat sebagai dua sprite atau jeda terlalu singkat untuk terlihat",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S04-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi.",
            "understanding": "Coba jeda lebih singkat lalu lebih lama; pilih yang sesuai dan uji reset kostum awal.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi.",
            "probe": "Coba jeda lebih singkat lalu lebih lama; pilih yang sesuai dan uji reset kostum awal.",
            "check": "Jeda mengubah kecepatan pergantian, bukan posisi; setiap putaran dimulai dengan kostum yang sama.",
            "studentItems": [
              "Buat dua kostum lampu bergantian dengan jeda 0,4 detik tanpa mengubah posisi.",
              "Coba jeda lebih singkat lalu lebih lama; pilih yang sesuai dan uji reset kostum awal.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 3,
          "title": "Dialog, jeda, dan suara",
          "target": "Dialog dan suara berurutan serta kedua dialog sempat dibaca pada durasi yang dipilih.",
          "demo": "Mentor memperagakan kegiatan pertama: Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua. Ubah durasi satu dialog; bandingkan waktu baca dan pastikan urutannya tetap.",
          "check": "Dialog dan suara berurutan serta kedua dialog sempat dibaca pada durasi yang dipilih.",
          "fault": "Memakai say tanpa durasi sehingga pesan pertama langsung tergantikan",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S05-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua.",
            "understanding": "Ubah durasi satu dialog; bandingkan waktu baca dan pastikan urutannya tetap.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua.",
            "probe": "Ubah durasi satu dialog; bandingkan waktu baca dan pastikan urutannya tetap.",
            "check": "Dialog dan suara berurutan serta kedua dialog sempat dibaca pada durasi yang dipilih.",
            "studentItems": [
              "Susun dialog pertama, bunyi pop sampai selesai, lalu dialog kedua.",
              "Ubah durasi satu dialog; bandingkan waktu baca dan pastikan urutannya tetap.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 3,
          "title": "Pesan broadcast dan giliran tokoh",
          "target": "Penerima bergerak hanya ketika pesan cocok dan dialog pengirim tidak bertabrakan dengan respons.",
          "demo": "Mentor memperagakan kegiatan pertama: Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok. Pada salinan, ganti nama pesan penerima; prediksi respons, uji lalu pulihkan.",
          "check": "Penerima bergerak hanya ketika pesan cocok dan dialog pengirim tidak bertabrakan dengan respons.",
          "fault": "Nama pesan pada pengirim dan penerima berbeda",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S06-kode-siswa",
          "lessonType": "learning",
          "minimumTask": "Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok.",
            "understanding": "Pada salinan, ganti nama pesan penerima; prediksi respons, uji lalu pulihkan.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok.",
            "probe": "Pada salinan, ganti nama pesan penerima; prediksi respons, uji lalu pulihkan.",
            "check": "Penerima bergerak hanya ketika pesan cocok dan dialog pengirim tidak bertabrakan dengan respons.",
            "studentItems": [
              "Kirim pesan giliran dari Robot setelah dialog; Astronaut merespons pesan yang cocok.",
              "Pada salinan, ganti nama pesan penerima; prediksi respons, uji lalu pulihkan.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 4,
          "title": "Membuat proyek: Petualangan di Luar Angkasa",
          "target": "Menggabungkan keterampilan sesi 1–6 menjadi cerita tiga bagian dengan dua sprite",
          "demo": "Mulai dari proyek baru atau salinan latihan milik siswa. Tulis tiga bagian cerita, bangun versi minimum, lalu gunakan contoh mentor sebagai pembanding setelah mencoba sendiri.",
          "practice": "Lanjutkan latihan tersimpan; buat dua tokoh dengan satu pergantian giliran. Tema ditentukan siswa.",
          "check": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
          "fault": "Semua unsur disalin tanpa rencana atau bendera hijau tidak mengatur ulang keadaan",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Kembangkan cerita menjadi tiga bagian setelah versi dua tokoh lulus uji.",
          "evidence": "scratch-sd-pemula-S07-kode-siswa",
          "lessonType": "project",
          "minimumTask": "Lanjutkan latihan tersimpan; buat dua tokoh dengan satu pergantian giliran. Tema ditentukan siswa.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Lanjutkan latihan tersimpan; buat dua tokoh dengan satu pergantian giliran. Tema ditentukan siswa.",
            "understanding": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Lanjutkan latihan tersimpan; buat dua tokoh dengan satu pergantian giliran. Tema ditentukan siswa.",
            "probe": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "check": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Dua tokoh bergiliran melalui pesan yang cocok.",
              "Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 4,
          "title": "Presentasi proyek: Petualangan di Luar Angkasa",
          "target": "Mendemonstrasikan proyek, menjelaskan keputusan, dan menanggapi masukan dengan bukti",
          "demo": "Gunakan proyek siswa dari sesi 7. Tidak ada konsep blok baru. Atur giliran sesuai jumlah siswa; pisahkan waktu demo, penjelasan, pertanyaan, dan pencatatan masukan.",
          "practice": "Tunjukkan cerita dua tokoh, jalankan ulang, dan jelaskan satu broadcast serta satu perbaikan.",
          "check": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
          "fault": "Presentasi hanya menekan bendera tanpa menjelaskan proses atau menunjukkan sumber",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "scratch-sd-pemula-S08-kode-siswa",
          "lessonType": "presentation",
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Petualangan di Luar Angkasa tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "check": "Dua tokoh bergiliran melalui pesan yang cocok. Pesan tidak cocok membuat penerima menunggu; reset memulihkan awal.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 9,
          "project": 2,
          "phase": 1,
          "title": "Kontrol pemain dengan tombol panah",
          "target": "Arah tombol sesuai perubahan x dan speed yang lebih besar memberi perpindahan lebih jauh.",
          "demo": "Mentor memperagakan kegiatan pertama: Uji tombol kanan dan kiri Keranjang dari posisi tengah. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Uji tombol kanan dan kiri Keranjang dari posisi tengah. Ubah speed satu nilai; bandingkan jarak dengan lama tekan yang serupa.",
          "check": "Arah tombol sesuai perubahan x dan speed yang lebih besar memberi perpindahan lebih jauh.",
          "fault": "Pemeriksaan tombol hanya dilakukan sekali di luar loop.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S09-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Uji tombol kanan dan kiri Keranjang dari posisi tengah.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Uji tombol kanan dan kiri Keranjang dari posisi tengah.",
            "understanding": "Ubah speed satu nilai; bandingkan jarak dengan lama tekan yang serupa.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Uji tombol kanan dan kiri Keranjang dari posisi tengah.",
            "probe": "Ubah speed satu nilai; bandingkan jarak dengan lama tekan yang serupa.",
            "check": "Arah tombol sesuai perubahan x dan speed yang lebih besar memberi perpindahan lebih jauh.",
            "studentItems": [
              "Uji tombol kanan dan kiri Keranjang dari posisi tengah.",
              "Ubah speed satu nilai; bandingkan jarak dengan lama tekan yang serupa.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 10,
          "project": 2,
          "phase": 1,
          "title": "Batas gerak di tepi arena",
          "target": "Kedua batas menghentikan gerak tanpa memotong sprite; siswa menjelaskan mengapa pusat tidak harus mencapai x=240.",
          "demo": "Mentor memperagakan kegiatan pertama: Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat. Pada salinan, ubah batas lebih jauh lalu lebih dekat; pilih batas sesuai lebar Keranjang.",
          "check": "Kedua batas menghentikan gerak tanpa memotong sprite; siswa menjelaskan mengapa pusat tidak harus mencapai x=240.",
          "fault": "Membatasi hanya satu arah atau menggunakan tepi panggung untuk pusat sprite.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S10-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat.",
            "understanding": "Pada salinan, ubah batas lebih jauh lalu lebih dekat; pilih batas sesuai lebar Keranjang.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat.",
            "probe": "Pada salinan, ubah batas lebih jauh lalu lebih dekat; pilih batas sesuai lebar Keranjang.",
            "check": "Kedua batas menghentikan gerak tanpa memotong sprite; siswa menjelaskan mengapa pusat tidak harus mencapai x=240.",
            "studentItems": [
              "Tahan tombol ke tepi kanan dan kiri; periksa seluruh Keranjang tetap terlihat.",
              "Pada salinan, ubah batas lebih jauh lalu lebih dekat; pilih batas sesuai lebar Keranjang.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 11,
          "project": 2,
          "phase": 2,
          "title": "Objek jatuh dan posisi acak",
          "target": "Y turun, Bintang muncul ulang di atas dan posisi x berada dalam rentang; acak boleh menghasilkan nilai yang sama.",
          "demo": "Mentor memperagakan kegiatan pertama: Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas. Amati beberapa kemunculan; ubah rentang x acak agar jalur tetap berada di arena.",
          "check": "Y turun, Bintang muncul ulang di atas dan posisi x berada dalam rentang; acak boleh menghasilkan nilai yang sama.",
          "fault": "Hanya mengubah x sehingga objek tetap berada di bawah.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S11-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas.",
            "understanding": "Amati beberapa kemunculan; ubah rentang x acak agar jalur tetap berada di arena.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas.",
            "probe": "Amati beberapa kemunculan; ubah rentang x acak agar jalur tetap berada di arena.",
            "check": "Y turun, Bintang muncul ulang di atas dan posisi x berada dalam rentang; acak boleh menghasilkan nilai yang sama.",
            "studentItems": [
              "Biarkan satu Bintang terlewat dan prediksi kapan kembali ke atas.",
              "Amati beberapa kemunculan; ubah rentang x acak agar jalur tetap berada di arena.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 12,
          "project": 2,
          "phase": 2,
          "title": "Sentuhan dan skor satu tangkapan",
          "target": "Satu tangkapan menambah satu poin, Bintang terlewat tidak menambah poin dan kontak tidak dihitung berulang.",
          "demo": "Mentor memperagakan kegiatan pertama: Bandingkan skor sebelum/sesudah satu Bintang tertangkap. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Bandingkan skor sebelum/sesudah satu Bintang tertangkap. Biarkan Bintang terlewat lalu tangkap berikutnya; jelaskan perbedaan kedua hasil.",
          "check": "Satu tangkapan menambah satu poin, Bintang terlewat tidak menambah poin dan kontak tidak dihitung berulang.",
          "fault": "Bintang tetap menyentuh keranjang sehingga skor bertambah berulang.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S12-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Bandingkan skor sebelum/sesudah satu Bintang tertangkap.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Bandingkan skor sebelum/sesudah satu Bintang tertangkap.",
            "understanding": "Biarkan Bintang terlewat lalu tangkap berikutnya; jelaskan perbedaan kedua hasil.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Bandingkan skor sebelum/sesudah satu Bintang tertangkap.",
            "probe": "Biarkan Bintang terlewat lalu tangkap berikutnya; jelaskan perbedaan kedua hasil.",
            "check": "Satu tangkapan menambah satu poin, Bintang terlewat tidak menambah poin dan kontak tidak dihitung berulang.",
            "studentItems": [
              "Bandingkan skor sebelum/sesudah satu Bintang tertangkap.",
              "Biarkan Bintang terlewat lalu tangkap berikutnya; jelaskan perbedaan kedua hasil.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 13,
          "project": 2,
          "phase": 3,
          "title": "Hitung mundur dan status permainan",
          "target": "Waktu turun sesuai satu pengatur dan Status selesai saat batas tercapai, bukan lebih cepat akibat jam ganda.",
          "demo": "Mentor memperagakan kegiatan pertama: Prediksi perubahan Status ketika hitung mundur mencapai nol. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Prediksi perubahan Status ketika hitung mundur mencapai nol. Pada salinan, pendekkan waktu awal dan uji mulai sekali; periksa hitung mundur tidak berjalan ganda.",
          "check": "Waktu turun sesuai satu pengatur dan Status selesai saat batas tercapai, bukan lebih cepat akibat jam ganda.",
          "fault": "Membuat satu jam baru setiap tombol ditekan.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S13-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Prediksi perubahan Status ketika hitung mundur mencapai nol.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Prediksi perubahan Status ketika hitung mundur mencapai nol.",
            "understanding": "Pada salinan, pendekkan waktu awal dan uji mulai sekali; periksa hitung mundur tidak berjalan ganda.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Prediksi perubahan Status ketika hitung mundur mencapai nol.",
            "probe": "Pada salinan, pendekkan waktu awal dan uji mulai sekali; periksa hitung mundur tidak berjalan ganda.",
            "check": "Waktu turun sesuai satu pengatur dan Status selesai saat batas tercapai, bukan lebih cepat akibat jam ganda.",
            "studentItems": [
              "Prediksi perubahan Status ketika hitung mundur mencapai nol.",
              "Pada salinan, pendekkan waktu awal dan uji mulai sekali; periksa hitung mundur tidak berjalan ganda.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 14,
          "project": 2,
          "phase": 3,
          "title": "Layar hasil dan tombol main lagi",
          "target": "Main ulang mengembalikan semua keadaan awal dan pengatur waktu tidak bertambah setiap klik.",
          "demo": "Mentor memperagakan kegiatan pertama: Selesaikan satu putaran lalu tekan Main Lagi. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Selesaikan satu putaran lalu tekan Main Lagi. Ulangi setelah skor berubah; periksa Skor 0, Waktu 30 dan posisi Keranjang kembali awal.",
          "check": "Main ulang mengembalikan semua keadaan awal dan pengatur waktu tidak bertambah setiap klik.",
          "fault": "Tampilan berubah tetapi data lama atau pengatur waktu ganda masih tersisa.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S14-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Selesaikan satu putaran lalu tekan Main Lagi.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Selesaikan satu putaran lalu tekan Main Lagi.",
            "understanding": "Ulangi setelah skor berubah; periksa Skor 0, Waktu 30 dan posisi Keranjang kembali awal.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Selesaikan satu putaran lalu tekan Main Lagi.",
            "probe": "Ulangi setelah skor berubah; periksa Skor 0, Waktu 30 dan posisi Keranjang kembali awal.",
            "check": "Main ulang mengembalikan semua keadaan awal dan pengatur waktu tidak bertambah setiap klik.",
            "studentItems": [
              "Selesaikan satu putaran lalu tekan Main Lagi.",
              "Ulangi setelah skor berubah; periksa Skor 0, Waktu 30 dan posisi Keranjang kembali awal.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 15,
          "project": 2,
          "phase": 4,
          "title": "Membuat proyek: Tangkap Bintang",
          "target": "Menggabungkan enam keterampilan modul menjadi Tangkap Bintang dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Tangkap Bintang. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Ubah satu parameter, susunan, atau aturan pada langkah ini; prediksi hasilnya dan bandingkan dengan bukti tanpa menambah ruang lingkup proyek.",
          "evidence": "scratch-sd-pemula-S15-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Tangkap Bintang. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Tangkap Bintang. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Tangkap Bintang. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "check": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Satu tangkapan menambah satu poin.",
              "Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 16,
          "project": 2,
          "phase": 4,
          "title": "Presentasi proyek: Tangkap Bintang",
          "target": "Mendemonstrasikan Tangkap Bintang, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 15. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 15. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "scratch-sd-pemula-S16-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Tangkap Bintang tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "check": "Satu tangkapan menambah satu poin. Bintang terlewat tidak memberi poin dan Main Lagi mengembalikan waktu/skor.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 17,
          "project": 3,
          "phase": 1,
          "title": "Peta labirin dan gerak dua sumbu",
          "target": "Arah gerak sesuai sumbu dan pemain mencapai titik pilihan melalui jalur, bukan melewati dinding.",
          "demo": "Mentor memperagakan kegiatan pertama: Uji empat arah pemain pada jalur awal labirin. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Uji empat arah pemain pada jalur awal labirin. Pilih satu titik jalur sendiri dan prediksi perubahan x/y untuk mencapainya.",
          "check": "Arah gerak sesuai sumbu dan pemain mencapai titik pilihan melalui jalur, bukan melewati dinding.",
          "fault": "Gerak atas memakai perubahan x atau awal pemain berada di dalam dinding.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S17-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Uji empat arah pemain pada jalur awal labirin.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Uji empat arah pemain pada jalur awal labirin.",
            "understanding": "Pilih satu titik jalur sendiri dan prediksi perubahan x/y untuk mencapainya.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Uji empat arah pemain pada jalur awal labirin.",
            "probe": "Pilih satu titik jalur sendiri dan prediksi perubahan x/y untuk mencapainya.",
            "check": "Arah gerak sesuai sumbu dan pemain mencapai titik pilihan melalui jalur, bukan melewati dinding.",
            "studentItems": [
              "Uji empat arah pemain pada jalur awal labirin.",
              "Pilih satu titik jalur sendiri dan prediksi perubahan x/y untuk mencapainya.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 18,
          "project": 3,
          "phase": 1,
          "title": "Deteksi dinding dan posisi aman",
          "target": "Dinding memicu pengembalian ke posisi aman; jalur kosong tidak, dan nyawa belum menjadi ukuran sesi ini.",
          "demo": "Mentor memperagakan kegiatan pertama: Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman. Bandingkan berjalan di jalur kosong dengan menyentuh sisi dinding lain.",
          "check": "Dinding memicu pengembalian ke posisi aman; jalur kosong tidak, dan nyawa belum menjadi ukuran sesi ini.",
          "fault": "Warna yang dipilih berasal dari lantai atau sprite.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S18-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman.",
            "understanding": "Bandingkan berjalan di jalur kosong dengan menyentuh sisi dinding lain.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman.",
            "probe": "Bandingkan berjalan di jalur kosong dengan menyentuh sisi dinding lain.",
            "check": "Dinding memicu pengembalian ke posisi aman; jalur kosong tidak, dan nyawa belum menjadi ukuran sesi ini.",
            "studentItems": [
              "Sentuhkan pemain pada dinding dan amati kembalinya ke posisi aman.",
              "Bandingkan berjalan di jalur kosong dengan menyentuh sisi dinding lain.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 19,
          "project": 3,
          "phase": 2,
          "title": "Nyawa dan satu hukuman per kontak",
          "target": "Satu kontak memberi satu pengurangan, kontak berikutnya memberi satu lagi dan nyawa tidak terus turun saat dipulihkan.",
          "demo": "Mentor memperagakan kegiatan pertama: Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman. Buat kontak kedua yang terpisah; bandingkan dengan menahan pemain pada satu kontak.",
          "check": "Satu kontak memberi satu pengurangan, kontak berikutnya memberi satu lagi dan nyawa tidak terus turun saat dipulihkan.",
          "fault": "Hukuman dihitung terus selama pemain menempel pada dinding.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S19-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman.",
            "understanding": "Buat kontak kedua yang terpisah; bandingkan dengan menahan pemain pada satu kontak.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman.",
            "probe": "Buat kontak kedua yang terpisah; bandingkan dengan menahan pemain pada satu kontak.",
            "check": "Satu kontak memberi satu pengurangan, kontak berikutnya memberi satu lagi dan nyawa tidak terus turun saat dipulihkan.",
            "studentItems": [
              "Catat Nyawa sebelum satu kontak dinding dan sesudah kembali aman.",
              "Buat kontak kedua yang terpisah; bandingkan dengan menahan pemain pada satu kontak.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 20,
          "project": 3,
          "phase": 2,
          "title": "Kunci sebagai data keadaan",
          "target": "Kunci yang diambil tersembunyi dan bernilai 1; tidak dikoleksi ulang, sedangkan reset menampilkan Kunci dengan nilai 0.",
          "demo": "Mentor memperagakan kegiatan pertama: Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data. Kembali ke tempat Kunci tanpa reset lalu mulai ulang untuk membandingkan keadaan.",
          "check": "Kunci yang diambil tersembunyi dan bernilai 1; tidak dikoleksi ulang, sedangkan reset menampilkan Kunci dengan nilai 0.",
          "fault": "Kunci hanya disembunyikan tanpa mengubah datanya.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S20-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data.",
            "understanding": "Kembali ke tempat Kunci tanpa reset lalu mulai ulang untuk membandingkan keadaan.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data.",
            "probe": "Kembali ke tempat Kunci tanpa reset lalu mulai ulang untuk membandingkan keadaan.",
            "check": "Kunci yang diambil tersembunyi dan bernilai 1; tidak dikoleksi ulang, sedangkan reset menampilkan Kunci dengan nilai 0.",
            "studentItems": [
              "Mulai dari Kunci 0 lalu ambil Kunci dan cocokkan tampilannya dengan data.",
              "Kembali ke tempat Kunci tanpa reset lalu mulai ulang untuk membandingkan keadaan.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 21,
          "project": 3,
          "phase": 3,
          "title": "Pintu dan kondisi penyelesaian",
          "target": "Pintu menolak tanpa kunci dan menerima setelah kunci diambil; posisi dekat saja tidak memenuhi syarat.",
          "demo": "Mentor memperagakan kegiatan pertama: Pada salinan uji, dekati Pintu saat Kunci 0. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Pada salinan uji, dekati Pintu saat Kunci 0. Ambil Kunci lalu dekati Pintu lagi; bandingkan hasil tanpa mengubah aturan pintu.",
          "check": "Pintu menolak tanpa kunci dan menerima setelah kunci diambil; posisi dekat saja tidak memenuhi syarat.",
          "fault": "Pintu selalu menerima karena hanya memeriksa sentuhan.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S21-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Pada salinan uji, dekati Pintu saat Kunci 0.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Pada salinan uji, dekati Pintu saat Kunci 0.",
            "understanding": "Ambil Kunci lalu dekati Pintu lagi; bandingkan hasil tanpa mengubah aturan pintu.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Pada salinan uji, dekati Pintu saat Kunci 0.",
            "probe": "Ambil Kunci lalu dekati Pintu lagi; bandingkan hasil tanpa mengubah aturan pintu.",
            "check": "Pintu menolak tanpa kunci dan menerima setelah kunci diambil; posisi dekat saja tidak memenuhi syarat.",
            "studentItems": [
              "Pada salinan uji, dekati Pintu saat Kunci 0.",
              "Ambil Kunci lalu dekati Pintu lagi; bandingkan hasil tanpa mengubah aturan pintu.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 22,
          "project": 3,
          "phase": 3,
          "title": "Pergantian level dan reset",
          "target": "Peta cocok dengan Level dan pemain/Kunci siap pada level baru; data putaran lama tidak terbawa.",
          "demo": "Mentor memperagakan kegiatan pertama: Pindah ke level dua dan periksa peta, posisi pemain serta Kunci. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Pindah ke level dua dan periksa peta, posisi pemain serta Kunci. Ulangi dari level awal setelah Kunci pernah diambil; cari data lama yang belum direset.",
          "check": "Peta cocok dengan Level dan pemain/Kunci siap pada level baru; data putaran lama tidak terbawa.",
          "fault": "Backdrop berubah tetapi pemain atau kunci tetap pada keadaan level lama.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S22-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Pindah ke level dua dan periksa peta, posisi pemain serta Kunci.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Pindah ke level dua dan periksa peta, posisi pemain serta Kunci.",
            "understanding": "Ulangi dari level awal setelah Kunci pernah diambil; cari data lama yang belum direset.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Pindah ke level dua dan periksa peta, posisi pemain serta Kunci.",
            "probe": "Ulangi dari level awal setelah Kunci pernah diambil; cari data lama yang belum direset.",
            "check": "Peta cocok dengan Level dan pemain/Kunci siap pada level baru; data putaran lama tidak terbawa.",
            "studentItems": [
              "Pindah ke level dua dan periksa peta, posisi pemain serta Kunci.",
              "Ulangi dari level awal setelah Kunci pernah diambil; cari data lama yang belum direset.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 23,
          "project": 3,
          "phase": 4,
          "title": "Membuat proyek: Labirin Kunci Rahasia",
          "target": "Menggabungkan enam keterampilan modul menjadi Labirin Kunci Rahasia dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Labirin Kunci Rahasia. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Ubah satu parameter, susunan, atau aturan pada langkah ini; prediksi hasilnya dan bandingkan dengan bukti tanpa menambah ruang lingkup proyek.",
          "evidence": "scratch-sd-pemula-S23-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Labirin Kunci Rahasia. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Labirin Kunci Rahasia. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Labirin Kunci Rahasia. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "check": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Pintu menerima pemain setelah kunci diambil.",
              "Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 24,
          "project": 3,
          "phase": 4,
          "title": "Presentasi proyek: Labirin Kunci Rahasia",
          "target": "Mendemonstrasikan Labirin Kunci Rahasia, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 23. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 23. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "scratch-sd-pemula-S24-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Labirin Kunci Rahasia tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "check": "Pintu menerima pemain setelah kunci diambil. Tanpa kunci ditolak; kontak dinding dan reset tidak membawa data lama.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 25,
          "project": 4,
          "phase": 1,
          "title": "Brief permainan dan kontrol pesawat",
          "target": "Tujuan serta tombol dapat dijelaskan dan Pesawat tetap terlihat pada kedua tepi.",
          "demo": "Mentor memperagakan kegiatan pertama: Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi. Ubah satu kecepatan pada salinan; pilih yang masih bisa dikendalikan tanpa keluar arena.",
          "check": "Tujuan serta tombol dapat dijelaskan dan Pesawat tetap terlihat pada kedua tepi.",
          "fault": "Menambah banyak meteor sebelum kontrol dapat digunakan.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S25-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi.",
            "understanding": "Ubah satu kecepatan pada salinan; pilih yang masih bisa dikendalikan tanpa keluar arena.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi.",
            "probe": "Ubah satu kecepatan pada salinan; pilih yang masih bisa dikendalikan tanpa keluar arena.",
            "check": "Tujuan serta tombol dapat dijelaskan dan Pesawat tetap terlihat pada kedua tepi.",
            "studentItems": [
              "Tulis tujuan game satu kalimat dan uji kontrol Pesawat ke dua tepi.",
              "Ubah satu kecepatan pada salinan; pilih yang masih bisa dikendalikan tanpa keluar arena.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 26,
          "project": 4,
          "phase": 1,
          "title": "Sprite induk dan clone pertama",
          "target": "Induk tetap tersembunyi, satu clone bergerak dan siswa menunjuk skrip yang menjalankan clone.",
          "demo": "Mentor memperagakan kegiatan pertama: Buat satu clone Meteor dari induk yang tersembunyi. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Buat satu clone Meteor dari induk yang tersembunyi. Bedakan skrip bendera dan ketika clone mulai; ubah gerak clone dan prediksi siapa yang terpengaruh.",
          "check": "Induk tetap tersembunyi, satu clone bergerak dan siswa menunjuk skrip yang menjalankan clone.",
          "fault": "Induk dan clone sama-sama terlihat tanpa alasan.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S26-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Buat satu clone Meteor dari induk yang tersembunyi.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Buat satu clone Meteor dari induk yang tersembunyi.",
            "understanding": "Bedakan skrip bendera dan ketika clone mulai; ubah gerak clone dan prediksi siapa yang terpengaruh.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Menghubungkan beberapa bagian; mulai satu perubahan dan satu uji.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Buat satu clone Meteor dari induk yang tersembunyi.",
            "probe": "Bedakan skrip bendera dan ketika clone mulai; ubah gerak clone dan prediksi siapa yang terpengaruh.",
            "check": "Induk tetap tersembunyi, satu clone bergerak dan siswa menunjuk skrip yang menjalankan clone.",
            "studentItems": [
              "Buat satu clone Meteor dari induk yang tersembunyi.",
              "Bedakan skrip bendera dan ketika clone mulai; ubah gerak clone dan prediksi siapa yang terpengaruh.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 27,
          "project": 4,
          "phase": 2,
          "title": "Kemunculan acak dan pembersihan clone",
          "target": "Kemunculan berada dalam rentang baru dan clone lama tidak menumpuk setelah keluar arena.",
          "demo": "Mentor memperagakan kegiatan pertama: Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena. Persempit rentang pada salinan lalu uji; periksa clone yang sudah selesai dihapus.",
          "check": "Kemunculan berada dalam rentang baru dan clone lama tidak menumpuk setelah keluar arena.",
          "fault": "Menggunakan hide sebagai pengganti delete untuk seluruh meteor selesai.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S27-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena.",
            "understanding": "Persempit rentang pada salinan lalu uji; periksa clone yang sudah selesai dihapus.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Menghubungkan beberapa bagian; mulai satu perubahan dan satu uji.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena.",
            "probe": "Persempit rentang pada salinan lalu uji; periksa clone yang sudah selesai dihapus.",
            "check": "Kemunculan berada dalam rentang baru dan clone lama tidak menumpuk setelah keluar arena.",
            "studentItems": [
              "Amati beberapa Meteor muncul pada rentang x dan selesai di bawah arena.",
              "Persempit rentang pada salinan lalu uji; periksa clone yang sudah selesai dihapus.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 28,
          "project": 4,
          "phase": 2,
          "title": "Tabrakan meteor dan nyawa",
          "target": "Tabrakan mengurangi tepat satu nyawa dan Meteor terlewat tidak mengurangi nyawa.",
          "demo": "Mentor memperagakan kegiatan pertama: Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat. Ulangi dari keadaan awal; periksa satu tabrakan tidak memotong beberapa nyawa sekaligus.",
          "check": "Tabrakan mengurangi tepat satu nyawa dan Meteor terlewat tidak mengurangi nyawa.",
          "fault": "Meteor tetap hidup sesudah tabrakan dan memberi hukuman berulang.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S28-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat.",
            "understanding": "Ulangi dari keadaan awal; periksa satu tabrakan tidak memotong beberapa nyawa sekaligus.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat.",
            "probe": "Ulangi dari keadaan awal; periksa satu tabrakan tidak memotong beberapa nyawa sekaligus.",
            "check": "Tabrakan mengurangi tepat satu nyawa dan Meteor terlewat tidak mengurangi nyawa.",
            "studentItems": [
              "Bandingkan satu Meteor mengenai Pesawat dengan satu yang terlewat.",
              "Ulangi dari keadaan awal; periksa satu tabrakan tidak memotong beberapa nyawa sekaligus.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 29,
          "project": 4,
          "phase": 3,
          "title": "Skor dan peningkatan kesulitan",
          "target": "Parameter berubah pada ambang yang ditentukan; poin dan hukuman tabrakan tetap dibedakan.",
          "demo": "Mentor memperagakan kegiatan pertama: Tandai ambang Skor yang mengubah kecepatan atau interval Meteor. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Tandai ambang Skor yang mengubah kecepatan atau interval Meteor. Bandingkan tepat di bawah dan pada ambang menggunakan salinan uji; ubah satu ambang lalu prediksi.",
          "check": "Parameter berubah pada ambang yang ditentukan; poin dan hukuman tabrakan tetap dibedakan.",
          "fault": "Setiap meteor menambah skor sekaligus mengurangi nyawa.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S29-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Tandai ambang Skor yang mengubah kecepatan atau interval Meteor.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Tandai ambang Skor yang mengubah kecepatan atau interval Meteor.",
            "understanding": "Bandingkan tepat di bawah dan pada ambang menggunakan salinan uji; ubah satu ambang lalu prediksi.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Tandai ambang Skor yang mengubah kecepatan atau interval Meteor.",
            "probe": "Bandingkan tepat di bawah dan pada ambang menggunakan salinan uji; ubah satu ambang lalu prediksi.",
            "check": "Parameter berubah pada ambang yang ditentukan; poin dan hukuman tabrakan tetap dibedakan.",
            "studentItems": [
              "Tandai ambang Skor yang mengubah kecepatan atau interval Meteor.",
              "Bandingkan tepat di bawah dan pada ambang menggunakan salinan uji; ubah satu ambang lalu prediksi.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 30,
          "project": 4,
          "phase": 3,
          "title": "Game over dan main ulang yang bersih",
          "target": "Nyawa/Skor kembali awal, clone lama bersih dan putaran kedua tidak melahirkan pengatur ganda.",
          "demo": "Mentor memperagakan kegiatan pertama: Capai game over dan tekan main ulang setelah beberapa clone pernah muncul. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Capai game over dan tekan main ulang setelah beberapa clone pernah muncul. Periksa data awal, pengatur spawn dan sisa clone; jalankan putaran kedua.",
          "check": "Nyawa/Skor kembali awal, clone lama bersih dan putaran kedua tidak melahirkan pengatur ganda.",
          "fault": "Skor kembali nol tetapi clone dari putaran lama tetap aktif.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
          "evidence": "scratch-sd-pemula-S30-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Capai game over dan tekan main ulang setelah beberapa clone pernah muncul.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 15,
            "guidedMinutes": 12,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Capai game over dan tekan main ulang setelah beberapa clone pernah muncul.",
            "understanding": "Periksa data awal, pengatur spawn dan sisa clone; jalankan putaran kedua.",
            "enrichment": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya.",
            "estimatedIndependent": {
              "min": 10,
              "max": 15,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Capai game over dan tekan main ulang setelah beberapa clone pernah muncul.",
            "probe": "Periksa data awal, pengatur spawn dan sisa clone; jalankan putaran kedua.",
            "check": "Nyawa/Skor kembali awal, clone lama bersih dan putaran kedua tidak melahirkan pengatur ganda.",
            "studentItems": [
              "Capai game over dan tekan main ulang setelah beberapa clone pernah muncul.",
              "Periksa data awal, pengatur spawn dan sisa clone; jalankan putaran kedua.",
              "Jelaskan hasil uji dan simpan sumbermu."
            ],
            "estimate": {
              "min": 10,
              "max": 15
            },
            "extension": "Setelah versi inti dipahami, pilih satu nilai atau variasi tambahan dan buktikan prediksinya."
          }
        },
        {
          "number": 31,
          "project": 4,
          "phase": 4,
          "title": "Membuat proyek: Misi Hindari Meteor",
          "target": "Menggabungkan enam keterampilan modul menjadi Misi Hindari Meteor dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Misi Hindari Meteor. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Ubah satu parameter, susunan, atau aturan pada langkah ini; prediksi hasilnya dan bandingkan dengan bukti tanpa menambah ruang lingkup proyek.",
          "evidence": "scratch-sd-pemula-S31-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Misi Hindari Meteor. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Misi Hindari Meteor. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Misi Hindari Meteor. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "check": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Meteor jatuh dan satu tabrakan mengurangi satu nyawa.",
              "Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 32,
          "project": 4,
          "phase": 4,
          "title": "Presentasi proyek: Misi Hindari Meteor",
          "target": "Mendemonstrasikan Misi Hindari Meteor, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 31. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 31. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Mentor membacakan brief, memberi satu contoh, lalu siswa memilih warna, tokoh, atau susunan sendiri. Periksa satu perubahan pada satu waktu.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "scratch-sd-pemula-S32-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Gunakan tema atau data baru pada Misi Hindari Meteor tanpa menyalin urutan contoh; jelaskan bagian yang berubah dan perbaiki satu kesalahan.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Contoh kecil dan bantuan bertahap tersedia.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "check": "Meteor jatuh dan satu tabrakan mengurangi satu nyawa. Clone selesai dibersihkan dan putaran kedua tidak memakai spawn ganda.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        }
      ],
      "learningApproach": "Mentor memberi contoh kecil; siswa memprediksi, mencoba variasi, lalu menjelaskan dan memperbaiki hasil."
    },
    {
      "id": "sd-lanjutan",
      "age": "SD",
      "level": "lanjutan",
      "name": "SD · Lanjutan",
      "entry": "Dapat mengatur event, gerakan, kondisi, variabel skor, serta menelusuri main ulang pada game sederhana.",
      "target": "Merancang algoritma berbasis data, mengelola keadaan dan giliran, serta menguji perubahan aturan tanpa merakit ulang seluruh program.",
      "scope": "32 sesi × 1 jam; empat proyek × delapan sesi. Setiap proyek diawali latihan penghubung list, variabel lokal/clone, pemeriksa garis, atau jam tunggal. Mentor memberi kartu indeks dan kerangka kecil; versi minimum wajib selesai sebelum pengayaan.",
      "adaptation": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru.",
      "projects": [
        {
          "name": "Robot Pengantar Paket",
          "topic": "Algoritma berbasis daftar dan prosedur gerak",
          "out": "Robot membaca daftar arah menuju satu tujuan, menolak langkah keluar papan, dan reset; dua tujuan menjadi pengayaan.",
          "novelty": "Berbeda dari kontrol panah dan labirin Pemula: siswa membuat penafsir instruksi yang bisa menjalankan rute berbeda sebagai data.",
          "stages": [
            {
              "title": "Kontrak instruksi",
              "task": "Audit event dan variabel: Telusuri satu event, kondisi, serta reset pada contoh kecil; Daftar arah dan indeks: Buat daftar kanan-kanan-atas lalu baca satu item melalui indeks",
              "check": "Rencana memisahkan data rute dari aturan gerak dan memprediksi posisi akhir",
              "fault": "Daftar arah ditulis sebagai gerakan tetap di beberapa skrip"
            },
            {
              "title": "Prosedur pembaca rute",
              "task": "Koordinat petak: Petakan satu sprite ke koordinat papan 4 × 4 dengan acuan mentor; Blok buatanku satu langkah: Buat prosedur yang menjalankan satu arah dari daftar",
              "check": "Mengganti isi daftar mengubah rute tanpa menyalin skrip gerak",
              "fault": "Indeks rute bertambah dua kali sehingga satu arah terlewati"
            },
            {
              "title": "Validasi langkah",
              "task": "Calon posisi dan batas: Periksa koordinat calon sebelum memindahkan sprite; Pemutar rute: Ulangi pembacaan satu item dan tambah indeks tepat sekali",
              "check": "Langkah keluar papan ditolak tanpa mengubah posisi dan indeks ditangani sesuai aturan tertulis",
              "fault": "Koordinat diubah sebelum pemeriksaan sehingga robot terlanjur keluar"
            },
            {
              "title": "Rute baru mandiri",
              "task": "Rute baru dan reset: Ganti data arah serta kembalikan indeks dan posisi; Presentasi robot: Uji tujuan baru dengan daftar yang dibuat siswa",
              "check": "Robot mencapai tujuan baru lewat perubahan data dan kembali ke keadaan awal secara konsisten",
              "fault": "Putaran baru masih memakai indeks dan posisi akhir sebelumnya"
            }
          ],
          "steps": [
            "Audit event dan variabel; Daftar arah dan indeks.",
            "Koordinat petak; Blok buatanku satu langkah.",
            "Calon posisi dan batas; Pemutar rute.",
            "Sesi 7: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 8: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Rencana memisahkan data rute dari aturan gerak dan memprediksi posisi akhir",
            "Mengganti isi daftar mengubah rute tanpa menyalin skrip gerak",
            "Langkah keluar papan ditolak tanpa mengubah posisi dan indeks ditangani sesuai aturan tertulis",
            "Robot mencapai tujuan baru lewat perubahan data dan kembali ke keadaan awal secara konsisten"
          ],
          "faults": [
            "Daftar arah ditulis sebagai gerakan tetap di beberapa skrip",
            "Indeks rute bertambah dua kali sehingga satu arah terlewati",
            "Koordinat diubah sebelum pemeriksaan sehingga robot terlanjur keluar",
            "Putaran baru masih memakai indeks dan posisi akhir sebelumnya"
          ],
          "recipe": "Modelkan koordinat petak 0–3. Rute kanan, kanan, atas dari (0,0) berakhir di (2,1). Blok jalankan langkah menghitung calon x/y, memeriksa rentang, lalu mengubah posisi hanya jika valid. Uji kiri dari (0,0): tetap (0,0), tampilkan pesan batas. Letak visual petak dipetakan dari koordinat data.",
          "decisions": [
            "Apakah langkah tidak valid menghentikan rute atau dilewati? Tuliskan aturan dan alasannya.",
            "Bandingkan menyimpan rute sebagai daftar dengan menyalin skrip untuk setiap tujuan."
          ],
          "transfer": "Tujuan dipindah dari (2,1) ke (1,3); siswa membuat daftar baru dan menjelaskan hasil sebelum menjalankannya.",
          "visual": {
            "type": "route",
            "labels": [
              "MULAI",
              "PAKET A",
              "PAKET B"
            ],
            "caption": "Daftar arah → periksa batas → jalankan prosedur"
          },
          "art": "scratch-lanjutan-p1-ai.png",
          "number": 1,
          "start": 1,
          "end": 8,
          "minimum": "Papan 4 × 4, satu robot, satu rute ke satu tujuan; tujuan kedua setelah uji awal lolos.",
          "bridge": "List dan indeks → koordinat → satu prosedur langkah → pemutar rute.",
          "readiness": [
            "Siswa memprediksi satu perubahan data dan menunjukkan hasil yang cocok.",
            "Siswa menguji dari keadaan awal, menjelaskan satu kesalahan, dan memperbaikinya dengan bantuan yang dicatat."
          ],
          "extensionTarget": "Dua tujuan dengan data rute berbeda tanpa menyalin logika gerak.",
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-lanjutan-p1-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 1–6: enam pembelajaran; sesi 7: membuat proyek; sesi 8: presentasi proyek.",
          "minimumOutcome": "Papan 4 × 4, satu robot, satu rute ke satu tujuan; tujuan kedua setelah uji awal lolos.",
          "minimumChecks": [
            "Rencana memisahkan data rute dari aturan gerak dan memprediksi posisi akhir",
            "Mengganti isi daftar mengubah rute tanpa menyalin skrip gerak",
            "Langkah keluar papan ditolak tanpa mengubah posisi dan indeks ditangani sesuai aturan tertulis"
          ],
          "enrichment": "Dua tujuan dengan data rute berbeda tanpa menyalin logika gerak.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Kebun Virtual",
          "topic": "Keadaan entitas dan satu pengatur waktu",
          "out": "Dua tanaman memiliki air serta keadaan sendiri dan merespons satu jam bersama; tanaman ketiga menjadi pengayaan.",
          "novelty": "Bukan game menangkap benda: siswa mengatur beberapa objek dengan keadaan sendiri serta aturan perubahan yang dapat ditelusuri.",
          "stages": [
            {
              "title": "Model tanaman",
              "task": "Keadaan satu tanaman: Gambar tiga keadaan benih-tumbuh-kering dan pemicunya; Variabel untuk sprite ini: Beri air lokal pada satu tanaman dan bandingkan dengan variabel global",
              "check": "Setiap perubahan memiliki pemicu dan akibat yang jelas tanpa bergantung pada dekorasi",
              "fault": "Tampilan daun dipakai sebagai satu-satunya penyimpan keadaan"
            },
            {
              "title": "Entitas mandiri",
              "task": "Clone pertama: Buat satu clone dengan nilai air sendiri dari kerangka mentor; Dua tanaman mandiri: Uji menyiram hanya satu clone tanpa mengubah yang lain",
              "check": "Menyiram tanaman A tidak mengubah data tanaman B",
              "fault": "Semua clone memakai satu variabel sisa air global"
            },
            {
              "title": "Jam dan tindakan",
              "task": "Satu pengatur tick: Kirim satu broadcast tick dari pengatur pusat; Transisi keadaan: Perbarui air lalu pilih kostum sesuai aturan yang disepakati",
              "check": "Satu tick mengubah data sekali dan keadaan ditampilkan sesuai data",
              "fault": "Setiap clone menambah pengatur waktu sehingga kebun makin cepat"
            },
            {
              "title": "Simulasi cuaca",
              "task": "Tiga tanaman dan reset: Bersihkan clone lama sebelum membangun ulang kebun; Presentasi kebun: Uji interval cuaca baru dan jelaskan keadaan tiap tanaman",
              "check": "Perubahan interval tidak merusak keadaan lokal dan tidak meninggalkan clone lama",
              "fault": "Mulai ulang menambah clone baru tanpa membersihkan kebun sebelumnya"
            }
          ],
          "steps": [
            "Keadaan satu tanaman; Variabel untuk sprite ini.",
            "Clone pertama; Dua tanaman mandiri.",
            "Satu pengatur tick; Transisi keadaan.",
            "Sesi 15: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 16: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Setiap perubahan memiliki pemicu dan akibat yang jelas tanpa bergantung pada dekorasi",
            "Menyiram tanaman A tidak mengubah data tanaman B",
            "Satu tick mengubah data sekali dan keadaan ditampilkan sesuai data",
            "Perubahan interval tidak merusak keadaan lokal dan tidak meninggalkan clone lama"
          ],
          "faults": [
            "Tampilan daun dipakai sebagai satu-satunya penyimpan keadaan",
            "Semua clone memakai satu variabel sisa air global",
            "Setiap clone menambah pengatur waktu sehingga kebun makin cepat",
            "Mulai ulang menambah clone baru tanpa membersihkan kebun sebelumnya"
          ],
          "recipe": "Satu pengatur mengirim tick tiap interval. Tiap clone memiliki air dan keadaan lokal: benih dengan air cukup menjadi tumbuh; tumbuh dengan air nol menjadi kering. Pilih aturan sederhana: tanaman kering harus ditanam ulang. Saat menyiram satu clone, airnya bertambah sampai batas. Periksa dua tanaman dengan air berbeda setelah dua tick.",
          "decisions": [
            "Pilih angka batas air dan durasi tick yang membuat aturan dapat diamati.",
            "Tentukan apakah tanaman kering bisa pulih; jangan membiarkan perilakunya berubah antarversi."
          ],
          "transfer": "Mentor mengganti interval musim kering; siswa mengubah konfigurasi dan memprediksi tanaman mana yang kering lebih dahulu.",
          "visual": {
            "type": "garden",
            "labels": [
              "BENIH",
              "TUMBUH",
              "KERING"
            ],
            "caption": "Keadaan lokal per tanaman · satu jam bersama"
          },
          "art": "scratch-lanjutan-p2-ai.png",
          "number": 2,
          "start": 9,
          "end": 16,
          "minimum": "Dua tanaman dengan air lokal serta satu pengatur tick; tanaman ketiga setelah dua state terbukti mandiri.",
          "bridge": "Satu state → variabel lokal → dua clone → tick bersama.",
          "readiness": [
            "Siswa memprediksi satu perubahan data dan menunjukkan hasil yang cocok.",
            "Siswa menguji dari keadaan awal, menjelaskan satu kesalahan, dan memperbaikinya dengan bantuan yang dicatat."
          ],
          "extensionTarget": "Tiga tanaman dan interval cuaca berbeda.",
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-lanjutan-p2-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 9–14: enam pembelajaran; sesi 15: membuat proyek; sesi 16: presentasi proyek.",
          "minimumOutcome": "Dua tanaman dengan air lokal serta satu pengatur tick; tanaman ketiga setelah dua state terbukti mandiri.",
          "minimumChecks": [
            "Setiap perubahan memiliki pemicu dan akibat yang jelas tanpa bergantung pada dekorasi",
            "Menyiram tanaman A tidak mengubah data tanaman B",
            "Satu tick mengubah data sekali dan keadaan ditampilkan sesuai data"
          ],
          "enrichment": "Tiga tanaman dan interval cuaca berbeda.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Papan Strategi Dua Pemain",
          "topic": "Representasi papan, giliran, dan evaluasi kondisi",
          "out": "Permainan papan 3 × 3 membedakan giliran, menolak petak terisi, dan mendeteksi menang atau seri.",
          "novelty": "Meningkat dari sensor sentuh Pemula ke aturan berbasis data: papan menjadi daftar dan hasil dievaluasi melalui prosedur.",
          "stages": [
            {
              "title": "Data papan",
              "task": "Daftar sembilan petak: Petakan sembilan kotak ke indeks dengan kartu acuan; Giliran pemain: Simpan tanda pemain dan ubah hanya setelah langkah diterima",
              "check": "Setiap petak mempunyai satu indeks dan contoh hasil dapat diperiksa di atas kertas",
              "fault": "Dua petak visual merujuk indeks data yang sama"
            },
            {
              "title": "Transaksi giliran",
              "task": "Pilih petak kosong: Tolak klik petak terisi tanpa memindah giliran; Periksa satu garis: Buat prosedur pembanding tiga petak yang tidak kosong",
              "check": "Klik petak terisi tidak mengganti tanda maupun memindahkan giliran",
              "fault": "Giliran berpindah walau langkah ditolak"
            },
            {
              "title": "Pemeriksa hasil",
              "task": "Delapan garis dengan acuan: Pakai tabel delapan garis dari mentor pada prosedur pemeriksa; Menang seri dan berhenti: Periksa menang sebelum seri lalu tolak klik setelah selesai",
              "check": "Garis menang, papan seri, dan permainan berjalan dibedakan dari data",
              "fault": "Tiga petak kosong dianggap menang karena nilainya sama"
            },
            {
              "title": "Matriks pengujian",
              "task": "Reset dan kasus baru: Kosongkan data serta tampilan dan uji satu susunan dari teman; Presentasi papan: Jelaskan hasil papan baru dan buktikan aturan giliran",
              "check": "Pemeriksaan menolak perubahan setelah selesai dan sembilan petak dibersihkan saat ulang",
              "fault": "Papan terlihat kosong tetapi daftar masih menyimpan tanda lama"
            }
          ],
          "steps": [
            "Daftar sembilan petak; Giliran pemain.",
            "Pilih petak kosong; Periksa satu garis.",
            "Delapan garis dengan acuan; Menang seri dan berhenti.",
            "Sesi 23: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 24: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Setiap petak mempunyai satu indeks dan contoh hasil dapat diperiksa di atas kertas",
            "Klik petak terisi tidak mengganti tanda maupun memindahkan giliran",
            "Garis menang, papan seri, dan permainan berjalan dibedakan dari data",
            "Pemeriksaan menolak perubahan setelah selesai dan sembilan petak dibersihkan saat ulang"
          ],
          "faults": [
            "Dua petak visual merujuk indeks data yang sama",
            "Giliran berpindah walau langkah ditolak",
            "Tiga petak kosong dianggap menang karena nilainya sama",
            "Papan terlihat kosong tetapi daftar masih menyimpan tanda lama"
          ],
          "recipe": "Daftar papan berisi sembilan nilai kosong. Petak dipetakan 1–9. Pilih petak hanya saat status=bermain dan nilai kosong; simpan tanda pemain, cek delapan garis dengan syarat tanda tidak kosong, kemudian cek seri. Jika belum selesai, ganti giliran. Uji papan X O X / O X O / kosong kosong X: diagonal X menang.",
          "decisions": [
            "Pilih cara memberi umpan balik pada langkah yang ditolak.",
            "Jelaskan mengapa pemeriksaan menang dilakukan sebelum pemeriksaan seri."
          ],
          "transfer": "Teman memberi susunan papan yang belum diuji; siswa memprediksi hasil dan menambahkannya ke daftar uji.",
          "visual": {
            "type": "board",
            "labels": [
              "X",
              "O",
              "X",
              "O",
              "X",
              "O",
              "",
              "",
              "X"
            ],
            "caption": "Data papan → validasi langkah → evaluasi → giliran"
          },
          "art": "scratch-lanjutan-p3-ai.png",
          "number": 3,
          "start": 17,
          "end": 24,
          "minimum": "Papan 3 × 3 lengkap dengan giliran, larangan petak terisi, dan delapan garis memakai tabel acuan mentor.",
          "bridge": "Daftar sembilan petak → satu garis → tabel delapan garis → evaluasi hasil.",
          "readiness": [
            "Siswa memprediksi satu perubahan data dan menunjukkan hasil yang cocok.",
            "Siswa menguji dari keadaan awal, menjelaskan satu kesalahan, dan memperbaikinya dengan bantuan yang dicatat."
          ],
          "extensionTarget": "Susun sendiri tabel delapan garis serta bandingkan dua cara pemeriksaan.",
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-lanjutan-p3-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 17–22: enam pembelajaran; sesi 23: membuat proyek; sesi 24: presentasi proyek.",
          "minimumOutcome": "Papan 3 × 3 lengkap dengan giliran, larangan petak terisi, dan delapan garis memakai tabel acuan mentor.",
          "minimumChecks": [
            "Setiap petak mempunyai satu indeks dan contoh hasil dapat diperiksa di atas kertas",
            "Klik petak terisi tidak mengganti tanda maupun memindahkan giliran",
            "Garis menang, papan seri, dan permainan berjalan dibedakan dari data"
          ],
          "enrichment": "Susun sendiri tabel delapan garis serta bandingkan dua cara pemeriksaan.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        },
        {
          "name": "Studio Musik Interaktif",
          "topic": "Penjadwalan event dan pola sebagai data",
          "out": "Sequencer minimum empat langkah untuk satu instrumen, dengan mulai, berhenti, tempo terbatas, dan pola yang dapat diubah; delapan langkah dua instrumen menjadi pengayaan.",
          "novelty": "Proyek akhir baru berupa alat kreatif untuk pengguna; tantangan utamanya penjadwalan, sinkronisasi, dan pemisahan pola dari pemutar.",
          "stages": [
            {
              "title": "Brief pengguna",
              "task": "Pola empat langkah: Gambar empat kotak aktif atau diam untuk satu instrumen; Daftar 0 dan 1: Simpan pola sebagai data dan baca satu indeks",
              "check": "Empat nilai 0/1 dipisah dari mesin pemutar",
              "fault": "Tanda aktif dan tanda langkah berjalan terlihat sama"
            },
            {
              "title": "Mesin pemutar",
              "task": "Satu loop jam: Jalankan satu pemutar yang menunggu durasi langkah sebelum maju; Mulai berhenti dan status: Ubah status melalui tombol tanpa membuat loop pemutar baru",
              "check": "Satu loop jam membaca satu indeks dan tidak ditumpuk tombol mulai",
              "fault": "Menekan mulai berulang menumpuk beberapa pemutar"
            },
            {
              "title": "Perubahan saat berjalan",
              "task": "Indeks berputar: Kembalikan indeks ke awal setelah langkah keempat; Tempo terbatas: Batasi durasi agar bunyi pendek tidak menumpuk",
              "check": "Berhenti mencegah pemicu berikutnya dan tempo memiliki batas aman",
              "fault": "Pemutar masih mengirim event setelah status berhenti"
            },
            {
              "title": "Serah terima alat",
              "task": "Pola baru dan uji tombol: Ganti pola serta uji tombol mulai berulang; Presentasi studio: Buktikan pengguna dapat membuat pola baru tanpa menyalin pemutar",
              "check": "Pola baru dapat dimainkan pengguna serta reset mengembalikan indeks",
              "fault": "Contoh hanya bekerja pada pola bawaan yang ditulis di skrip"
            }
          ],
          "steps": [
            "Pola empat langkah; Daftar 0 dan 1.",
            "Satu loop jam; Mulai berhenti dan status.",
            "Indeks berputar; Tempo terbatas.",
            "Sesi 31: merancang, menggabungkan, dan menguji proyek milik siswa. Sesi 32: demo sumber, penjelasan keputusan, bukti revisi, dan umpan balik."
          ],
          "checks": [
            "Empat nilai 0/1 dipisah dari mesin pemutar",
            "Satu loop jam membaca satu indeks dan tidak ditumpuk tombol mulai",
            "Berhenti mencegah pemicu berikutnya dan tempo memiliki batas aman",
            "Pola baru dapat dimainkan pengguna serta reset mengembalikan indeks"
          ],
          "faults": [
            "Tanda aktif dan tanda langkah berjalan terlihat sama",
            "Menekan mulai berulang menumpuk beberapa pemutar",
            "Pemutar masih mengirim event setelah status berhenti",
            "Contoh hanya bekerja pada pola bawaan yang ditulis di skrip"
          ],
          "recipe": "Mulai satu daftar berisi empat nilai 0/1 dan satu instrumen pendek. Satu loop jam membaca indeks, memicu bunyi bila aktif, menunggu durasi, lalu memutar indeks. Tombol mulai hanya mengubah status. Setelah versi minimum lolos, tambah delapan langkah serta dua daftar tanpa menambah loop jam.",
          "decisions": [
            "Tentukan apakah ubah pola berlaku langsung atau pada putaran berikutnya.",
            "Bandingkan dua tempo dan pilih batas yang tetap dapat dimainkan jelas."
          ],
          "transfer": "Pengguna meminta pola ketiga yang berbeda dan tempo lebih lambat; siswa memenuhi brief lewat data serta konfigurasi, bukan menyalin mesin pemutar.",
          "visual": {
            "type": "sequencer",
            "labels": [
              "DRUM",
              "BEL"
            ],
            "caption": "Pola 8 langkah · satu jam · kontrol tanpa loop ganda"
          },
          "art": "scratch-lanjutan-p4-ai.png",
          "number": 4,
          "start": 25,
          "end": 32,
          "minimum": "Satu instrumen dan empat langkah dengan mulai, berhenti, serta tempo yang dibatasi.",
          "bridge": "Pola 0/1 → satu indeks → loop jam → kendali status.",
          "readiness": [
            "Siswa memprediksi satu perubahan data dan menunjukkan hasil yang cocok.",
            "Siswa menguji dari keadaan awal, menjelaskan satu kesalahan, dan memperbaikinya dengan bantuan yang dicatat."
          ],
          "extensionTarget": "Delapan langkah serta dua instrumen memakai satu jam yang sama.",
          "artWidth": 1536,
          "artHeight": 1024,
          "artSourceType": "ai-generated-concept",
          "aiPromptId": "scratch-lanjutan-p4-ai",
          "aiCaption": "Ilustrasi konsep proyek dibuat dengan AI (ChatGPT) sebagai acuan visual. Siswa menyusun sprite, blok, dan aturan permainan serta mengujinya di Scratch.",
          "learningSequence": "Sesi 25–30: enam pembelajaran; sesi 31: membuat proyek; sesi 32: presentasi proyek.",
          "minimumOutcome": "Satu instrumen dan empat langkah dengan mulai, berhenti, serta tempo yang dibatasi.",
          "minimumChecks": [
            "Empat nilai 0/1 dipisah dari mesin pemutar",
            "Satu loop jam membaca satu indeks dan tidak ditumpuk tombol mulai",
            "Berhenti mencegah pemicu berikutnya dan tempo memiliki batas aman"
          ],
          "enrichment": "Delapan langkah serta dua instrumen memakai satu jam yang sama.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "readinessGate": "Lanjut jika hasil minimum dapat diulang, satu perubahan baru dapat dikerjakan, dan siswa menjelaskan satu perbaikan. Catat bentuk bantuan; bila belum siap, ulangi keterampilan yang belum tampak sebelum menambah konsep."
        }
      ],
      "sessions": [
        {
          "number": 1,
          "project": 1,
          "phase": 1,
          "title": "Audit event dan variabel",
          "target": "Event yang tepat mengubah data; event lain tidak, dan reset memulihkan keadaan yang dipilih.",
          "demo": "Mentor memperagakan kegiatan pertama: Telusuri satu event yang mengubah variabel pada contoh kecil. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Telusuri satu event yang mengubah variabel pada contoh kecil. Bandingkan sebelum/sesudah reset; coba event yang tidak relevan dan prediksi apakah data berubah. Pilih satu nilai awal baru lalu buktikan reset memakai nilai awal yang direncanakan.",
          "check": "Event yang tepat mengubah data; event lain tidak, dan reset memulihkan keadaan yang dipilih.",
          "fault": "Daftar arah ditulis sebagai gerakan tetap di beberapa skrip",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Kontrak instruksi",
          "independentDecision": "Bandingkan menyimpan rute sebagai daftar dengan menyalin skrip untuk setiap tujuan.",
          "evidence": "scratch-sd-lanjutan-S01-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Telusuri satu event yang mengubah variabel pada contoh kecil.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "review",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "review",
            "label": "Pengujian dan revisi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 5
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 15
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Sumber latihan baru; perangkat siap sebelum kelas.",
            "minimum": "Telusuri satu event yang mengubah variabel pada contoh kecil.",
            "understanding": "Bandingkan sebelum/sesudah reset; coba event yang tidak relevan dan prediksi apakah data berubah. Pilih satu nilai awal baru lalu buktikan reset memakai nilai awal yang direncanakan.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Telusuri satu event yang mengubah variabel pada contoh kecil.",
            "probe": "Bandingkan sebelum/sesudah reset; coba event yang tidak relevan dan prediksi apakah data berubah. Pilih satu nilai awal baru lalu buktikan reset memakai nilai awal yang direncanakan.",
            "check": "Event yang tepat mengubah data; event lain tidak, dan reset memulihkan keadaan yang dipilih.",
            "studentItems": [
              "Telusuri satu event yang mengubah variabel pada contoh kecil.",
              "Bandingkan sebelum/sesudah reset; coba event yang tidak relevan dan prediksi apakah data berubah.",
              "Pilih satu nilai awal baru lalu buktikan reset memakai nilai awal yang direncanakan."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "mode": "review"
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "Daftar arah dan indeks",
          "target": "Item dibaca sesuai urutan, indeks tidak sah tidak menambah langkah dan daftar baru mengubah rute.",
          "demo": "Mentor memperagakan kegiatan pertama: Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3. Bandingkan indeks sah dengan indeks di luar daftar; jangan menjalankan gerak untuk item yang tidak ada. Tukar dua item lalu prediksi urutan baru tanpa mengganti pemutar.",
          "check": "Item dibaca sesuai urutan, indeks tidak sah tidak menambah langkah dan daftar baru mengubah rute.",
          "fault": "Daftar arah ditulis sebagai gerakan tetap di beberapa skrip",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Kontrak instruksi",
          "independentDecision": "Bandingkan menyimpan rute sebagai daftar dengan menyalin skrip untuk setiap tujuan.",
          "evidence": "scratch-sd-lanjutan-S02-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3.",
            "understanding": "Bandingkan indeks sah dengan indeks di luar daftar; jangan menjalankan gerak untuk item yang tidak ada. Tukar dua item lalu prediksi urutan baru tanpa mengganti pemutar.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3.",
            "probe": "Bandingkan indeks sah dengan indeks di luar daftar; jangan menjalankan gerak untuk item yang tidak ada. Tukar dua item lalu prediksi urutan baru tanpa mengganti pemutar.",
            "check": "Item dibaca sesuai urutan, indeks tidak sah tidak menambah langkah dan daftar baru mengubah rute.",
            "studentItems": [
              "Baca daftar kanan–kanan–atas melalui indeks 1, 2 dan 3.",
              "Bandingkan indeks sah dengan indeks di luar daftar; jangan menjalankan gerak untuk item yang tidak ada.",
              "Tukar dua item lalu prediksi urutan baru tanpa mengganti pemutar."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 2,
          "title": "Koordinat petak",
          "target": "Pusat sprite cocok dengan petak yang dipilih dan perubahan satu baris/kolom mengubah sumbu yang benar.",
          "demo": "Mentor memperagakan kegiatan pertama: Petakan satu petak papan 4×4 ke x/y dengan kartu acuan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Petakan satu petak papan 4×4 ke x/y dengan kartu acuan. Uji satu petak tepi dan bedakan nomor baris/kolom yang tertukar. Pilih petak lain, hitung koordinatnya lalu uji posisi sprite.",
          "check": "Pusat sprite cocok dengan petak yang dipilih dan perubahan satu baris/kolom mengubah sumbu yang benar.",
          "fault": "Indeks rute bertambah dua kali sehingga satu arah terlewati",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Prosedur pembaca rute",
          "independentDecision": "Apakah langkah tidak valid menghentikan rute atau dilewati? Tuliskan aturan dan alasannya.",
          "evidence": "scratch-sd-lanjutan-S03-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Petakan satu petak papan 4×4 ke x/y dengan kartu acuan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Petakan satu petak papan 4×4 ke x/y dengan kartu acuan.",
            "understanding": "Uji satu petak tepi dan bedakan nomor baris/kolom yang tertukar. Pilih petak lain, hitung koordinatnya lalu uji posisi sprite.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Menghubungkan beberapa bagian; mulai satu perubahan dan satu uji.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Petakan satu petak papan 4×4 ke x/y dengan kartu acuan.",
            "probe": "Uji satu petak tepi dan bedakan nomor baris/kolom yang tertukar. Pilih petak lain, hitung koordinatnya lalu uji posisi sprite.",
            "check": "Pusat sprite cocok dengan petak yang dipilih dan perubahan satu baris/kolom mengubah sumbu yang benar.",
            "studentItems": [
              "Petakan satu petak papan 4×4 ke x/y dengan kartu acuan.",
              "Uji satu petak tepi dan bedakan nomor baris/kolom yang tertukar.",
              "Pilih petak lain, hitung koordinatnya lalu uji posisi sprite."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 2,
          "title": "Blok buatanku satu langkah",
          "target": "Satu pemanggilan memberi satu langkah sah; data arah yang tidak didukung tidak memindahkan pemain.",
          "demo": "Mentor memperagakan kegiatan pertama: Jalankan blok buatanku untuk satu arah dari daftar. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Jalankan blok buatanku untuk satu arah dari daftar. Uji satu item arah yang tidak dikenali pada salinan; jangan memindahkan sprite untuk item itu. Ubah urutan daftar dan gunakan blok yang sama untuk arah baru.",
          "check": "Satu pemanggilan memberi satu langkah sah; data arah yang tidak didukung tidak memindahkan pemain.",
          "fault": "Indeks rute bertambah dua kali sehingga satu arah terlewati",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Prosedur pembaca rute",
          "independentDecision": "Apakah langkah tidak valid menghentikan rute atau dilewati? Tuliskan aturan dan alasannya.",
          "evidence": "scratch-sd-lanjutan-S04-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Jalankan blok buatanku untuk satu arah dari daftar.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Jalankan blok buatanku untuk satu arah dari daftar.",
            "understanding": "Uji satu item arah yang tidak dikenali pada salinan; jangan memindahkan sprite untuk item itu. Ubah urutan daftar dan gunakan blok yang sama untuk arah baru.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Jalankan blok buatanku untuk satu arah dari daftar.",
            "probe": "Uji satu item arah yang tidak dikenali pada salinan; jangan memindahkan sprite untuk item itu. Ubah urutan daftar dan gunakan blok yang sama untuk arah baru.",
            "check": "Satu pemanggilan memberi satu langkah sah; data arah yang tidak didukung tidak memindahkan pemain.",
            "studentItems": [
              "Jalankan blok buatanku untuk satu arah dari daftar.",
              "Uji satu item arah yang tidak dikenali pada salinan; jangan memindahkan sprite untuk item itu.",
              "Ubah urutan daftar dan gunakan blok yang sama untuk arah baru."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 3,
          "title": "Calon posisi dan batas",
          "target": "Langkah sah diterima dan langkah keluar ditolak tanpa mengubah posisi maupun data petak.",
          "demo": "Mentor memperagakan kegiatan pertama: Periksa calon posisi untuk satu langkah di dalam papan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Periksa calon posisi untuk satu langkah di dalam papan. Coba langkah keluar dari sudut; pastikan posisi tidak sempat berubah. Ubah titik awal ke tepi lain lalu uji batas yang berbeda.",
          "check": "Langkah sah diterima dan langkah keluar ditolak tanpa mengubah posisi maupun data petak.",
          "fault": "Koordinat diubah sebelum pemeriksaan sehingga robot terlanjur keluar",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Validasi langkah",
          "independentDecision": "Bandingkan menyimpan rute sebagai daftar dengan menyalin skrip untuk setiap tujuan.",
          "evidence": "scratch-sd-lanjutan-S05-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Periksa calon posisi untuk satu langkah di dalam papan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Periksa calon posisi untuk satu langkah di dalam papan.",
            "understanding": "Coba langkah keluar dari sudut; pastikan posisi tidak sempat berubah. Ubah titik awal ke tepi lain lalu uji batas yang berbeda.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Periksa calon posisi untuk satu langkah di dalam papan.",
            "probe": "Coba langkah keluar dari sudut; pastikan posisi tidak sempat berubah. Ubah titik awal ke tepi lain lalu uji batas yang berbeda.",
            "check": "Langkah sah diterima dan langkah keluar ditolak tanpa mengubah posisi maupun data petak.",
            "studentItems": [
              "Periksa calon posisi untuk satu langkah di dalam papan.",
              "Coba langkah keluar dari sudut; pastikan posisi tidak sempat berubah.",
              "Ubah titik awal ke tepi lain lalu uji batas yang berbeda."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 3,
          "title": "Pemutar rute",
          "target": "Setiap item dieksekusi sekali; daftar kosong aman dan rute baru tidak memerlukan salinan logika.",
          "demo": "Mentor memperagakan kegiatan pertama: Putar tiga item rute dan amati indeks bertambah satu per langkah. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Putar tiga item rute dan amati indeks bertambah satu per langkah. Uji daftar kosong serta akhir daftar; pemutar berhenti tanpa membaca langkah tambahan. Ganti panjang rute dan buktikan pemutar mengikuti data baru.",
          "check": "Setiap item dieksekusi sekali; daftar kosong aman dan rute baru tidak memerlukan salinan logika.",
          "fault": "Koordinat diubah sebelum pemeriksaan sehingga robot terlanjur keluar",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Validasi langkah",
          "independentDecision": "Bandingkan menyimpan rute sebagai daftar dengan menyalin skrip untuk setiap tujuan.",
          "evidence": "scratch-sd-lanjutan-S06-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Putar tiga item rute dan amati indeks bertambah satu per langkah.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Putar tiga item rute dan amati indeks bertambah satu per langkah.",
            "understanding": "Uji daftar kosong serta akhir daftar; pemutar berhenti tanpa membaca langkah tambahan. Ganti panjang rute dan buktikan pemutar mengikuti data baru.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Putar tiga item rute dan amati indeks bertambah satu per langkah.",
            "probe": "Uji daftar kosong serta akhir daftar; pemutar berhenti tanpa membaca langkah tambahan. Ganti panjang rute dan buktikan pemutar mengikuti data baru.",
            "check": "Setiap item dieksekusi sekali; daftar kosong aman dan rute baru tidak memerlukan salinan logika.",
            "studentItems": [
              "Putar tiga item rute dan amati indeks bertambah satu per langkah.",
              "Uji daftar kosong serta akhir daftar; pemutar berhenti tanpa membaca langkah tambahan.",
              "Ganti panjang rute dan buktikan pemutar mengikuti data baru."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 4,
          "title": "Membuat proyek: Robot Pengantar Paket",
          "target": "Menggabungkan enam keterampilan modul menjadi Robot Pengantar Paket dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Robot Pengantar Paket. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Dua tujuan dengan data rute berbeda tanpa menyalin logika gerak.",
          "advancedDemand": "Rute baru mandiri",
          "independentDecision": "Apakah langkah tidak valid menghentikan rute atau dilewati? Tuliskan aturan dan alasannya.",
          "evidence": "scratch-sd-lanjutan-S07-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Robot Pengantar Paket. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Robot Pengantar Paket. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Robot Pengantar Paket. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "check": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Rute pada daftar mencapai satu tujuan melalui langkah sah.",
              "Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 4,
          "title": "Presentasi proyek: Robot Pengantar Paket",
          "target": "Mendemonstrasikan Robot Pengantar Paket, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 7. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 7. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "advancedDemand": "Rute baru mandiri",
          "independentDecision": "Apakah langkah tidak valid menghentikan rute atau dilewati? Tuliskan aturan dan alasannya.",
          "evidence": "scratch-sd-lanjutan-S08-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Robot Pengantar Paket. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "check": "Rute pada daftar mencapai satu tujuan melalui langkah sah. Langkah keluar ditolak dan daftar rute baru dapat dipakai tanpa menggandakan pemutar.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 9,
          "project": 2,
          "phase": 1,
          "title": "Keadaan satu tanaman",
          "target": "Keadaan berubah hanya saat aturan terpenuhi dan ambang baru menghasilkan transisi yang dapat dijelaskan.",
          "demo": "Mentor memperagakan kegiatan pertama: Gambar benih, tumbuh dan kering beserta aturan pemicunya. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Gambar benih, tumbuh dan kering beserta aturan pemicunya. Uji satu kondisi yang belum memenuhi syarat perubahan; keadaan harus tetap. Ubah satu ambang air di rancangan lalu prediksi transisi.",
          "check": "Keadaan berubah hanya saat aturan terpenuhi dan ambang baru menghasilkan transisi yang dapat dijelaskan.",
          "fault": "Tampilan daun dipakai sebagai satu-satunya penyimpan keadaan",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Model tanaman",
          "independentDecision": "Tentukan apakah tanaman kering bisa pulih; jangan membiarkan perilakunya berubah antarversi.",
          "evidence": "scratch-sd-lanjutan-S09-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Gambar benih, tumbuh dan kering beserta aturan pemicunya.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Gambar benih, tumbuh dan kering beserta aturan pemicunya.",
            "understanding": "Uji satu kondisi yang belum memenuhi syarat perubahan; keadaan harus tetap. Ubah satu ambang air di rancangan lalu prediksi transisi.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Gambar benih, tumbuh dan kering beserta aturan pemicunya.",
            "probe": "Uji satu kondisi yang belum memenuhi syarat perubahan; keadaan harus tetap. Ubah satu ambang air di rancangan lalu prediksi transisi.",
            "check": "Keadaan berubah hanya saat aturan terpenuhi dan ambang baru menghasilkan transisi yang dapat dijelaskan.",
            "studentItems": [
              "Gambar benih, tumbuh dan kering beserta aturan pemicunya.",
              "Uji satu kondisi yang belum memenuhi syarat perubahan; keadaan harus tetap.",
              "Ubah satu ambang air di rancangan lalu prediksi transisi."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 10,
          "project": 2,
          "phase": 1,
          "title": "Variabel untuk sprite ini",
          "target": "Air lokal tidak mengubah tanaman lain; siswa membedakannya dari satu data global bersama.",
          "demo": "Mentor memperagakan kegiatan pertama: Ubah nilai air lokal satu tanaman dan amati yang lain. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Ubah nilai air lokal satu tanaman dan amati yang lain. Bandingkan dengan variabel global pada salinan; tunjuk pengaruh yang tidak diinginkan. Pilih nilai awal berbeda untuk dua tanaman dan jelaskan kebutuhannya.",
          "check": "Air lokal tidak mengubah tanaman lain; siswa membedakannya dari satu data global bersama.",
          "fault": "Tampilan daun dipakai sebagai satu-satunya penyimpan keadaan",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Model tanaman",
          "independentDecision": "Tentukan apakah tanaman kering bisa pulih; jangan membiarkan perilakunya berubah antarversi.",
          "evidence": "scratch-sd-lanjutan-S10-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Ubah nilai air lokal satu tanaman dan amati yang lain.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Ubah nilai air lokal satu tanaman dan amati yang lain.",
            "understanding": "Bandingkan dengan variabel global pada salinan; tunjuk pengaruh yang tidak diinginkan. Pilih nilai awal berbeda untuk dua tanaman dan jelaskan kebutuhannya.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Ubah nilai air lokal satu tanaman dan amati yang lain.",
            "probe": "Bandingkan dengan variabel global pada salinan; tunjuk pengaruh yang tidak diinginkan. Pilih nilai awal berbeda untuk dua tanaman dan jelaskan kebutuhannya.",
            "check": "Air lokal tidak mengubah tanaman lain; siswa membedakannya dari satu data global bersama.",
            "studentItems": [
              "Ubah nilai air lokal satu tanaman dan amati yang lain.",
              "Bandingkan dengan variabel global pada salinan; tunjuk pengaruh yang tidak diinginkan.",
              "Pilih nilai awal berbeda untuk dua tanaman dan jelaskan kebutuhannya."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 11,
          "project": 2,
          "phase": 2,
          "title": "Clone pertama",
          "target": "Clone mempunyai data lokal sendiri dan perubahan pada satu clone tidak menimpa yang lain.",
          "demo": "Mentor memperagakan kegiatan pertama: Buat satu clone tanaman dengan air lokal dari kerangka. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Buat satu clone tanaman dengan air lokal dari kerangka. Buat clone kedua dan ubah air satu clone; jangan menganggap kedua data harus ikut berubah. Pilih dua nilai awal lalu uji identitas serta data tiap clone.",
          "check": "Clone mempunyai data lokal sendiri dan perubahan pada satu clone tidak menimpa yang lain.",
          "fault": "Semua clone memakai satu variabel sisa air global",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Entitas mandiri",
          "independentDecision": "Pilih angka batas air dan durasi tick yang membuat aturan dapat diamati.",
          "evidence": "scratch-sd-lanjutan-S11-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Buat satu clone tanaman dengan air lokal dari kerangka.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Buat satu clone tanaman dengan air lokal dari kerangka.",
            "understanding": "Buat clone kedua dan ubah air satu clone; jangan menganggap kedua data harus ikut berubah. Pilih dua nilai awal lalu uji identitas serta data tiap clone.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Menghubungkan beberapa bagian; mulai satu perubahan dan satu uji.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Buat satu clone tanaman dengan air lokal dari kerangka.",
            "probe": "Buat clone kedua dan ubah air satu clone; jangan menganggap kedua data harus ikut berubah. Pilih dua nilai awal lalu uji identitas serta data tiap clone.",
            "check": "Clone mempunyai data lokal sendiri dan perubahan pada satu clone tidak menimpa yang lain.",
            "studentItems": [
              "Buat satu clone tanaman dengan air lokal dari kerangka.",
              "Buat clone kedua dan ubah air satu clone; jangan menganggap kedua data harus ikut berubah.",
              "Pilih dua nilai awal lalu uji identitas serta data tiap clone."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 12,
          "project": 2,
          "phase": 2,
          "title": "Dua tanaman mandiri",
          "target": "Tindakan menyiram mengikuti tanaman yang dipilih, termasuk sesudah letak diubah.",
          "demo": "Mentor memperagakan kegiatan pertama: Siram hanya tanaman A lalu bandingkan air A dan B. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Siram hanya tanaman A lalu bandingkan air A dan B. Ketuk area lain atau tanaman B; periksa hanya sasaran yang benar menerima air. Ubah posisi dua tanaman dan ulangi uji pemilihan.",
          "check": "Tindakan menyiram mengikuti tanaman yang dipilih, termasuk sesudah letak diubah.",
          "fault": "Semua clone memakai satu variabel sisa air global",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Entitas mandiri",
          "independentDecision": "Pilih angka batas air dan durasi tick yang membuat aturan dapat diamati.",
          "evidence": "scratch-sd-lanjutan-S12-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Siram hanya tanaman A lalu bandingkan air A dan B.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Siram hanya tanaman A lalu bandingkan air A dan B.",
            "understanding": "Ketuk area lain atau tanaman B; periksa hanya sasaran yang benar menerima air. Ubah posisi dua tanaman dan ulangi uji pemilihan.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Siram hanya tanaman A lalu bandingkan air A dan B.",
            "probe": "Ketuk area lain atau tanaman B; periksa hanya sasaran yang benar menerima air. Ubah posisi dua tanaman dan ulangi uji pemilihan.",
            "check": "Tindakan menyiram mengikuti tanaman yang dipilih, termasuk sesudah letak diubah.",
            "studentItems": [
              "Siram hanya tanaman A lalu bandingkan air A dan B.",
              "Ketuk area lain atau tanaman B; periksa hanya sasaran yang benar menerima air.",
              "Ubah posisi dua tanaman dan ulangi uji pemilihan."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 13,
          "project": 2,
          "phase": 3,
          "title": "Satu pengatur tick",
          "target": "Satu tick diproses sekali per tanaman dan perubahan interval tidak memerlukan jam pada tiap clone.",
          "demo": "Mentor memperagakan kegiatan pertama: Kirim satu tick dari pengatur pusat dan amati dua tanaman. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Kirim satu tick dari pengatur pusat dan amati dua tanaman. Bandingkan dengan salinan yang tanpa sengaja memiliki dua pengatur; temukan perubahan yang terlalu cepat. Ubah interval pada satu pengatur yang benar dan prediksi laju keduanya.",
          "check": "Satu tick diproses sekali per tanaman dan perubahan interval tidak memerlukan jam pada tiap clone.",
          "fault": "Setiap clone menambah pengatur waktu sehingga kebun makin cepat",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Jam dan tindakan",
          "independentDecision": "Tentukan apakah tanaman kering bisa pulih; jangan membiarkan perilakunya berubah antarversi.",
          "evidence": "scratch-sd-lanjutan-S13-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Kirim satu tick dari pengatur pusat dan amati dua tanaman.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Kirim satu tick dari pengatur pusat dan amati dua tanaman.",
            "understanding": "Bandingkan dengan salinan yang tanpa sengaja memiliki dua pengatur; temukan perubahan yang terlalu cepat. Ubah interval pada satu pengatur yang benar dan prediksi laju keduanya.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Kirim satu tick dari pengatur pusat dan amati dua tanaman.",
            "probe": "Bandingkan dengan salinan yang tanpa sengaja memiliki dua pengatur; temukan perubahan yang terlalu cepat. Ubah interval pada satu pengatur yang benar dan prediksi laju keduanya.",
            "check": "Satu tick diproses sekali per tanaman dan perubahan interval tidak memerlukan jam pada tiap clone.",
            "studentItems": [
              "Kirim satu tick dari pengatur pusat dan amati dua tanaman.",
              "Bandingkan dengan salinan yang tanpa sengaja memiliki dua pengatur; temukan perubahan yang terlalu cepat.",
              "Ubah interval pada satu pengatur yang benar dan prediksi laju keduanya."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 14,
          "project": 2,
          "phase": 3,
          "title": "Transisi keadaan",
          "target": "Data air dan kostum sesuai aturan pada kedua sisi ambang; satu keadaan tampil pada satu waktu.",
          "demo": "Mentor memperagakan kegiatan pertama: Kurangi atau tambah air lalu pilih kostum berdasarkan aturan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Kurangi atau tambah air lalu pilih kostum berdasarkan aturan. Uji tepat di bawah dan pada ambang; jangan membiarkan dua kondisi memilih kostum bertentangan. Ubah satu ambang pada salinan lalu prediksi keadaan baru.",
          "check": "Data air dan kostum sesuai aturan pada kedua sisi ambang; satu keadaan tampil pada satu waktu.",
          "fault": "Setiap clone menambah pengatur waktu sehingga kebun makin cepat",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Jam dan tindakan",
          "independentDecision": "Tentukan apakah tanaman kering bisa pulih; jangan membiarkan perilakunya berubah antarversi.",
          "evidence": "scratch-sd-lanjutan-S14-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Kurangi atau tambah air lalu pilih kostum berdasarkan aturan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Kurangi atau tambah air lalu pilih kostum berdasarkan aturan.",
            "understanding": "Uji tepat di bawah dan pada ambang; jangan membiarkan dua kondisi memilih kostum bertentangan. Ubah satu ambang pada salinan lalu prediksi keadaan baru.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Kurangi atau tambah air lalu pilih kostum berdasarkan aturan.",
            "probe": "Uji tepat di bawah dan pada ambang; jangan membiarkan dua kondisi memilih kostum bertentangan. Ubah satu ambang pada salinan lalu prediksi keadaan baru.",
            "check": "Data air dan kostum sesuai aturan pada kedua sisi ambang; satu keadaan tampil pada satu waktu.",
            "studentItems": [
              "Kurangi atau tambah air lalu pilih kostum berdasarkan aturan.",
              "Uji tepat di bawah dan pada ambang; jangan membiarkan dua kondisi memilih kostum bertentangan.",
              "Ubah satu ambang pada salinan lalu prediksi keadaan baru."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 15,
          "project": 2,
          "phase": 4,
          "title": "Membuat proyek: Kebun Virtual",
          "target": "Menggabungkan enam keterampilan modul menjadi Kebun Virtual dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Kebun Virtual. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Tiga tanaman dan interval cuaca berbeda.",
          "advancedDemand": "Simulasi cuaca",
          "independentDecision": "Pilih angka batas air dan durasi tick yang membuat aturan dapat diamati.",
          "evidence": "scratch-sd-lanjutan-S15-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Kebun Virtual. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Kebun Virtual. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Kebun Virtual. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "check": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Dua tanaman memiliki air serta keadaan mandiri.",
              "Menyiram A tidak mengubah B dan satu tick tidak diproses ganda."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 16,
          "project": 2,
          "phase": 4,
          "title": "Presentasi proyek: Kebun Virtual",
          "target": "Mendemonstrasikan Kebun Virtual, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 15. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 15. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "advancedDemand": "Simulasi cuaca",
          "independentDecision": "Pilih angka batas air dan durasi tick yang membuat aturan dapat diamati.",
          "evidence": "scratch-sd-lanjutan-S16-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kebun Virtual. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "check": "Dua tanaman memiliki air serta keadaan mandiri. Menyiram A tidak mengubah B dan satu tick tidak diproses ganda.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 17,
          "project": 3,
          "phase": 1,
          "title": "Daftar sembilan petak",
          "target": "Indeks dan lokasi visual cocok pada sudut maupun tengah dan hanya petak yang dipilih berubah.",
          "demo": "Mentor memperagakan kegiatan pertama: Petakan sembilan petak ke indeks 1–9 dengan acuan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Petakan sembilan petak ke indeks 1–9 dengan acuan. Bandingkan petak sudut dan tengah; periksa indeks salah tidak menunjuk petak lain. Isi satu indeks pilihan dan prediksi lokasi tanda sebelum render.",
          "check": "Indeks dan lokasi visual cocok pada sudut maupun tengah dan hanya petak yang dipilih berubah.",
          "fault": "Dua petak visual merujuk indeks data yang sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Data papan",
          "independentDecision": "Jelaskan mengapa pemeriksaan menang dilakukan sebelum pemeriksaan seri.",
          "evidence": "scratch-sd-lanjutan-S17-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Petakan sembilan petak ke indeks 1–9 dengan acuan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Petakan sembilan petak ke indeks 1–9 dengan acuan.",
            "understanding": "Bandingkan petak sudut dan tengah; periksa indeks salah tidak menunjuk petak lain. Isi satu indeks pilihan dan prediksi lokasi tanda sebelum render.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Petakan sembilan petak ke indeks 1–9 dengan acuan.",
            "probe": "Bandingkan petak sudut dan tengah; periksa indeks salah tidak menunjuk petak lain. Isi satu indeks pilihan dan prediksi lokasi tanda sebelum render.",
            "check": "Indeks dan lokasi visual cocok pada sudut maupun tengah dan hanya petak yang dipilih berubah.",
            "studentItems": [
              "Petakan sembilan petak ke indeks 1–9 dengan acuan.",
              "Bandingkan petak sudut dan tengah; periksa indeks salah tidak menunjuk petak lain.",
              "Isi satu indeks pilihan dan prediksi lokasi tanda sebelum render."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 18,
          "project": 3,
          "phase": 1,
          "title": "Giliran pemain",
          "target": "Giliran berubah sekali setelah langkah sah, tidak setelah langkah ditolak dan mengikuti pemain awal baru.",
          "demo": "Mentor memperagakan kegiatan pertama: Tempatkan satu tanda di petak kosong lalu ubah pemain aktif. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Tempatkan satu tanda di petak kosong lalu ubah pemain aktif. Coba langkah yang ditolak; giliran harus tetap pada pemain sebelumnya. Ubah pemain awal pada salinan dan prediksi dua giliran pertama.",
          "check": "Giliran berubah sekali setelah langkah sah, tidak setelah langkah ditolak dan mengikuti pemain awal baru.",
          "fault": "Dua petak visual merujuk indeks data yang sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Data papan",
          "independentDecision": "Jelaskan mengapa pemeriksaan menang dilakukan sebelum pemeriksaan seri.",
          "evidence": "scratch-sd-lanjutan-S18-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Tempatkan satu tanda di petak kosong lalu ubah pemain aktif.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Tempatkan satu tanda di petak kosong lalu ubah pemain aktif.",
            "understanding": "Coba langkah yang ditolak; giliran harus tetap pada pemain sebelumnya. Ubah pemain awal pada salinan dan prediksi dua giliran pertama.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Tempatkan satu tanda di petak kosong lalu ubah pemain aktif.",
            "probe": "Coba langkah yang ditolak; giliran harus tetap pada pemain sebelumnya. Ubah pemain awal pada salinan dan prediksi dua giliran pertama.",
            "check": "Giliran berubah sekali setelah langkah sah, tidak setelah langkah ditolak dan mengikuti pemain awal baru.",
            "studentItems": [
              "Tempatkan satu tanda di petak kosong lalu ubah pemain aktif.",
              "Coba langkah yang ditolak; giliran harus tetap pada pemain sebelumnya.",
              "Ubah pemain awal pada salinan dan prediksi dua giliran pertama."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 19,
          "project": 3,
          "phase": 2,
          "title": "Pilih petak kosong",
          "target": "Petak terisi ditolak tanpa menimpa tanda atau memindah giliran; petak kosong berikutnya tetap dapat dipakai.",
          "demo": "Mentor memperagakan kegiatan pertama: Klik satu petak kosong dan cocokkan data dengan tanda visual. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Klik satu petak kosong dan cocokkan data dengan tanda visual. Klik petak yang sama lagi; pastikan isi serta giliran tidak berubah. Pilih petak kosong lain dan buktikan langkah berikutnya baru diterima.",
          "check": "Petak terisi ditolak tanpa menimpa tanda atau memindah giliran; petak kosong berikutnya tetap dapat dipakai.",
          "fault": "Giliran berpindah walau langkah ditolak",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Transaksi giliran",
          "independentDecision": "Pilih cara memberi umpan balik pada langkah yang ditolak.",
          "evidence": "scratch-sd-lanjutan-S19-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Klik satu petak kosong dan cocokkan data dengan tanda visual.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Klik satu petak kosong dan cocokkan data dengan tanda visual.",
            "understanding": "Klik petak yang sama lagi; pastikan isi serta giliran tidak berubah. Pilih petak kosong lain dan buktikan langkah berikutnya baru diterima.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Klik satu petak kosong dan cocokkan data dengan tanda visual.",
            "probe": "Klik petak yang sama lagi; pastikan isi serta giliran tidak berubah. Pilih petak kosong lain dan buktikan langkah berikutnya baru diterima.",
            "check": "Petak terisi ditolak tanpa menimpa tanda atau memindah giliran; petak kosong berikutnya tetap dapat dipakai.",
            "studentItems": [
              "Klik satu petak kosong dan cocokkan data dengan tanda visual.",
              "Klik petak yang sama lagi; pastikan isi serta giliran tidak berubah.",
              "Pilih petak kosong lain dan buktikan langkah berikutnya baru diterima."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 20,
          "project": 3,
          "phase": 2,
          "title": "Periksa satu garis",
          "target": "Tiga tanda sama yang terisi menghasilkan menang; kosong/campuran tidak, dan fungsi dapat dipakai pada garis lain.",
          "demo": "Mentor memperagakan kegiatan pertama: Periksa satu garis berisi tiga tanda yang sama. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Periksa satu garis berisi tiga tanda yang sama. Bandingkan tiga petak kosong dan campuran X/O; keduanya bukan kemenangan. Pilih garis lain pada kartu acuan dan gunakan pemeriksa yang sama.",
          "check": "Tiga tanda sama yang terisi menghasilkan menang; kosong/campuran tidak, dan fungsi dapat dipakai pada garis lain.",
          "fault": "Giliran berpindah walau langkah ditolak",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Transaksi giliran",
          "independentDecision": "Pilih cara memberi umpan balik pada langkah yang ditolak.",
          "evidence": "scratch-sd-lanjutan-S20-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Periksa satu garis berisi tiga tanda yang sama.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "review",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "review",
            "label": "Pengujian dan revisi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 5
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 15
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Periksa satu garis berisi tiga tanda yang sama.",
            "understanding": "Bandingkan tiga petak kosong dan campuran X/O; keduanya bukan kemenangan. Pilih garis lain pada kartu acuan dan gunakan pemeriksa yang sama.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Periksa satu garis berisi tiga tanda yang sama.",
            "probe": "Bandingkan tiga petak kosong dan campuran X/O; keduanya bukan kemenangan. Pilih garis lain pada kartu acuan dan gunakan pemeriksa yang sama.",
            "check": "Tiga tanda sama yang terisi menghasilkan menang; kosong/campuran tidak, dan fungsi dapat dipakai pada garis lain.",
            "studentItems": [
              "Periksa satu garis berisi tiga tanda yang sama.",
              "Bandingkan tiga petak kosong dan campuran X/O; keduanya bukan kemenangan.",
              "Pilih garis lain pada kartu acuan dan gunakan pemeriksa yang sama."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 21,
          "project": 3,
          "phase": 3,
          "title": "Delapan garis dengan acuan",
          "target": "Kemenangan pada tiga orientasi dikenali dan susunan belum lengkap tidak dianggap menang.",
          "demo": "Mentor memperagakan kegiatan pertama: Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor. Uji susunan hampir menang serta tiga petak kosong untuk menolak kemenangan palsu. Pilih salah satu dari delapan garis lain dan buktikan tabel memeriksanya.",
          "check": "Kemenangan pada tiga orientasi dikenali dan susunan belum lengkap tidak dianggap menang.",
          "fault": "Tiga petak kosong dianggap menang karena nilainya sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Pemeriksa hasil",
          "independentDecision": "Jelaskan mengapa pemeriksaan menang dilakukan sebelum pemeriksaan seri.",
          "evidence": "scratch-sd-lanjutan-S21-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor.",
            "understanding": "Uji susunan hampir menang serta tiga petak kosong untuk menolak kemenangan palsu. Pilih salah satu dari delapan garis lain dan buktikan tabel memeriksanya.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor.",
            "probe": "Uji susunan hampir menang serta tiga petak kosong untuk menolak kemenangan palsu. Pilih salah satu dari delapan garis lain dan buktikan tabel memeriksanya.",
            "check": "Kemenangan pada tiga orientasi dikenali dan susunan belum lengkap tidak dianggap menang.",
            "studentItems": [
              "Uji satu baris, kolom dan diagonal pada tabel delapan garis mentor.",
              "Uji susunan hampir menang serta tiga petak kosong untuk menolak kemenangan palsu.",
              "Pilih salah satu dari delapan garis lain dan buktikan tabel memeriksanya."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 22,
          "project": 3,
          "phase": 3,
          "title": "Menang seri dan berhenti",
          "target": "Menang diperiksa sebelum seri dan semua input papan terkunci setelah hasil final.",
          "demo": "Mentor memperagakan kegiatan pertama: Uji papan menang dan papan penuh tanpa pemenang. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Uji papan menang dan papan penuh tanpa pemenang. Klik sesudah hasil selesai; data papan dan giliran tidak boleh berubah. Gunakan papan yang penuh sekaligus menang dan jelaskan prioritas menang sebelum seri.",
          "check": "Menang diperiksa sebelum seri dan semua input papan terkunci setelah hasil final.",
          "fault": "Tiga petak kosong dianggap menang karena nilainya sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Pemeriksa hasil",
          "independentDecision": "Jelaskan mengapa pemeriksaan menang dilakukan sebelum pemeriksaan seri.",
          "evidence": "scratch-sd-lanjutan-S22-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Uji papan menang dan papan penuh tanpa pemenang.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Uji papan menang dan papan penuh tanpa pemenang.",
            "understanding": "Klik sesudah hasil selesai; data papan dan giliran tidak boleh berubah. Gunakan papan yang penuh sekaligus menang dan jelaskan prioritas menang sebelum seri.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Uji papan menang dan papan penuh tanpa pemenang.",
            "probe": "Klik sesudah hasil selesai; data papan dan giliran tidak boleh berubah. Gunakan papan yang penuh sekaligus menang dan jelaskan prioritas menang sebelum seri.",
            "check": "Menang diperiksa sebelum seri dan semua input papan terkunci setelah hasil final.",
            "studentItems": [
              "Uji papan menang dan papan penuh tanpa pemenang.",
              "Klik sesudah hasil selesai; data papan dan giliran tidak boleh berubah.",
              "Gunakan papan yang penuh sekaligus menang dan jelaskan prioritas menang sebelum seri."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 23,
          "project": 3,
          "phase": 4,
          "title": "Membuat proyek: Papan Strategi Dua Pemain",
          "target": "Menggabungkan enam keterampilan modul menjadi Papan Strategi Dua Pemain dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Papan Strategi Dua Pemain. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Susun sendiri tabel delapan garis serta bandingkan dua cara pemeriksaan.",
          "advancedDemand": "Matriks pengujian",
          "independentDecision": "Pilih cara memberi umpan balik pada langkah yang ditolak.",
          "evidence": "scratch-sd-lanjutan-S23-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Papan Strategi Dua Pemain. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Papan Strategi Dua Pemain. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Papan Strategi Dua Pemain. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "check": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali.",
              "Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 24,
          "project": 3,
          "phase": 4,
          "title": "Presentasi proyek: Papan Strategi Dua Pemain",
          "target": "Mendemonstrasikan Papan Strategi Dua Pemain, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 23. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 23. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "advancedDemand": "Matriks pengujian",
          "independentDecision": "Pilih cara memberi umpan balik pada langkah yang ditolak.",
          "evidence": "scratch-sd-lanjutan-S24-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Papan Strategi Dua Pemain. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "check": "Langkah sah berganti giliran dan hasil menang/seri dapat dikenali. Petak terisi serta klik setelah selesai ditolak tanpa mengubah keadaan.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 25,
          "project": 4,
          "phase": 1,
          "title": "Pola empat langkah",
          "target": "Pola empat langkah membedakan bunyi dan diam; perubahan satu kotak mengubah satu bagian ritme.",
          "demo": "Mentor memperagakan kegiatan pertama: Gambar empat langkah aktif atau diam untuk satu instrumen. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Gambar empat langkah aktif atau diam untuk satu instrumen. Bandingkan satu pola semua diam dan satu pola dengan satu bunyi; prediksi jumlah bunyi. Ubah satu kotak lalu ceritakan ritme baru sebelum diputar.",
          "check": "Pola empat langkah membedakan bunyi dan diam; perubahan satu kotak mengubah satu bagian ritme.",
          "fault": "Tanda aktif dan tanda langkah berjalan terlihat sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Brief pengguna",
          "independentDecision": "Bandingkan dua tempo dan pilih batas yang tetap dapat dimainkan jelas.",
          "evidence": "scratch-sd-lanjutan-S25-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 1,
          "minimumTask": "Gambar empat langkah aktif atau diam untuk satu instrumen.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Latihan kecil atau sumber awal proyek ini; tidak mengasumsikan proyek akhir sudah jadi.",
            "minimum": "Gambar empat langkah aktif atau diam untuk satu instrumen.",
            "understanding": "Bandingkan satu pola semua diam dan satu pola dengan satu bunyi; prediksi jumlah bunyi. Ubah satu kotak lalu ceritakan ritme baru sebelum diputar.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Gambar empat langkah aktif atau diam untuk satu instrumen.",
            "probe": "Bandingkan satu pola semua diam dan satu pola dengan satu bunyi; prediksi jumlah bunyi. Ubah satu kotak lalu ceritakan ritme baru sebelum diputar.",
            "check": "Pola empat langkah membedakan bunyi dan diam; perubahan satu kotak mengubah satu bagian ritme.",
            "studentItems": [
              "Gambar empat langkah aktif atau diam untuk satu instrumen.",
              "Bandingkan satu pola semua diam dan satu pola dengan satu bunyi; prediksi jumlah bunyi.",
              "Ubah satu kotak lalu ceritakan ritme baru sebelum diputar."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 26,
          "project": 4,
          "phase": 1,
          "title": "Daftar 0 dan 1",
          "target": "Indeks membaca nilai yang benar, data tidak didukung ditangani dan bunyi mengikuti pola baru.",
          "demo": "Mentor memperagakan kegiatan pertama: Simpan empat nilai 0/1 dan baca satu indeks pilihan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Simpan empat nilai 0/1 dan baca satu indeks pilihan. Uji nilai selain 0/1 pada salinan; tetapkan respons aman tanpa menganggapnya bunyi otomatis. Ganti urutan data dan prediksi langkah yang berbunyi.",
          "check": "Indeks membaca nilai yang benar, data tidak didukung ditangani dan bunyi mengikuti pola baru.",
          "fault": "Tanda aktif dan tanda langkah berjalan terlihat sama",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Brief pengguna",
          "independentDecision": "Bandingkan dua tempo dan pilih batas yang tetap dapat dimainkan jelas.",
          "evidence": "scratch-sd-lanjutan-S26-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 2,
          "minimumTask": "Simpan empat nilai 0/1 dan baca satu indeks pilihan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Simpan empat nilai 0/1 dan baca satu indeks pilihan.",
            "understanding": "Uji nilai selain 0/1 pada salinan; tetapkan respons aman tanpa menganggapnya bunyi otomatis. Ganti urutan data dan prediksi langkah yang berbunyi.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Simpan empat nilai 0/1 dan baca satu indeks pilihan.",
            "probe": "Uji nilai selain 0/1 pada salinan; tetapkan respons aman tanpa menganggapnya bunyi otomatis. Ganti urutan data dan prediksi langkah yang berbunyi.",
            "check": "Indeks membaca nilai yang benar, data tidak didukung ditangani dan bunyi mengikuti pola baru.",
            "studentItems": [
              "Simpan empat nilai 0/1 dan baca satu indeks pilihan.",
              "Uji nilai selain 0/1 pada salinan; tetapkan respons aman tanpa menganggapnya bunyi otomatis.",
              "Ganti urutan data dan prediksi langkah yang berbunyi."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 27,
          "project": 4,
          "phase": 2,
          "title": "Satu loop jam",
          "target": "Satu pemutar mengatur urutan, mulai berulang tidak menggandakan loop dan durasi mengubah tempo.",
          "demo": "Mentor memperagakan kegiatan pertama: Jalankan satu loop jam untuk empat langkah. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Jalankan satu loop jam untuk empat langkah. Tekan mulai lagi ketika sudah berjalan; periksa tidak terbentuk pemutar kedua. Ubah durasi langkah pada satu pemutar dan bandingkan tempo.",
          "check": "Satu pemutar mengatur urutan, mulai berulang tidak menggandakan loop dan durasi mengubah tempo.",
          "fault": "Menekan mulai berulang menumpuk beberapa pemutar",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Mesin pemutar",
          "independentDecision": "Tentukan apakah ubah pola berlaku langsung atau pada putaran berikutnya.",
          "evidence": "scratch-sd-lanjutan-S27-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 3,
          "minimumTask": "Jalankan satu loop jam untuk empat langkah.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Jalankan satu loop jam untuk empat langkah.",
            "understanding": "Tekan mulai lagi ketika sudah berjalan; periksa tidak terbentuk pemutar kedua. Ubah durasi langkah pada satu pemutar dan bandingkan tempo.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Jalankan satu loop jam untuk empat langkah.",
            "probe": "Tekan mulai lagi ketika sudah berjalan; periksa tidak terbentuk pemutar kedua. Ubah durasi langkah pada satu pemutar dan bandingkan tempo.",
            "check": "Satu pemutar mengatur urutan, mulai berulang tidak menggandakan loop dan durasi mengubah tempo.",
            "studentItems": [
              "Jalankan satu loop jam untuk empat langkah.",
              "Tekan mulai lagi ketika sudah berjalan; periksa tidak terbentuk pemutar kedua.",
              "Ubah durasi langkah pada satu pemutar dan bandingkan tempo."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 28,
          "project": 4,
          "phase": 2,
          "title": "Mulai berhenti dan status",
          "target": "Tombol mengubah status konsisten tanpa loop ganda; perilaku mulai ulang sesuai aturan yang dijelaskan.",
          "demo": "Mentor memperagakan kegiatan pertama: Gunakan mulai lalu berhenti dan amati status pemutar. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Gunakan mulai lalu berhenti dan amati status pemutar. Klik mulai cepat dua kali dan berhenti berulang; jangan membuat jam baru. Mulai lagi setelah berhenti dan jelaskan posisi langkah yang disepakati.",
          "check": "Tombol mengubah status konsisten tanpa loop ganda; perilaku mulai ulang sesuai aturan yang dijelaskan.",
          "fault": "Menekan mulai berulang menumpuk beberapa pemutar",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Mesin pemutar",
          "independentDecision": "Tentukan apakah ubah pola berlaku langsung atau pada putaran berikutnya.",
          "evidence": "scratch-sd-lanjutan-S28-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 4,
          "minimumTask": "Gunakan mulai lalu berhenti dan amati status pemutar.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Gunakan mulai lalu berhenti dan amati status pemutar.",
            "understanding": "Klik mulai cepat dua kali dan berhenti berulang; jangan membuat jam baru. Mulai lagi setelah berhenti dan jelaskan posisi langkah yang disepakati.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Gunakan mulai lalu berhenti dan amati status pemutar.",
            "probe": "Klik mulai cepat dua kali dan berhenti berulang; jangan membuat jam baru. Mulai lagi setelah berhenti dan jelaskan posisi langkah yang disepakati.",
            "check": "Tombol mengubah status konsisten tanpa loop ganda; perilaku mulai ulang sesuai aturan yang dijelaskan.",
            "studentItems": [
              "Gunakan mulai lalu berhenti dan amati status pemutar.",
              "Klik mulai cepat dua kali dan berhenti berulang; jangan membuat jam baru.",
              "Mulai lagi setelah berhenti dan jelaskan posisi langkah yang disepakati."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 29,
          "project": 4,
          "phase": 3,
          "title": "Indeks berputar",
          "target": "Urutan berputar tanpa langkah tambahan dan data langkah pertama tetap dibaca tiap putaran.",
          "demo": "Mentor memperagakan kegiatan pertama: Telusuri indeks 1→2→3→4 lalu kembali 1. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Telusuri indeks 1→2→3→4 lalu kembali 1. Amati peralihan 4 ke 1; pastikan tidak membaca indeks 0 atau 5. Ubah satu nilai pada langkah pertama dan uji bunyinya pada putaran berikut.",
          "check": "Urutan berputar tanpa langkah tambahan dan data langkah pertama tetap dibaca tiap putaran.",
          "fault": "Pemutar masih mengirim event setelah status berhenti",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Perubahan saat berjalan",
          "independentDecision": "Bandingkan dua tempo dan pilih batas yang tetap dapat dimainkan jelas.",
          "evidence": "scratch-sd-lanjutan-S29-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 5,
          "minimumTask": "Telusuri indeks 1→2→3→4 lalu kembali 1.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Telusuri indeks 1→2→3→4 lalu kembali 1.",
            "understanding": "Amati peralihan 4 ke 1; pastikan tidak membaca indeks 0 atau 5. Ubah satu nilai pada langkah pertama dan uji bunyinya pada putaran berikut.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Telusuri indeks 1→2→3→4 lalu kembali 1.",
            "probe": "Amati peralihan 4 ke 1; pastikan tidak membaca indeks 0 atau 5. Ubah satu nilai pada langkah pertama dan uji bunyinya pada putaran berikut.",
            "check": "Urutan berputar tanpa langkah tambahan dan data langkah pertama tetap dibaca tiap putaran.",
            "studentItems": [
              "Telusuri indeks 1→2→3→4 lalu kembali 1.",
              "Amati peralihan 4 ke 1; pastikan tidak membaca indeks 0 atau 5.",
              "Ubah satu nilai pada langkah pertama dan uji bunyinya pada putaran berikut."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 30,
          "project": 4,
          "phase": 3,
          "title": "Tempo terbatas",
          "target": "Tempo dibatasi, pemutar tetap tunggal dan perubahan durasi tidak mengubah data pola.",
          "demo": "Mentor memperagakan kegiatan pertama: Uji dua durasi langkah dalam batas tempo yang ditentukan. Berhenti sebelum variasi dan minta siswa memprediksi hasil.",
          "practice": "Uji dua durasi langkah dalam batas tempo yang ditentukan. Coba mempercepat melewati batas; durasi harus tetap aman dan bunyi tidak menumpuk tak terkendali. Pilih tempo baru dalam batas lalu jelaskan pengaruhnya pada pola yang sama.",
          "check": "Tempo dibatasi, pemutar tetap tunggal dan perubahan durasi tidak mengubah data pola.",
          "fault": "Pemutar masih mengirim event setelah status berhenti",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
          "advancedDemand": "Perubahan saat berjalan",
          "independentDecision": "Bandingkan dua tempo dan pilih batas yang tetap dapat dimainkan jelas.",
          "evidence": "scratch-sd-lanjutan-S30-kode-siswa",
          "lessonType": "learning",
          "moduleSession": 6,
          "minimumTask": "Uji dua durasi langkah dalam batas tempo yang ditentukan.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "learning",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "learning",
            "label": "Pembelajaran",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 10
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 3
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 27
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 20,
            "guidedMinutes": 7,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Uji dua durasi langkah dalam batas tempo yang ditentukan.",
            "understanding": "Coba mempercepat melewati batas; durasi harus tetap aman dan bunyi tidak menumpuk tak terkendali. Pilih tempo baru dalam batas lalu jelaskan pengaruhnya pada pola yang sama.",
            "enrichment": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar.",
            "estimatedIndependent": {
              "min": 14,
              "max": 20,
              "unit": "menit",
              "includes": "Versi inti dan pembuktian khusus topik setelah demo; uji formal serta simpan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Uji dua durasi langkah dalam batas tempo yang ditentukan.",
            "probe": "Coba mempercepat melewati batas; durasi harus tetap aman dan bunyi tidak menumpuk tak terkendali. Pilih tempo baru dalam batas lalu jelaskan pengaruhnya pada pola yang sama.",
            "check": "Tempo dibatasi, pemutar tetap tunggal dan perubahan durasi tidak mengubah data pola.",
            "studentItems": [
              "Uji dua durasi langkah dalam batas tempo yang ditentukan.",
              "Coba mempercepat melewati batas; durasi harus tetap aman dan bunyi tidak menumpuk tak terkendali.",
              "Pilih tempo baru dalam batas lalu jelaskan pengaruhnya pada pola yang sama."
            ],
            "estimate": {
              "min": 14,
              "max": 20
            },
            "extension": "Ubah satu aturan pada data baru dan jelaskan mengapa kasus normal serta gagal sebelumnya tetap benar."
          }
        },
        {
          "number": 31,
          "project": 4,
          "phase": 4,
          "title": "Membuat proyek: Studio Musik Interaktif",
          "target": "Menggabungkan enam keterampilan modul menjadi Studio Musik Interaktif dengan pilihan dan pengujian mandiri",
          "demo": "Mulai dari proyek baru atau salinan latihan siswa. Gunakan contoh mentor sebagai pembanding setelah versi minimum dicoba.",
          "practice": "Rancang versi milikmu untuk Studio Musik Interaktif. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "check": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
          "fault": "Menyalin contoh utuh tanpa rencana atau tidak menguji dari kondisi awal.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Delapan langkah serta dua instrumen memakai satu jam yang sama.",
          "advancedDemand": "Serah terima alat",
          "independentDecision": "Tentukan apakah ubah pola berlaku langsung atau pada putaran berikutnya.",
          "evidence": "scratch-sd-lanjutan-S31-kode-siswa",
          "lessonType": "project",
          "moduleSession": 7,
          "minimumTask": "Rancang versi milikmu untuk Studio Musik Interaktif. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "production",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "production",
            "label": "Produksi",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 3
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 2
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Praktik",
                "minutes": 38
              },
              {
                "key": "test",
                "label": "Uji dan revisi",
                "minutes": 10
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 35,
            "guidedMinutes": 3,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas."
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Rancang versi milikmu untuk Studio Musik Interaktif. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "understanding": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 27,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Satu keterampilan inti dengan satu variasi mandiri.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Rancang versi milikmu untuk Studio Musik Interaktif. Gabungkan keterampilan enam sesi sebelumnya, buat versi minimum, uji dua putaran, lalu simpan sumber dan satu catatan revisi.",
            "probe": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "check": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "studentItems": [
              "Lanjutkan rancanganmu menjadi versi minimum.",
              "Pola empat langkah berjalan pada satu pemutar.",
              "Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        },
        {
          "number": 32,
          "project": 4,
          "phase": 4,
          "title": "Presentasi proyek: Studio Musik Interaktif",
          "target": "Mendemonstrasikan Studio Musik Interaktif, menjelaskan keputusan serta revisi, dan menanggapi pertanyaan dengan bukti",
          "demo": "Buka karya dari sesi 31. Latih penjelasan singkat dan siapkan satu bukti sebelum–sesudah; tidak mempelajari blok baru.",
          "practice": "Presentasikan karya dari sesi 31. Jelaskan tujuan, jalankan dari awal, tunjukkan blok pilihan dan bukti revisi, lalu catat satu masukan teman.",
          "check": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
          "fault": "Hanya menjalankan karya tanpa menunjukkan blok dan bukti proses.",
          "support": "Siswa menggambar rencana sendiri, membandingkan dua pilihan, dan menjelaskan satu revisi dengan bahasa sederhana. Mentor membantu membaca istilah baru. Beri acuan indeks atau skrip satu langkah, kemudian kurangi bantuan.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "advancedDemand": "Serah terima alat",
          "independentDecision": "Tentukan apakah ubah pola berlaku langsung atau pada putaran berikutnya.",
          "evidence": "scratch-sd-lanjutan-S32-kode-siswa",
          "lessonType": "presentation",
          "moduleSession": 8,
          "minimumTask": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Studio Musik Interaktif. Siswa memprediksi akibat, memilih bagian yang perlu diubah, dan menyusun satu uji baru.",
          "assessmentEvidence": "Simpan versi awal dan akhir; catat harapan, hasil aktual, satu alasan perubahan, dan bentuk bantuan.",
          "sessionType": "presentation",
          "timePlan": {
            "revision": "2026-11-04-task-timing",
            "type": "presentation",
            "label": "Presentasi karya",
            "duration": 60,
            "stages": [
              {
                "key": "opening",
                "label": "Pembuka dan cek bekal",
                "minutes": 5
              },
              {
                "key": "concept",
                "label": "Konsep dan demo",
                "minutes": 3
              },
              {
                "key": "setup",
                "label": "Persiapan sumber",
                "minutes": 2
              },
              {
                "key": "practice",
                "label": "Demonstrasi siswa",
                "minutes": 24
              },
              {
                "key": "test",
                "label": "Pertanyaan dan umpan balik",
                "minutes": 21
              },
              {
                "key": "closing",
                "label": "Simpan, refleksi dan cadangan waktu",
                "minutes": 5
              }
            ],
            "independentMinutes": 24,
            "guidedMinutes": 0,
            "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
            "presentation": {
              "format": "group",
              "students": "1–4",
              "demoMinutes": 24,
              "perStudentMinutes": 4,
              "transitionReserve": 4,
              "maxStudentsSequential": 4,
              "rule": "Grup 1–4 siswa: gunakan sisa blok untuk latihan penjelasan atau pertanyaan singkat; tidak perlu memperpanjang bicara demi mengisi waktu. Private menggunakan varian tersendiri."
            },
            "privateVariant": {
              "format": "private",
              "students": 1,
              "stages": [
                {
                  "key": "opening",
                  "label": "Pembuka dan cek bekal",
                  "minutes": 5
                },
                {
                  "key": "concept",
                  "label": "Konsep dan demo",
                  "minutes": 3
                },
                {
                  "key": "setup",
                  "label": "Persiapan sumber",
                  "minutes": 2
                },
                {
                  "key": "practice",
                  "label": "Demonstrasi siswa",
                  "minutes": 15
                },
                {
                  "key": "test",
                  "label": "Pertanyaan dan umpan balik",
                  "minutes": 30
                },
                {
                  "key": "closing",
                  "label": "Simpan, refleksi dan cadangan waktu",
                  "minutes": 5
                }
              ],
              "demoMinutes": 15,
              "note": "Blok 15 menit: sekitar 5 menit demonstrasi dan 10 menit penjelasan/probe; 30 menit uji, masukan dan revisi."
            }
          },
          "taskReview": {
            "status": "Estimasi awal; perlu validasi mentor di kelas",
            "startingPoint": "Lanjutkan berkas latihan/proyek yang sudah disimpan; contoh mentor adalah acuan, bukan hasil siswa.",
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "understanding": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "enrichment": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur.",
            "estimatedIndependent": {
              "min": 19,
              "max": 24,
              "unit": "menit",
              "includes": "Blok seluruh giliran demonstrasi kelas; bukan waktu bicara per siswa. Umpan balik mempunyai slot terpisah.",
              "scope": "class"
            },
            "workloadFactors": [
              "Demonstrasi hasil; tidak mempelajari konsep baru.",
              "Brief lebih mandiri; catat keputusan dan bantuan.",
              "Tidak memasukkan instalasi atau unduhan besar."
            ],
            "stopRule": "Jika hasil minimum dan probe sudah terbukti, lanjut ke pengayaan atau refleksi; tidak perlu menghabiskan jatah waktu. Jika belum, kurangi variasi dan catat penguatan.",
            "technicalWait": null,
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          },
          "topicReview": {
            "minimum": "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
            "probe": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "check": "Pola empat langkah berjalan pada satu pemutar. Mulai berulang tidak membuat jam ganda dan tempo tetap dalam batas.",
            "studentItems": [
              "Presentasikan sumber proyek sendiri dan tunjuk satu keputusan serta satu revisi.",
              "Tunjukkan satu uji normal dan satu kasus yang ditolak.",
              "Jawab pertanyaan dengan menjalankan sumber."
            ],
            "extension": "Terapkan satu masukan yang relevan dan ulangi pemeriksaan proyek; tidak perlu menambah fitur."
          }
        }
      ],
      "curriculumRevision": "scratch-bridges-2026-10-24-v1",
      "placement": [
        "Jalankan event, kondisi, variabel skor, loop, dan reset tanpa menyalin seluruh skrip.",
        "Telusuri tiga item daftar dengan bantuan kartu indeks; jika baru, ikuti latihan penghubung sesi 1–3.",
        "Bedakan data sprite dan tampilan serta jelaskan perubahan setelah satu event.",
        "Catat bantuan; masuk pengayaan hanya setelah versi minimum dapat dijelaskan dan diulang."
      ],
      "learningApproach": "Siswa menentukan solusi dari brief, menyusun kasus uji, dan menjelaskan keputusan. Mentor memberi petunjuk bertahap."
    }
  ],
  "pedagogyRevision": "2026-11-04",
  "teachingPolicy": {
    "assessment": "Catat hasil aktual, penjelasan siswa, dan bantuan: contoh langsung / petunjuk / mandiri. Kemiripan dengan contoh dan kecepatan bukan ukuran kelulusan.",
    "pacing": "Durasi merupakan rencana. Bila hasil minimum belum tercapai, gunakan waktu pengayaan dan pengulangan pada proyek berikutnya; jangan menambah konsep hanya demi nomor sesi.",
    "pilot": "Mentor mencatat menit efektif, bagian yang sulit, bantuan, dan hasil transfer pada kelas percobaan sebelum menetapkan tempo tetap."
  },
  "timingRevision": "2026-11-04-task-timing",
  "timingPolicy": {
    "status": "Estimasi awal berbasis isi tugas; belum merupakan hasil pengukuran kelas.",
    "duration": 60,
    "setup": "Aplikasi, akun bila perlu, interpreter, aset dan contoh diunduh serta diuji sebelum kelas. Instalasi atau unduhan besar bukan bagian dari slot persiapan singkat.",
    "buffer": "Lima menit penutupan mencakup simpan/refleksi sekitar tiga menit dan cadangan sekitar dua menit; bukan waktu tambahan di luar durasi.",
    "presentation": "Dua format: private satu siswa dan grup 1–4 siswa. Jadwal utama untuk grup; varian private memindahkan waktu giliran ke diskusi, uji dan revisi individual.",
    "classFormats": {
      "private": {
        "students": 1
      },
      "group": {
        "minStudents": 1,
        "maxStudents": 4
      }
    },
    "pilot": "Catat jumlah siswa, waktu aktual tiap tahap, bantuan, hasil minimum, hasil probe dan penguatan berikutnya. Jangan menahan siswa yang sudah membuktikan paham hanya untuk memenuhi menit."
  },
  "topicTaskRevision": "2026-11-04-specific-probes"
}
