{
  "slug": "python",
  "name": "Python",
  "category": "Coding",
  "updated": "2026-11-04",
  "status": "Kurikulum berbasis proyek; contoh proyek akhir .py tersedia. Uji logika otomatis dan smoke test widget tersedia; tempo serta uji pengguna tetap divalidasi mentor di perangkat kelas.",
  "app": "Visual Studio Code (VS Code)",
  "sessionsPerLevel": 64,
  "duration": 60,
  "ages": [
    "SMP",
    "SMA"
  ],
  "setup": "SMP: Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. SMA: Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
  "placement": [
    "Jalankan file .py dan jelaskan perbedaan input teks dengan angka.",
    "Tulis kondisi serta loop dan perbaiki satu kesalahan indentasi.",
    "Buat fungsi parameter-return yang mengolah list/dictionary pada data baru.",
    "Uji input kosong serta simpan-muat JSON; untuk SMA Lanjutan, jelaskan callback satu tombol."
  ],
  "sources": [
    {
      "label": "VS Code: interpreter, terminal, dan debugger",
      "url": "https://code.visualstudio.com/docs/python/python-tutorial"
    },
    {
      "label": "Python: kontrol alur dan fungsi",
      "url": "https://docs.python.org/3/tutorial/controlflow.html"
    },
    {
      "label": "Python: Tkinter dan event loop",
      "url": "https://docs.python.org/3/library/tkinter.html"
    },
    {
      "label": "Python: CSV dan tipe nilai",
      "url": "https://docs.python.org/3/library/csv.html"
    },
    {
      "label": "Python: SQLite dan transaksi",
      "url": "https://docs.python.org/3/library/sqlite3.html"
    },
    {
      "label": "Python: unittest",
      "url": "https://docs.python.org/3/library/unittest.html"
    }
  ],
  "paths": [
    {
      "id": "smp-pemula",
      "age": "SMP",
      "level": "pemula",
      "name": "SMP · Pemula",
      "entry": "Tidak memerlukan pengalaman Python. Mulai dari membuka file, print(), variabel, input(), dan latihan kecil; mentor memeriksa pemahaman sebelum menambah konsep.",
      "target": "Menguasai keluaran, input, tipe data, kondisi, loop, fungsi, list/dictionary, dan JSON melalui empat program terminal yang dapat dijelaskan serta diuji bertahap.",
      "scope": "64 sesi × 1 jam; empat proyek terminal dengan data sintetis 3–5 entri. Pelajari fondasi lewat latihan kecil sebelum menggabungkannya; aplikasi berjendela belum menjadi syarat. Semua file dibuka sebagai satu folder proyek di VS Code dengan interpreter terpilih, terminal terintegrasi, serta debugger.",
      "adaptation": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
      "projects": [
        {
          "name": "Kuis Pengetahuan",
          "topic": "Fondasi Python dan percabangan",
          "out": "Kuis terminal tiga pertanyaan dengan skor dan jawaban yang dinormalisasi.",
          "art": "python-smp-pemula-p1-apps.svg",
          "steps": [
            "Kenali VS Code dan interpreter, lalu tulis print(), variabel, tipe data, dan input()",
            "Pelajari konversi int(), operator perbandingan, boolean, indentasi, serta if/elif/else pada satu soal",
            "Susun tiga pertanyaan dengan for, range(), dan skor tanpa mengulang input yang sama",
            "Normalisasi jawaban, uji benar-salah-kosong, dan presentasikan kuis dengan README"
          ],
          "checks": [
            "Program .py berjalan melalui interpreter yang dipilih",
            "Percabangan membedakan tiga kondisi jawaban",
            "Tiga jawaban menghasilkan skor yang dapat dihitung tangan",
            "Input kosong tertangani dan kuis dapat dijalankan ulang"
          ],
          "faults": [
            "File belum disimpan atau interpreter belum dipilih",
            "Teks dibandingkan langsung dengan angka",
            "Skor direset di dalam loop",
            "Spasi dan huruf besar membuat jawaban setara dianggap berbeda"
          ],
          "recipe": "Gunakan input sebagai teks; lakukan strip().lower() untuk jawaban kata. Latih int() pada contoh terpisah sebelum konversi pada kuis. Tiga jawaban 5, 7, biru untuk kunci 5, 8, biru menghasilkan 2/3. Mulai dari satu soal, kemudian tiga soal berulang.",
          "number": 1,
          "start": 1,
          "end": 16,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Kuis terminal tiga pertanyaan dengan skor dan jawaban yang dinormalisasi.",
          "minimumChecks": [
            "Program .py berjalan melalui interpreter yang dipilih",
            "Percabangan membedakan tiga kondisi jawaban",
            "Tiga jawaban menghasilkan skor yang dapat dihitung tangan"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Kuis Pengetahuan dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Kuis Pengetahuan 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": "Tebak Angka",
          "topic": "while, fungsi, dan validasi input",
          "out": "Game angka terminal dengan batas percobaan, fungsi pemeriksa, dan pilihan main lagi.",
          "art": "python-smp-pemula-p2-apps.svg",
          "steps": [
            "Pelajari while, perubahan kondisi, break, dan pencacah pada target angka tetap",
            "Tulis fungsi dengan parameter dan return untuk petunjuk tebakan",
            "Gunakan import random, rentang angka, dan try/except ValueError",
            "Pisahkan satu putaran dari menu main lagi dan buktikan reset melalui uji"
          ],
          "checks": [
            "Loop berhenti sesuai kondisi dan batas percobaan",
            "Fungsi memberi petunjuk kecil-besar-benar",
            "Huruf dan angka di luar rentang tidak merusak program",
            "Main ulang mengganti target serta mereset pencacah"
          ],
          "faults": [
            "Kondisi while tidak pernah berubah",
            "Parameter tertukar atau return tidak dipakai",
            "Konversi input huruf tidak ditangani",
            "Main ulang membawa pencacah putaran sebelumnya"
          ],
          "recipe": "Pakai target tetap 42 dahulu: 20 terlalu kecil, 70 terlalu besar, 42 benar. Fungsi petunjuk menerima target dan tebakan. Tetapkan angka di luar 1–100 serta input huruf tidak memakai kesempatan. Setelah uji tetap lulus, gunakan random.randint(1,100).",
          "number": 2,
          "start": 17,
          "end": 32,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Game angka terminal dengan batas percobaan, fungsi pemeriksa, dan pilihan main lagi.",
          "minimumChecks": [
            "Loop berhenti sesuai kondisi dan batas percobaan",
            "Fungsi memberi petunjuk kecil-besar-benar",
            "Huruf dan angka di luar rentang tidak merusak program"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Tebak Angka dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Tebak Angka 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": "Catatan Uang Saku",
          "topic": "List, dictionary, dan JSON",
          "out": "Pencatat uang saku terminal dengan transaksi berlabel dan simpan-muat JSON.",
          "art": "python-smp-pemula-p3-apps.svg",
          "steps": [
            "Susun list dan dictionary berisi transaksi sintetis dengan nilai rupiah bilangan bulat",
            "Buat fungsi validasi, tambah transaksi, dan hitung saldo melalui menu terminal",
            "Gunakan pathlib, with open, serta json untuk simpan-muat dan tangani file belum ada",
            "Uji nominal salah, JSON rusak pada salinan, dan buka ulang tanpa kehilangan data"
          ],
          "checks": [
            "Setiap transaksi memiliki jenis, nama, dan nominal positif",
            "Pemasukan menambah saldo dan pengeluaran menguranginya",
            "Buka ulang menghasilkan transaksi dan saldo yang sama",
            "Data rusak diberi pesan tanpa menimpa sumber"
          ],
          "faults": [
            "Indeks list tertukar dengan nama field dictionary",
            "Pengeluaran ditambah ke saldo",
            "Lokasi file bergantung pada folder terminal",
            "JSON rusak disamakan dengan daftar kosong lalu disimpan otomatis"
          ],
          "recipe": "Simpan nominal rupiah sebagai int positif. Pemasukan 50000 dikurangi buku 10000 dan camilan 5000 memberi saldo 35000. Bedakan file belum ada dari file rusak. Jangan simpan di atas JSON rusak sebelum pengguna membuat salinan dan memutuskan perbaikan.",
          "number": 3,
          "start": 33,
          "end": 48,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Pencatat uang saku terminal dengan transaksi berlabel dan simpan-muat JSON.",
          "minimumChecks": [
            "Setiap transaksi memiliki jenis, nama, dan nominal positif",
            "Pemasukan menambah saldo dan pengeluaran menguranginya",
            "Buka ulang menghasilkan transaksi dan saldo yang sama"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Catatan Uang Saku dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Catatan Uang Saku 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": "Pengatur Tugas Sekolah",
          "topic": "Integrasi program terminal",
          "out": "Aplikasi terminal dengan tambah, cari, tandai selesai, ringkasan, serta JSON.",
          "art": "python-smp-pemula-p4-apps.svg",
          "steps": [
            "Tuliskan kebutuhan pengguna dan model tugas dengan ID yang stabil",
            "Implementasikan tambah, cari, dan selesai memakai fungsi serta validasi",
            "Integrasikan simpan-muat JSON dan ringkasan tugas tanpa duplikasi",
            "Uji tugas baru, daftar kosong, ID salah, serta pembukaan ulang sebelum presentasi"
          ],
          "checks": [
            "ID tetap mengacu tugas yang sama setelah pencarian",
            "Judul kosong ditolak dan status berubah pada tugas terpilih",
            "Data serta ringkasan tetap sama setelah buka ulang",
            "Pengguna menyelesaikan tiga skenario melalui README"
          ],
          "faults": [
            "Indeks hasil pencarian dianggap ID data utama",
            "Menandai selesai malah menambah tugas baru",
            "Data kosong tersimpan menimpa data yang belum dimuat",
            "Kasus tugas tidak ditemukan membuat program berhenti"
          ],
          "recipe": "Gunakan tiga tugas dengan ID 1,2,3. Awalnya satu selesai dari tiga; tandai ID 3 sehingga dua selesai dari tiga tanpa menambah data. Buat fungsi pencarian yang mengembalikan tugas atau None. Antarmuka tetap terminal; GUI belum menjadi syarat.",
          "number": 4,
          "start": 49,
          "end": 64,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "samplePath": "contoh/smp-pemula/app.py",
          "sampleReadme": "contoh/smp-pemula/README.md",
          "sampleTest": "contoh/smp-pemula/test_app.py",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi terminal dengan tambah, cari, tandai selesai, ringkasan, serta JSON.",
          "minimumChecks": [
            "ID tetap mengacu tugas yang sama setelah pencarian",
            "Judul kosong ditolak dan status berubah pada tugas terpilih",
            "Data serta ringkasan tetap sama setelah buka ulang"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Pengatur Tugas Sekolah dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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": "Folder dan interpreter",
          "target": "Mampu menjelaskan dan menerapkan folder dan interpreter",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Buka folder di VS Code, pilih Python: Select Interpreter, simpan halo.py. Minta prediksi sebelum menjalankan dan bandingkan dengan file yang benar dijalankan dari folder kelas",
          "practice": "Buka folder di VS Code, pilih Python: Select Interpreter, simpan halo.py",
          "check": "File yang benar dijalankan dari folder kelas",
          "fault": "File belum disimpan atau interpreter belum dipilih",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan folder dan interpreter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S01-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buka folder di VS Code, pilih Python: Select Interpreter, simpan halo.py",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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": "Buka folder di VS Code, pilih Python: Select Interpreter, simpan halo.py",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan folder dan interpreter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "print() dan keluaran",
          "target": "Mampu menjelaskan dan menerapkan print() dan keluaran",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan dua kalimat memakai print() dan amati terminal. Minta prediksi sebelum menjalankan dan bandingkan dengan dua baris sesuai prediksi",
          "practice": "Tampilkan dua kalimat memakai print() dan amati terminal",
          "check": "Dua baris sesuai prediksi",
          "fault": "File belum disimpan atau interpreter belum dipilih",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan print() dan keluaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S02-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan dua kalimat memakai print() dan amati terminal",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan dua kalimat memakai print() dan amati terminal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan print() dan keluaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 1,
          "title": "Variabel dan tipe data",
          "target": "Mampu menjelaskan dan menerapkan variabel dan tipe data",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan nama sebagai str, skor sebagai int, desimal sebagai float, serta status sebagai bool lalu ubah satu nilai. Minta prediksi sebelum menjalankan dan bandingkan dengan perbedaan teks angka dan boolean dapat dijelaskan",
          "practice": "Simpan nama sebagai str, skor sebagai int, desimal sebagai float, serta status sebagai bool lalu ubah satu nilai",
          "check": "Perbedaan teks angka dan boolean dapat dijelaskan",
          "fault": "File belum disimpan atau interpreter belum dipilih",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel dan tipe data; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S03-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan nama sebagai str, skor sebagai int, desimal sebagai float, serta status sebagai bool lalu ubah satu nilai",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 nama sebagai str, skor sebagai int, desimal sebagai float, serta status sebagai bool lalu ubah satu nilai",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel dan tipe data; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 1,
          "title": "input() sebagai teks",
          "target": "Mampu menjelaskan dan menerapkan input() sebagai teks",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta nama lalu tampilkan sapaan dengan f-string. Minta prediksi sebelum menjalankan dan bandingkan dengan input kosong dan nama berisi spasi diamati",
          "practice": "Minta nama lalu tampilkan sapaan dengan f-string",
          "check": "Input kosong dan nama berisi spasi diamati",
          "fault": "File belum disimpan atau interpreter belum dipilih",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan input() sebagai teks; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S04-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta nama lalu tampilkan sapaan dengan f-string",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Minta nama lalu tampilkan sapaan dengan f-string",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan input() sebagai teks; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 2,
          "title": "Angka dan konversi int()",
          "target": "Mampu menjelaskan dan menerapkan angka dan konversi int()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bandingkan hasil penjumlahan teks dengan angka pada contoh kecil. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa membedakan 2+3 dari penggabungan teks",
          "practice": "Bandingkan hasil penjumlahan teks dengan angka pada contoh kecil",
          "check": "Siswa membedakan 2+3 dari penggabungan teks",
          "fault": "Teks dibandingkan langsung dengan angka",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan angka dan konversi int(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S05-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bandingkan hasil penjumlahan teks dengan angka pada contoh kecil",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 hasil penjumlahan teks dengan angka pada contoh kecil",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan angka dan konversi int(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 2,
          "title": "Operator dan boolean",
          "target": "Mampu menjelaskan dan menerapkan operator dan boolean",
          "demo": "Di VS Code, peragakan contoh minimum untuk Prediksi hasil ==, !=, <, > dan bandingkan jawaban. Minta prediksi sebelum menjalankan dan bandingkan dengan benar dan salah dibedakan tanpa menebak",
          "practice": "Prediksi hasil ==, !=, <, > dan bandingkan jawaban",
          "check": "Benar dan salah dibedakan tanpa menebak",
          "fault": "Teks dibandingkan langsung dengan angka",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan operator dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S06-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Prediksi hasil ==, !=, <, > dan bandingkan jawaban",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 hasil ==, !=, <, > dan bandingkan jawaban",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan operator dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 2,
          "title": "Indentasi dan if/else",
          "target": "Mampu menjelaskan dan menerapkan indentasi dan if/else",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat satu soal dengan dua respons memakai blok terindentasi. Minta prediksi sebelum menjalankan dan bandingkan dengan hanya satu cabang yang berjalan",
          "practice": "Buat satu soal dengan dua respons memakai blok terindentasi",
          "check": "Hanya satu cabang yang berjalan",
          "fault": "Teks dibandingkan langsung dengan angka",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan indentasi dan if/else; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S07-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat satu soal dengan dua respons memakai blok terindentasi",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 soal dengan dua respons memakai blok terindentasi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan indentasi dan if/else; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 2,
          "title": "elif dan input kosong",
          "target": "Mampu menjelaskan dan menerapkan elif dan input kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tambahkan respons untuk jawaban kosong sebelum memeriksa kunci. Minta prediksi sebelum menjalankan dan bandingkan dengan kosong tidak dianggap jawaban benar",
          "practice": "Tambahkan respons untuk jawaban kosong sebelum memeriksa kunci",
          "check": "Kosong tidak dianggap jawaban benar",
          "fault": "Teks dibandingkan langsung dengan angka",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan elif dan input kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S08-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tambahkan respons untuk jawaban kosong sebelum memeriksa kunci",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tambahkan respons untuk jawaban kosong sebelum memeriksa kunci",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan elif dan input kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 9,
          "project": 1,
          "phase": 3,
          "title": "Skor dan +=",
          "target": "Mampu menjelaskan dan menerapkan skor dan +=",
          "demo": "Di VS Code, peragakan contoh minimum untuk Mulai skor nol lalu tambahkan satu hanya saat benar. Minta prediksi sebelum menjalankan dan bandingkan dengan dua jawaban benar memberi dua poin",
          "practice": "Mulai skor nol lalu tambahkan satu hanya saat benar",
          "check": "Dua jawaban benar memberi dua poin",
          "fault": "Skor direset di dalam loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan skor dan +=; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S09-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Mulai skor nol lalu tambahkan satu hanya saat benar",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 skor nol lalu tambahkan satu hanya saat benar",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan skor dan +=; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 10,
          "project": 1,
          "phase": 3,
          "title": "for dan range()",
          "target": "Mampu menjelaskan dan menerapkan for dan range()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Cetak nomor pertanyaan melalui range(3). Minta prediksi sebelum menjalankan dan bandingkan dengan loop berjalan tepat tiga kali",
          "practice": "Cetak nomor pertanyaan melalui range(3)",
          "check": "Loop berjalan tepat tiga kali",
          "fault": "Skor direset di dalam loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan for dan range(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S10-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Cetak nomor pertanyaan melalui range(3)",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Cetak nomor pertanyaan melalui range(3)",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan for dan range(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 11,
          "project": 1,
          "phase": 3,
          "title": "List pasangan soal",
          "target": "Mampu menjelaskan dan menerapkan list pasangan soal",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan tiga pertanyaan dan kuncinya sebagai data sederhana. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan soal cocok dengan kunci",
          "practice": "Simpan tiga pertanyaan dan kuncinya sebagai data sederhana",
          "check": "Urutan soal cocok dengan kunci",
          "fault": "Skor direset di dalam loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list pasangan soal; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S11-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan tiga pertanyaan dan kuncinya sebagai data sederhana",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga pertanyaan dan kuncinya sebagai data sederhana",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list pasangan soal; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 12,
          "project": 1,
          "phase": 3,
          "title": "Membaca data dalam loop",
          "target": "Mampu menjelaskan dan menerapkan membaca data dalam loop",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tanyakan soal dari list dan simpan jawaban tiap putaran. Minta prediksi sebelum menjalankan dan bandingkan dengan soal tidak terlewati dan skor tidak direset",
          "practice": "Tanyakan soal dari list dan simpan jawaban tiap putaran",
          "check": "Soal tidak terlewati dan skor tidak direset",
          "fault": "Skor direset di dalam loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan membaca data dalam loop; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S12-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tanyakan soal dari list dan simpan jawaban tiap putaran",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tanyakan soal dari list dan simpan jawaban tiap putaran",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan membaca data dalam loop; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 13,
          "project": 1,
          "phase": 4,
          "title": "Normalisasi string",
          "target": "Mampu menjelaskan dan menerapkan normalisasi string",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gunakan strip().lower() pada jawaban kata. Minta prediksi sebelum menjalankan dan bandingkan dengan biru dan biru dengan spasi dinilai setara",
          "practice": "Gunakan strip().lower() pada jawaban kata",
          "check": "Biru dan biru dengan spasi dinilai setara",
          "fault": "Spasi dan huruf besar membuat jawaban setara dianggap berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan normalisasi string; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S13-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Gunakan strip().lower() pada jawaban kata",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 strip().lower() pada jawaban kata",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan normalisasi string; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 14,
          "project": 1,
          "phase": 4,
          "title": "Membaca traceback",
          "target": "Mampu menjelaskan dan menerapkan membaca traceback",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbaiki satu kesalahan nama variabel pada salinan. Minta prediksi sebelum menjalankan dan bandingkan dengan baris penyebab ditemukan dan diperbaiki",
          "practice": "Perbaiki satu kesalahan nama variabel pada salinan",
          "check": "Baris penyebab ditemukan dan diperbaiki",
          "fault": "Spasi dan huruf besar membuat jawaban setara dianggap berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan membaca traceback; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S14-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Perbaiki satu kesalahan nama variabel pada salinan",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Perbaiki satu kesalahan nama variabel pada salinan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan membaca traceback; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 15,
          "project": 1,
          "phase": 4,
          "title": "Matriks uji kuis",
          "target": "Mampu menjelaskan dan menerapkan matriks uji kuis",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji semua benar, semua salah, serta input kosong. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil cocok dengan skor yang dihitung tangan",
          "practice": "Uji semua benar, semua salah, serta input kosong",
          "check": "Hasil cocok dengan skor yang dihitung tangan",
          "fault": "Spasi dan huruf besar membuat jawaban setara dianggap berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan matriks uji kuis; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S15-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji semua benar, semua salah, serta input kosong",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 semua benar, semua salah, serta input kosong",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan matriks uji kuis; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 16,
          "project": 1,
          "phase": 4,
          "title": "Presentasi: Kuis Pengetahuan",
          "target": "Mampu menjelaskan dan menerapkan presentasi kuis",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan kuis baru dan tulis perintah pada README. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan satu kondisi dan satu loop",
          "practice": "Jalankan kuis baru dan tulis perintah pada README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menjelaskan satu kondisi dan satu loop",
          "fault": "Spasi dan huruf besar membuat jawaban setara dianggap berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-pemula-S16-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan kuis baru dan tulis perintah pada README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Kuis Pengetahuan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Jalankan kuis baru dan tulis perintah pada README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 17,
          "project": 2,
          "phase": 1,
          "title": "Audit kuis dan alur game",
          "target": "Mampu menjelaskan dan menerapkan audit kuis dan alur game",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Telusuri input-kondisi-loop dari kuis lalu gambar satu putaran game. Minta prediksi sebelum menjalankan dan bandingkan dengan fondasi yang belum konsisten mendapat penguatan",
          "practice": "Telusuri input-kondisi-loop dari kuis lalu gambar satu putaran game",
          "check": "Fondasi yang belum konsisten mendapat penguatan",
          "fault": "Kondisi while tidak pernah berubah",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit kuis dan alur game; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S17-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Telusuri input-kondisi-loop dari kuis lalu gambar satu putaran game",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Telusuri input-kondisi-loop dari kuis lalu gambar satu putaran game",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit kuis dan alur game; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 18,
          "project": 2,
          "phase": 1,
          "title": "while dan kondisi berhenti",
          "target": "Mampu menjelaskan dan menerapkan while dan kondisi berhenti",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ulangi tebakan pada target tetap 42. Minta prediksi sebelum menjalankan dan bandingkan dengan loop berhenti saat tebakan benar",
          "practice": "Ulangi tebakan pada target tetap 42",
          "check": "Loop berhenti saat tebakan benar",
          "fault": "Kondisi while tidak pernah berubah",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan while dan kondisi berhenti; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S18-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Ulangi tebakan pada target tetap 42",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Ulangi tebakan pada target tetap 42",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan while dan kondisi berhenti; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 19,
          "project": 2,
          "phase": 1,
          "title": "Pencacah percobaan",
          "target": "Mampu menjelaskan dan menerapkan pencacah percobaan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Batasi lima tebakan valid dan amati perubahan pencacah. Minta prediksi sebelum menjalankan dan bandingkan dengan percobaan tidak melebihi lima",
          "practice": "Batasi lima tebakan valid dan amati perubahan pencacah",
          "check": "Percobaan tidak melebihi lima",
          "fault": "Kondisi while tidak pernah berubah",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencacah percobaan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S19-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Batasi lima tebakan valid dan amati perubahan pencacah",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Batasi lima tebakan valid dan amati perubahan pencacah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencacah percobaan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 20,
          "project": 2,
          "phase": 1,
          "title": "break dan akhir putaran",
          "target": "Mampu menjelaskan dan menerapkan break dan akhir putaran",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bedakan berhenti karena menang dengan kesempatan habis. Minta prediksi sebelum menjalankan dan bandingkan dengan kedua akhir memiliki pesan berbeda",
          "practice": "Bedakan berhenti karena menang dengan kesempatan habis",
          "check": "Kedua akhir memiliki pesan berbeda",
          "fault": "Kondisi while tidak pernah berubah",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan break dan akhir putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S20-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bedakan berhenti karena menang dengan kesempatan habis",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Bedakan berhenti karena menang dengan kesempatan habis",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan break dan akhir putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 21,
          "project": 2,
          "phase": 2,
          "title": "def dan pemanggilan fungsi",
          "target": "Mampu menjelaskan dan menerapkan def dan pemanggilan fungsi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pindahkan petunjuk ke fungsi bernama. Minta prediksi sebelum menjalankan dan bandingkan dengan fungsi dapat dipanggil dua kali",
          "practice": "Pindahkan petunjuk ke fungsi bernama",
          "check": "Fungsi dapat dipanggil dua kali",
          "fault": "Parameter tertukar atau return tidak dipakai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan def dan pemanggilan fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S21-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pindahkan petunjuk ke fungsi bernama",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pindahkan petunjuk ke fungsi bernama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan def dan pemanggilan fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 22,
          "project": 2,
          "phase": 2,
          "title": "Parameter dan argumen",
          "target": "Mampu menjelaskan dan menerapkan parameter dan argumen",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kirim target serta tebakan berbeda ke fungsi. Minta prediksi sebelum menjalankan dan bandingkan dengan perubahan argumen mengubah hasil sesuai aturan",
          "practice": "Kirim target serta tebakan berbeda ke fungsi",
          "check": "Perubahan argumen mengubah hasil sesuai aturan",
          "fault": "Parameter tertukar atau return tidak dipakai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan parameter dan argumen; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S22-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kirim target serta tebakan berbeda ke fungsi",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 target serta tebakan berbeda ke fungsi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan parameter dan argumen; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 23,
          "project": 2,
          "phase": 2,
          "title": "return dan nilai hasil",
          "target": "Mampu menjelaskan dan menerapkan return dan nilai hasil",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kembalikan kecil, besar, atau benar tanpa input dalam fungsi. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil dapat dibandingkan di luar fungsi",
          "practice": "Kembalikan kecil, besar, atau benar tanpa input dalam fungsi",
          "check": "Hasil dapat dibandingkan di luar fungsi",
          "fault": "Parameter tertukar atau return tidak dipakai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan return dan nilai hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S23-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kembalikan kecil, besar, atau benar tanpa input dalam fungsi",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kembalikan kecil, besar, atau benar tanpa input dalam fungsi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan return dan nilai hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 24,
          "project": 2,
          "phase": 2,
          "title": "Variabel lokal",
          "target": "Mampu menjelaskan dan menerapkan variabel lokal",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan pencacah satu putaran dari menu utama. Minta prediksi sebelum menjalankan dan bandingkan dengan putaran baru tidak mewarisi nilai lama",
          "practice": "Pisahkan pencacah satu putaran dari menu utama",
          "check": "Putaran baru tidak mewarisi nilai lama",
          "fault": "Parameter tertukar atau return tidak dipakai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel lokal; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S24-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan pencacah satu putaran dari menu utama",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan pencacah satu putaran dari menu utama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel lokal; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 25,
          "project": 2,
          "phase": 3,
          "title": "import random",
          "target": "Mampu menjelaskan dan menerapkan import random",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bandingkan target tetap dengan randint(1,100). Minta prediksi sebelum menjalankan dan bandingkan dengan target selalu dalam rentang yang diumumkan",
          "practice": "Bandingkan target tetap dengan randint(1,100)",
          "check": "Target selalu dalam rentang yang diumumkan",
          "fault": "Konversi input huruf tidak ditangani",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan import random; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S25-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bandingkan target tetap dengan randint(1,100)",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 target tetap dengan randint(1,100)",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan import random; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 26,
          "project": 2,
          "phase": 3,
          "title": "try/except ValueError",
          "target": "Mampu menjelaskan dan menerapkan try/except valueerror",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani huruf ketika int() mengonversi input. Minta prediksi sebelum menjalankan dan bandingkan dengan huruf memberi pesan dan program berlanjut",
          "practice": "Tangani huruf ketika int() mengonversi input",
          "check": "Huruf memberi pesan dan program berlanjut",
          "fault": "Konversi input huruf tidak ditangani",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan try/except valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S26-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani huruf ketika int() mengonversi input",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani huruf ketika int() mengonversi input",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan try/except valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 27,
          "project": 2,
          "phase": 3,
          "title": "Validasi rentang",
          "target": "Mampu menjelaskan dan menerapkan validasi rentang",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak nol dan 101 sebelum menghitung kesempatan. Minta prediksi sebelum menjalankan dan bandingkan dengan input tidak valid tidak mengurangi kesempatan",
          "practice": "Tolak nol dan 101 sebelum menghitung kesempatan",
          "check": "Input tidak valid tidak mengurangi kesempatan",
          "fault": "Konversi input huruf tidak ditangani",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi rentang; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S27-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tolak nol dan 101 sebelum menghitung kesempatan",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak nol dan 101 sebelum menghitung kesempatan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi rentang; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 28,
          "project": 2,
          "phase": 3,
          "title": "Fungsi satu putaran",
          "target": "Mampu menjelaskan dan menerapkan fungsi satu putaran",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gabungkan petunjuk, loop, dan pencacah dalam satu fungsi. Minta prediksi sebelum menjalankan dan bandingkan dengan putaran dapat selesai tanpa menutup menu",
          "practice": "Gabungkan petunjuk, loop, dan pencacah dalam satu fungsi",
          "check": "Putaran dapat selesai tanpa menutup menu",
          "fault": "Konversi input huruf tidak ditangani",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi satu putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S28-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Gabungkan petunjuk, loop, dan pencacah dalam satu fungsi",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Gabungkan petunjuk, loop, dan pencacah dalam satu fungsi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi satu putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 29,
          "project": 2,
          "phase": 4,
          "title": "Menu main lagi",
          "target": "Mampu menjelaskan dan menerapkan menu main lagi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gunakan loop luar untuk pilihan ya atau tidak. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak menutup program dengan paksa",
          "practice": "Gunakan loop luar untuk pilihan ya atau tidak",
          "check": "Tidak menutup program dengan paksa",
          "fault": "Main ulang membawa pencacah putaran sebelumnya",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu main lagi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S29-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Gunakan loop luar untuk pilihan ya atau tidak",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 loop luar untuk pilihan ya atau tidak",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu main lagi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 30,
          "project": 2,
          "phase": 4,
          "title": "Breakpoint dan Step Over",
          "target": "Mampu menjelaskan dan menerapkan breakpoint dan step over",
          "demo": "Di VS Code, peragakan contoh minimum untuk Amati target dan pencacah saat menang serta kalah. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menunjukkan nilai yang berubah",
          "practice": "Amati target dan pencacah saat menang serta kalah",
          "check": "Siswa menunjukkan nilai yang berubah",
          "fault": "Main ulang membawa pencacah putaran sebelumnya",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan breakpoint dan step over; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S30-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Amati target dan pencacah saat menang serta kalah",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 target dan pencacah saat menang serta kalah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan breakpoint dan step over; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 31,
          "project": 2,
          "phase": 4,
          "title": "Regresi dua putaran",
          "target": "Mampu menjelaskan dan menerapkan regresi dua putaran",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji huruf, batas, menang, kalah, dan main lagi. Minta prediksi sebelum menjalankan dan bandingkan dengan reset tidak merusak validasi sebelumnya",
          "practice": "Uji huruf, batas, menang, kalah, dan main lagi",
          "check": "Reset tidak merusak validasi sebelumnya",
          "fault": "Main ulang membawa pencacah putaran sebelumnya",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan regresi dua putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S31-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji huruf, batas, menang, kalah, dan main lagi",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 huruf, batas, menang, kalah, dan main lagi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan regresi dua putaran; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 32,
          "project": 2,
          "phase": 4,
          "title": "Presentasi: Tebak Angka",
          "target": "Mampu menjelaskan dan menerapkan presentasi game angka",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jelaskan parameter, return, serta aturan kesempatan. Minta prediksi sebelum menjalankan dan bandingkan dengan pengguna mengikuti readme tanpa bantuan",
          "practice": "Jelaskan parameter, return, serta aturan kesempatan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Pengguna mengikuti README tanpa bantuan",
          "fault": "Main ulang membawa pencacah putaran sebelumnya",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-pemula-S32-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jelaskan parameter, return, serta aturan kesempatan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Tebak Angka 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Jelaskan parameter, return, serta aturan kesempatan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 33,
          "project": 3,
          "phase": 1,
          "title": "List, indeks, append() dan len()",
          "target": "Panjang list berubah dari 3 menjadi 4; tiga data awal tetap ada.",
          "demo": "Tunjukkan satu contoh kecil: Susun tiga nama transaksi, baca satu indeks, tambahkan transaksi keempat, dan periksa len(). Minta siswa memprediksi hasil.",
          "practice": "Susun tiga nama transaksi, baca satu indeks, tambahkan transaksi keempat, dan periksa len().",
          "check": "Panjang list berubah dari 3 menjadi 4; tiga data awal tetap ada.",
          "fault": "Data awal tertimpa ketika menambah elemen.",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan indeks; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S33-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Susun tiga nama transaksi, baca satu indeks, tambahkan transaksi keempat, dan periksa len().",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Susun tiga nama transaksi, baca satu indeks, tambahkan transaksi keempat, dan periksa len().",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan indeks; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 34,
          "project": 3,
          "phase": 1,
          "title": "Tantangan daftar belanja",
          "target": "Siswa menambah barang pada data baru tanpa menyalin contoh transaksi.",
          "demo": "Tunjukkan satu contoh kecil: Buat daftar belanja pilihanmu; tambahkan satu barang dan jelaskan indeks sebelum dan sesudahnya. Minta siswa memprediksi hasil.",
          "practice": "Buat daftar belanja pilihanmu; tambahkan satu barang dan jelaskan indeks sebelum dan sesudahnya.",
          "check": "Siswa menambah barang pada data baru tanpa menyalin contoh transaksi.",
          "fault": "Data awal tertimpa ketika menambah elemen.",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan append() dan len(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S34-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat daftar belanja pilihanmu; tambahkan satu barang dan jelaskan indeks sebelum dan sesudahnya.",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 daftar belanja pilihanmu; tambahkan satu barang dan jelaskan indeks sebelum dan sesudahnya.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan append() dan len(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 35,
          "project": 3,
          "phase": 1,
          "title": "Dictionary dan key",
          "target": "Mampu menjelaskan dan menerapkan dictionary dan key",
          "demo": "Di VS Code, peragakan contoh minimum untuk Beri field jenis, nama, dan nominal pada transaksi. Minta prediksi sebelum menjalankan dan bandingkan dengan field diakses dengan nama yang konsisten",
          "practice": "Beri field jenis, nama, dan nominal pada transaksi",
          "check": "Field diakses dengan nama yang konsisten",
          "fault": "Indeks list tertukar dengan nama field dictionary",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dictionary dan key; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S35-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Beri field jenis, nama, dan nominal pada transaksi",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Beri field jenis, nama, dan nominal pada transaksi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dictionary dan key; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 36,
          "project": 3,
          "phase": 1,
          "title": "List berisi dictionary",
          "target": "Mampu menjelaskan dan menerapkan list berisi dictionary",
          "demo": "Di VS Code, peragakan contoh minimum untuk Susun tiga transaksi sintetis dan tampilkan dengan loop. Minta prediksi sebelum menjalankan dan bandingkan dengan setiap baris memiliki label yang benar",
          "practice": "Susun tiga transaksi sintetis dan tampilkan dengan loop",
          "check": "Setiap baris memiliki label yang benar",
          "fault": "Indeks list tertukar dengan nama field dictionary",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list berisi dictionary; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S36-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Susun tiga transaksi sintetis dan tampilkan dengan loop",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga transaksi sintetis dan tampilkan dengan loop",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list berisi dictionary; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 37,
          "project": 3,
          "phase": 2,
          "title": "Fungsi hitung saldo",
          "target": "Mampu menjelaskan dan menerapkan fungsi hitung saldo",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jumlahkan pemasukan dan kurangi pengeluaran. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh 50000,10000,5000 menghasilkan 35000",
          "practice": "Jumlahkan pemasukan dan kurangi pengeluaran",
          "check": "Contoh 50000,10000,5000 menghasilkan 35000",
          "fault": "Pengeluaran ditambah ke saldo",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi hitung saldo; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S37-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jumlahkan pemasukan dan kurangi pengeluaran",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Jumlahkan pemasukan dan kurangi pengeluaran",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi hitung saldo; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 38,
          "project": 3,
          "phase": 2,
          "title": "Nominal rupiah integer",
          "target": "Mampu menjelaskan dan menerapkan nominal rupiah integer",
          "demo": "Di VS Code, peragakan contoh minimum untuk Validasi int positif serta jenis transaksi. Minta prediksi sebelum menjalankan dan bandingkan dengan negatif, nol, dan huruf ditolak",
          "practice": "Validasi int positif serta jenis transaksi",
          "check": "Negatif, nol, dan huruf ditolak",
          "fault": "Pengeluaran ditambah ke saldo",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan nominal rupiah integer; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S38-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Validasi int positif serta jenis transaksi",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Validasi int positif serta jenis transaksi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan nominal rupiah integer; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 39,
          "project": 3,
          "phase": 2,
          "title": "Menu tambah dan daftar",
          "target": "Mampu menjelaskan dan menerapkan menu tambah dan daftar",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan fungsi data dengan input terminal. Minta prediksi sebelum menjalankan dan bandingkan dengan data baru terlihat tanpa menyalin menu",
          "practice": "Hubungkan fungsi data dengan input terminal",
          "check": "Data baru terlihat tanpa menyalin menu",
          "fault": "Pengeluaran ditambah ke saldo",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu tambah dan daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S39-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan fungsi data dengan input terminal",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan fungsi data dengan input terminal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu tambah dan daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 40,
          "project": 3,
          "phase": 2,
          "title": "Kasus daftar kosong",
          "target": "Mampu menjelaskan dan menerapkan kasus daftar kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan pesan dan saldo awal nol. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak terjadi akses indeks yang tidak ada",
          "practice": "Tampilkan pesan dan saldo awal nol",
          "check": "Tidak terjadi akses indeks yang tidak ada",
          "fault": "Pengeluaran ditambah ke saldo",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus daftar kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S40-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan pesan dan saldo awal nol",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan pesan dan saldo awal nol",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus daftar kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 41,
          "project": 3,
          "phase": 3,
          "title": "File dan pathlib",
          "target": "Mampu menjelaskan dan menerapkan file dan pathlib",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan lokasi data relatif ke file program. Minta prediksi sebelum menjalankan dan bandingkan dengan lokasi dapat dijelaskan dari terminal berbeda",
          "practice": "Tetapkan lokasi data relatif ke file program",
          "check": "Lokasi dapat dijelaskan dari terminal berbeda",
          "fault": "Lokasi file bergantung pada folder terminal",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file dan pathlib; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S41-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan lokasi data relatif ke file program",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan lokasi data relatif ke file program",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file dan pathlib; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 42,
          "project": 3,
          "phase": 3,
          "title": "with open dan encoding",
          "target": "Mampu menjelaskan dan menerapkan with open dan encoding",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tulis serta baca teks UTF-8 latihan. Minta prediksi sebelum menjalankan dan bandingkan dengan file tertutup dan teks dapat dibaca kembali",
          "practice": "Tulis serta baca teks UTF-8 latihan",
          "check": "File tertutup dan teks dapat dibaca kembali",
          "fault": "Lokasi file bergantung pada folder terminal",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan with open dan encoding; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S42-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis serta baca teks UTF-8 latihan",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tulis serta baca teks UTF-8 latihan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan with open dan encoding; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 43,
          "project": 3,
          "phase": 3,
          "title": "json.dump()",
          "target": "Mampu menjelaskan dan menerapkan json.dump()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan list transaksi sebagai JSON. Minta prediksi sebelum menjalankan dan bandingkan dengan struktur dapat diperiksa di explorer",
          "practice": "Simpan tiga transaksi menjadi JSON; ubah satu nominal, simpan salinan baru dan bandingkan isi kedua file teks.",
          "check": "Dua file memuat nominal sesuai prediksi dan file awal tetap utuh.",
          "fault": "Lokasi file bergantung pada folder terminal",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json.dump(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S43-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan tiga transaksi menjadi JSON; ubah satu nominal, simpan salinan baru dan bandingkan isi kedua file teks.",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga transaksi menjadi JSON; ubah satu nominal, simpan salinan baru dan bandingkan isi kedua file teks.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json.dump(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 44,
          "project": 3,
          "phase": 3,
          "title": "json.load()",
          "target": "Mampu menjelaskan dan menerapkan json.load()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Muat data dan hitung saldo ulang. Minta prediksi sebelum menjalankan dan bandingkan dengan jumlah serta saldo sama dengan sebelum ditutup",
          "practice": "Muat data dan hitung saldo ulang",
          "check": "Jumlah serta saldo sama dengan sebelum ditutup",
          "fault": "Lokasi file bergantung pada folder terminal",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json.load(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S44-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Muat data dan hitung saldo ulang",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Muat data dan hitung saldo ulang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json.load(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 45,
          "project": 3,
          "phase": 4,
          "title": "File belum ada dan JSON rusak",
          "target": "File belum ada memulai data baru; file rusak memberi pesan dan tidak ditimpa.",
          "demo": "Tunjukkan satu contoh kecil: Pada salinan data, bandingkan file yang belum dibuat dengan file JSON yang isinya rusak. Minta siswa memprediksi hasil.",
          "practice": "Pada salinan data, bandingkan file yang belum dibuat dengan file JSON yang isinya rusak.",
          "check": "File belum ada memulai data baru; file rusak memberi pesan dan tidak ditimpa.",
          "fault": "JSON rusak dianggap data kosong lalu tersimpan menimpa sumber.",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filenotfounderror; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S45-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pada salinan data, bandingkan file yang belum dibuat dengan file JSON yang isinya rusak.",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 data, bandingkan file yang belum dibuat dengan file JSON yang isinya rusak.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filenotfounderror; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 46,
          "project": 3,
          "phase": 4,
          "title": "Praktik pemulihan data",
          "target": "Cadangan tidak berubah; data pulih dan saldo sesuai hitungan manual.",
          "demo": "Tunjukkan satu contoh kecil: Buat cadangan JSON, rusakkan salinan, lalu pulihkan cadangan dan buktikan saldo tetap sama. Minta siswa memprediksi hasil.",
          "practice": "Buat cadangan JSON, rusakkan salinan, lalu pulihkan cadangan dan buktikan saldo tetap sama.",
          "check": "Cadangan tidak berubah; data pulih dan saldo sesuai hitungan manual.",
          "fault": "JSON rusak dianggap data kosong lalu tersimpan menimpa sumber.",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan jsondecodeerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S46-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat cadangan JSON, rusakkan salinan, lalu pulihkan cadangan dan buktikan saldo tetap sama.",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 cadangan JSON, rusakkan salinan, lalu pulihkan cadangan dan buktikan saldo tetap sama.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan jsondecodeerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 47,
          "project": 3,
          "phase": 4,
          "title": "Uji simpan dan buka ulang",
          "target": "Mampu menjelaskan dan menerapkan uji simpan dan buka ulang",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan dua kali dengan data sintetis berbeda. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada transaksi ganda setelah muat",
          "practice": "Jalankan dua kali dengan data sintetis berbeda",
          "check": "Tidak ada transaksi ganda setelah muat",
          "fault": "JSON rusak disamakan dengan daftar kosong lalu disimpan otomatis",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji simpan dan buka ulang; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S47-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan dua kali dengan data sintetis berbeda",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 dua kali dengan data sintetis berbeda",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji simpan dan buka ulang; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 48,
          "project": 3,
          "phase": 4,
          "title": "Presentasi: Catatan Uang Saku",
          "target": "Mampu menjelaskan dan menerapkan presentasi uang saku",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan saldo dan jelaskan lokasi data. Minta prediksi sebelum menjalankan dan bandingkan dengan readme memuat cara simpan serta pemulihan",
          "practice": "Demonstrasikan saldo dan jelaskan lokasi data Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "README memuat cara simpan serta pemulihan",
          "fault": "JSON rusak disamakan dengan daftar kosong lalu disimpan otomatis",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-pemula-S48-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan saldo dan jelaskan lokasi data Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Catatan Uang Saku 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan saldo dan jelaskan lokasi data Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 49,
          "project": 4,
          "phase": 1,
          "title": "Brief pengguna tugas",
          "target": "Mampu menjelaskan dan menerapkan brief pengguna tugas",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Tulis tiga aktivitas pengguna dan batas fitur. Minta prediksi sebelum menjalankan dan bandingkan dengan kriteria selesai dapat diuji",
          "practice": "Tulis tiga aktivitas pengguna dan batas fitur",
          "check": "Kriteria selesai dapat diuji",
          "fault": "Indeks hasil pencarian dianggap ID data utama",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief pengguna tugas; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S49-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis tiga aktivitas pengguna dan batas fitur",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga aktivitas pengguna dan batas fitur",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief pengguna tugas; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 50,
          "project": 4,
          "phase": 1,
          "title": "Sketsa menu terminal",
          "target": "Mampu menjelaskan dan menerapkan sketsa menu terminal",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gambar alur tambah, cari, selesai, dan keluar. Minta prediksi sebelum menjalankan dan bandingkan dengan setiap menu mempunyai jalan kembali",
          "practice": "Gambar alur tambah, cari, selesai, dan keluar",
          "check": "Setiap menu mempunyai jalan kembali",
          "fault": "Indeks hasil pencarian dianggap ID data utama",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa menu terminal; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S50-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Gambar alur tambah, cari, selesai, dan keluar",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Gambar alur tambah, cari, selesai, dan keluar",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa menu terminal; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 51,
          "project": 4,
          "phase": 1,
          "title": "Model ID dan status",
          "target": "Mampu menjelaskan dan menerapkan model id dan status",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat dictionary tugas dengan ID unik serta boolean. Minta prediksi sebelum menjalankan dan bandingkan dengan dua tugas berjudul sama tetap dibedakan",
          "practice": "Buat dictionary tugas dengan ID unik serta boolean",
          "check": "Dua tugas berjudul sama tetap dibedakan",
          "fault": "Indeks hasil pencarian dianggap ID data utama",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model id dan status; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S51-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat dictionary tugas dengan ID unik serta boolean",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 dictionary tugas dengan ID unik serta boolean",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model id dan status; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 52,
          "project": 4,
          "phase": 1,
          "title": "Fungsi pencarian",
          "target": "Mampu menjelaskan dan menerapkan fungsi pencarian",
          "demo": "Di VS Code, peragakan contoh minimum untuk Cari tugas dari ID dan tangani None. Minta prediksi sebelum menjalankan dan bandingkan dengan id salah tidak mengubah tugas lain",
          "practice": "Cari tugas dari ID dan tangani None",
          "check": "ID salah tidak mengubah tugas lain",
          "fault": "Indeks hasil pencarian dianggap ID data utama",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi pencarian; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S52-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Cari tugas dari ID dan tangani None",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Cari tugas dari ID dan tangani None",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi pencarian; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 53,
          "project": 4,
          "phase": 2,
          "title": "Tambah tervalidasi",
          "target": "Mampu menjelaskan dan menerapkan tambah tervalidasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak judul kosong dan hasil strip kosong. Minta prediksi sebelum menjalankan dan bandingkan dengan satu input valid menambah satu tugas",
          "practice": "Tolak judul kosong dan hasil strip kosong",
          "check": "Satu input valid menambah satu tugas",
          "fault": "Menandai selesai malah menambah tugas baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tambah tervalidasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S53-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tolak judul kosong dan hasil strip kosong",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak judul kosong dan hasil strip kosong",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tambah tervalidasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 54,
          "project": 4,
          "phase": 2,
          "title": "Pencarian kata",
          "target": "Mampu menjelaskan dan menerapkan pencarian kata",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bandingkan judul tanpa membedakan huruf besar. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil kosong memiliki pesan jelas",
          "practice": "Bandingkan judul tanpa membedakan huruf besar",
          "check": "Hasil kosong memiliki pesan jelas",
          "fault": "Menandai selesai malah menambah tugas baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian kata; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S54-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bandingkan judul tanpa membedakan huruf besar",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 judul tanpa membedakan huruf besar",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian kata; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 55,
          "project": 4,
          "phase": 2,
          "title": "Tandai selesai",
          "target": "Mampu menjelaskan dan menerapkan tandai selesai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ubah boolean tugas yang dipilih. Minta prediksi sebelum menjalankan dan bandingkan dengan jumlah data tetap setelah status berubah",
          "practice": "Ubah boolean tugas yang dipilih",
          "check": "Jumlah data tetap setelah status berubah",
          "fault": "Menandai selesai malah menambah tugas baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tandai selesai; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S55-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Ubah boolean tugas yang dipilih",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 boolean tugas yang dipilih",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tandai selesai; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 56,
          "project": 4,
          "phase": 2,
          "title": "Ringkasan tugas",
          "target": "Mampu menjelaskan dan menerapkan ringkasan tugas",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung selesai dan belum selesai dengan loop. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh satu dari tiga dapat diverifikasi",
          "practice": "Hitung selesai dan belum selesai dengan loop",
          "check": "Contoh satu dari tiga dapat diverifikasi",
          "fault": "Menandai selesai malah menambah tugas baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan tugas; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S56-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung selesai dan belum selesai dengan loop",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung selesai dan belum selesai dengan loop",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan tugas; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 57,
          "project": 4,
          "phase": 3,
          "title": "Integrasi menu",
          "target": "Mampu menjelaskan dan menerapkan integrasi menu",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan fungsi yang sudah diuji ke pilihan pengguna. Minta prediksi sebelum menjalankan dan bandingkan dengan keluar dari submenu tidak menutup aplikasi",
          "practice": "Hubungkan fungsi yang sudah diuji ke pilihan pengguna",
          "check": "Keluar dari submenu tidak menutup aplikasi",
          "fault": "Data kosong tersimpan menimpa data yang belum dimuat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan integrasi menu; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S57-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan fungsi yang sudah diuji ke pilihan pengguna",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Hubungkan fungsi yang sudah diuji ke pilihan pengguna",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan integrasi menu; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 30,
              "max": 35,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 58,
          "project": 4,
          "phase": 3,
          "title": "Simpan JSON",
          "target": "Mampu menjelaskan dan menerapkan simpan json",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan ID, judul, dan boolean dengan struktur tetap. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber file dapat diperiksa",
          "practice": "Simpan ID, judul, dan boolean dengan struktur tetap",
          "check": "Sumber file dapat diperiksa",
          "fault": "Data kosong tersimpan menimpa data yang belum dimuat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan simpan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S58-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan ID, judul, dan boolean dengan struktur tetap",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 ID, judul, dan boolean dengan struktur tetap",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan simpan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 59,
          "project": 4,
          "phase": 3,
          "title": "Muat dan lanjutkan",
          "target": "Mampu menjelaskan dan menerapkan muat dan lanjutkan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Muat data sebelum menambah tugas baru. Minta prediksi sebelum menjalankan dan bandingkan dengan id baru tidak bertabrakan dengan id lama",
          "practice": "Muat data sebelum menambah tugas baru",
          "check": "ID baru tidak bertabrakan dengan ID lama",
          "fault": "Data kosong tersimpan menimpa data yang belum dimuat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan lanjutkan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S59-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Muat data sebelum menambah tugas baru",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Muat data sebelum menambah tugas baru",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan lanjutkan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 60,
          "project": 4,
          "phase": 3,
          "title": "Pemulihan kesalahan",
          "target": "Mampu menjelaskan dan menerapkan pemulihan kesalahan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani input menu salah dan data rusak pada salinan. Minta prediksi sebelum menjalankan dan bandingkan dengan pesan jelas dan data asal tetap ada",
          "practice": "Tangani input menu salah dan data rusak pada salinan",
          "check": "Pesan jelas dan data asal tetap ada",
          "fault": "Data kosong tersimpan menimpa data yang belum dimuat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemulihan kesalahan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S60-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani input menu salah dan data rusak pada salinan",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Tangani input menu salah dan data rusak pada salinan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemulihan kesalahan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 61,
          "project": 4,
          "phase": 4,
          "title": "Uji fungsi sederhana",
          "target": "Mampu menjelaskan dan menerapkan uji fungsi sederhana",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bandingkan hasil fungsi dengan nilai harapan manual. Minta prediksi sebelum menjalankan dan bandingkan dengan benar dan salah dicatat terpisah",
          "practice": "Bandingkan hasil fungsi dengan nilai harapan manual",
          "check": "Benar dan salah dicatat terpisah",
          "fault": "Kasus tugas tidak ditemukan membuat program berhenti",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi sederhana; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S61-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bandingkan hasil fungsi dengan nilai harapan manual",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 hasil fungsi dengan nilai harapan manual",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi sederhana; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 62,
          "project": 4,
          "phase": 4,
          "title": "Uji pengguna",
          "target": "Mampu menjelaskan dan menerapkan uji pengguna",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman menambah, mencari, dan menyelesaikan tugas. Minta prediksi sebelum menjalankan dan bandingkan dengan kesulitan pengguna tercatat",
          "practice": "Minta teman menambah, mencari, dan menyelesaikan tugas",
          "check": "Kesulitan pengguna tercatat",
          "fault": "Kasus tugas tidak ditemukan membuat program berhenti",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S62-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman menambah, mencari, dan menyelesaikan tugas",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman menambah, mencari, dan menyelesaikan tugas",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 63,
          "project": 4,
          "phase": 4,
          "title": "Revisi dan dokumentasi",
          "target": "Mampu menjelaskan dan menerapkan revisi dan dokumentasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbaiki satu masalah lalu ulangi skenario. Minta prediksi sebelum menjalankan dan bandingkan dengan readme cocok dengan aplikasi terakhir",
          "practice": "Perbaiki satu masalah lalu ulangi skenario",
          "check": "README cocok dengan aplikasi terakhir",
          "fault": "Kasus tugas tidak ditemukan membuat program berhenti",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan revisi dan dokumentasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-pemula-S63-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Perbaiki satu masalah lalu ulangi skenario",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Perbaiki satu masalah lalu ulangi skenario",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan revisi dan dokumentasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 64,
          "project": 4,
          "phase": 4,
          "title": "Presentasi: Pengatur Tugas Sekolah",
          "target": "Mampu menjelaskan dan menerapkan presentasi tugas sekolah",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan aplikasi dari kondisi awal dan buka ulang. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan fungsi serta bukti revisi",
          "practice": "Demonstrasikan aplikasi dari kondisi awal dan buka ulang Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menjelaskan fungsi serta bukti revisi",
          "fault": "Kasus tugas tidak ditemukan membuat program berhenti",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-pemula-S64-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan aplikasi dari kondisi awal dan buka ulang Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Sekolah 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan aplikasi dari kondisi awal dan buka ulang Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        }
      ],
      "toolRevision": "tools-2026-10-21",
      "toolIds": [
        "vscode"
      ],
      "setup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
      "curriculumRevision": "python-apps-2026-10-24-v1",
      "learningApproach": "Mentor memberi contoh kecil; siswa memprediksi, mencoba variasi, lalu menjelaskan dan memperbaiki hasil."
    },
    {
      "id": "smp-lanjutan",
      "age": "SMP",
      "level": "lanjutan",
      "name": "SMP · Lanjutan",
      "entry": "Dapat membaca input, memakai kondisi dan loop, menulis fungsi berparameter dengan return, mengolah list/dictionary, serta menyimpan dan memuat JSON. Audit dua sesi awal memberi penguatan terarah.",
      "target": "Merancang fungsi rekomendasi dan simulasi kecil, membuktikan hasil dengan pengujian fungsi sederhana, lalu membuat aplikasi Tkinter satu jendela dengan callback dan penyimpanan JSON.",
      "scope": "64 sesi × 1 jam; rekomendasi berbasis aturan dan simulasi satu loket, kemudian kalkulator serta pelacak kebiasaan satu jendela. Data 3–10 entri, assert fungsi sederhana, JSON lokal; tanpa database, akun, atau backtracking wajib. Semua file dibuka sebagai satu folder proyek di VS Code dengan interpreter terpilih, terminal terintegrasi, serta debugger.",
      "adaptation": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
      "projects": [
        {
          "name": "Mesin Rekomendasi Buku",
          "topic": "Filter, peringkat, dan pengujian fungsi",
          "out": "Pemberi rekomendasi terminal yang menjelaskan skor dari preferensi pengguna.",
          "steps": [
            "Audit fungsi dan list/dictionary, lalu bedakan filter wajib dengan skor preferensi",
            "Tulis fungsi skor dan sorted() dengan pemecah seri yang dapat dijelaskan",
            "Pelajari CSV, konversi nilai, dan assert pada fungsi kecil sebelum impor data",
            "Uji bobot baru dan preferensi kosong, lalu jelaskan batas rekomendasi berbasis aturan"
          ],
          "checks": [
            "Filter wajib tidak dilanggar oleh bobot tinggi",
            "Peringkat serta alasan cocok dengan hitungan manual",
            "CSV diparse sebagai teks lalu field angka divalidasi",
            "Bobot baru dapat diterapkan tanpa menyalin fungsi"
          ],
          "faults": [
            "Syarat wajib diperlakukan sebagai bonus skor",
            "Pemecah seri berubah antarputaran",
            "Angka CSV dibandingkan sebagai teks",
            "Fungsi mengubah data sumber tanpa sengaja"
          ],
          "recipe": "Buku A petualangan singkat, B sains panjang, C petualangan panjang. Bobot genre 2 dan singkat 1 memberi A=3,C=2,B=0 sebelum filter. Mulai dari list kecil, baru CSV. Assert memeriksa fungsi tanpa input; unittest bukan prasyarat SMP.",
          "art": "python-smp-lanjutan-p1-apps.svg",
          "number": 1,
          "start": 1,
          "end": 16,
          "novelty": "Fondasi fungsi dan data dipakai untuk merancang keputusan yang dapat dijelaskan, bukan mengulang kuis atau menambah menu pada proyek Pemula.",
          "decisions": [
            "Tetapkan bobot serta aturan hasil seri.",
            "Pilih respons ketika semua buku gagal filter."
          ],
          "transfer": "Penguji mengganti bobot serta satu larangan; prediksi dan buktikan urutan baru tanpa mengubah fungsi inti.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Audit fungsi dan list/dictionary, lalu bedakan filter wajib dengan skor preferensi",
              "check": "Filter wajib tidak dilanggar oleh bobot tinggi",
              "fault": "Syarat wajib diperlakukan sebagai bonus skor"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Tulis fungsi skor dan sorted() dengan pemecah seri yang dapat dijelaskan",
              "check": "Peringkat serta alasan cocok dengan hitungan manual",
              "fault": "Pemecah seri berubah antarputaran"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Pelajari CSV, konversi nilai, dan assert pada fungsi kecil sebelum impor data",
              "check": "CSV diparse sebagai teks lalu field angka divalidasi",
              "fault": "Angka CSV dibandingkan sebagai teks"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji bobot baru dan preferensi kosong, lalu jelaskan batas rekomendasi berbasis aturan",
              "check": "Bobot baru dapat diterapkan tanpa menyalin fungsi",
              "fault": "Fungsi mengubah data sumber tanpa sengaja"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Pemberi rekomendasi terminal yang menjelaskan skor dari preferensi pengguna.",
          "minimumChecks": [
            "Filter wajib tidak dilanggar oleh bobot tinggi",
            "Peringkat serta alasan cocok dengan hitungan manual",
            "CSV diparse sebagai teks lalu field angka divalidasi"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Mesin Rekomendasi Buku dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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": "Simulator Antrean Sederhana",
          "topic": "Model waktu dan simulasi FIFO",
          "out": "Simulator satu loket yang menghitung waktu mulai, selesai, dan tunggu dari data sintetis.",
          "steps": [
            "Modelkan kedatangan dan durasi, lalu hitung tiga pengunjung secara manual",
            "Bangun simulasi satu loket melalui max(), loop, dan fungsi",
            "Hitung rata-rata tunggu dan validasi data kosong, seri, serta durasi salah",
            "Bandingkan dua konfigurasi durasi dan jelaskan asumsi simulasi"
          ],
          "checks": [
            "Satuan waktu serta urutan kedatangan tertulis",
            "Loket tidak melayani sebelum pengunjung datang",
            "Rata-rata benar dan daftar kosong ditangani",
            "Perubahan satu parameter dijelaskan dengan bukti"
          ],
          "faults": [
            "Durasi layanan disamakan dengan waktu selesai",
            "Waktu mulai lebih kecil dari waktu kedatangan",
            "Rata-rata membagi nol pada daftar kosong",
            "Perbandingan memakai data awal yang berbeda"
          ],
          "recipe": "Kedatangan 0,1,4 dan durasi 4,2,1 menghasilkan mulai 0,4,6, selesai 4,6,7, serta tunggu 0,3,2. Mulai dengan satu loket; beberapa loket menjadi pengayaan setelah target inti. Simulasi angka, bukan GUI bergerak.",
          "art": "python-smp-lanjutan-p2-apps.svg",
          "number": 2,
          "start": 17,
          "end": 32,
          "novelty": "Siswa membangun model perubahan waktu dan membandingkan skenario, berbeda dari pencatatan transaksi atau daftar tugas pada program Pemula.",
          "decisions": [
            "Tentukan pemecah seri kedatangan.",
            "Pilih satu parameter layanan untuk dibandingkan."
          ],
          "transfer": "Mentor memberikan satu pengunjung datang saat loket menganggur; hitung manual lalu buktikan waktu tunggu dan selesai.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Modelkan kedatangan dan durasi, lalu hitung tiga pengunjung secara manual",
              "check": "Satuan waktu serta urutan kedatangan tertulis",
              "fault": "Durasi layanan disamakan dengan waktu selesai"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Bangun simulasi satu loket melalui max(), loop, dan fungsi",
              "check": "Loket tidak melayani sebelum pengunjung datang",
              "fault": "Waktu mulai lebih kecil dari waktu kedatangan"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Hitung rata-rata tunggu dan validasi data kosong, seri, serta durasi salah",
              "check": "Rata-rata benar dan daftar kosong ditangani",
              "fault": "Rata-rata membagi nol pada daftar kosong"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Bandingkan dua konfigurasi durasi dan jelaskan asumsi simulasi",
              "check": "Perubahan satu parameter dijelaskan dengan bukti",
              "fault": "Perbandingan memakai data awal yang berbeda"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Simulator satu loket yang menghitung waktu mulai, selesai, dan tunggu dari data sintetis.",
          "minimumChecks": [
            "Satuan waktu serta urutan kedatangan tertulis",
            "Loket tidak melayani sebelum pengunjung datang",
            "Rata-rata benar dan daftar kosong ditangani"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Simulator Antrean Sederhana dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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": "Kalkulator Interaktif",
          "topic": "Tkinter dan event-driven programming",
          "out": "Aplikasi satu jendela yang menghitung dua angka melalui input, tombol, dan label hasil.",
          "steps": [
            "Uji Tkinter pada perangkat, kenali Tk, ttk, grid(), dan mainloop()",
            "Hubungkan Entry dan Button melalui callback yang memakai fungsi hitung terpisah",
            "Validasi angka, pembagian nol, dan pesan kesalahan tanpa menutup jendela",
            "Uji tombol berulang, reset, serta fungsi hitung melalui assert"
          ],
          "checks": [
            "Satu jendela tampil dan tata letaknya terbaca",
            "Satu klik memanggil satu callback dan hasil benar",
            "Input salah serta pembagian nol memberi pesan",
            "Reset mengosongkan input dan aplikasi tetap responsif"
          ],
          "faults": [
            "while atau input() memblokir event loop",
            "command diisi hasil fungsi alih-alih callback",
            "Konversi salah menutup aplikasi",
            "Reset menambah widget atau binding baru"
          ],
          "recipe": "Jalankan python -m tkinter sebelum kelas. Buat fungsi hitung(a,b,operasi), lalu callback membaca Entry, memvalidasi, memanggil fungsi, dan memperbarui label. Gunakan command=handler, bukan handler(). Uji 6+2=8 dan pembagian nol. Satu jendela, tanpa database.",
          "art": "python-smp-lanjutan-p3-apps.svg",
          "number": 3,
          "start": 33,
          "end": 48,
          "novelty": "Logika fungsi dipakai melalui kejadian klik dan state tampilan; siswa mempelajari model aplikasi berjendela yang belum dipakai pada Pemula.",
          "decisions": [
            "Pilih pesan untuk input kosong dan pembagian nol.",
            "Tentukan kapan hasil lama perlu dikosongkan."
          ],
          "transfer": "Penguji meminta angka desimal serta klik reset di tengah penggunaan; aplikasi harus tetap memberi hasil dan state yang benar.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Uji Tkinter pada perangkat, kenali Tk, ttk, grid(), dan mainloop()",
              "check": "Satu jendela tampil dan tata letaknya terbaca",
              "fault": "while atau input() memblokir event loop"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Hubungkan Entry dan Button melalui callback yang memakai fungsi hitung terpisah",
              "check": "Satu klik memanggil satu callback dan hasil benar",
              "fault": "command diisi hasil fungsi alih-alih callback"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Validasi angka, pembagian nol, dan pesan kesalahan tanpa menutup jendela",
              "check": "Input salah serta pembagian nol memberi pesan",
              "fault": "Konversi salah menutup aplikasi"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji tombol berulang, reset, serta fungsi hitung melalui assert",
              "check": "Reset mengosongkan input dan aplikasi tetap responsif",
              "fault": "Reset menambah widget atau binding baru"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi satu jendela yang menghitung dua angka melalui input, tombol, dan label hasil.",
          "minimumChecks": [
            "Satu jendela tampil dan tata letaknya terbaca",
            "Satu klik memanggil satu callback dan hasil benar",
            "Input salah serta pembagian nol memberi pesan"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Kalkulator Interaktif dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Kalkulator 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."
        },
        {
          "name": "Pelacak Kebiasaan Belajar",
          "topic": "Aplikasi satu jendela dengan JSON",
          "out": "Pelacak tiga kebiasaan belajar dengan checklist, ringkasan, serta simpan-muat lokal.",
          "steps": [
            "Rancang tiga kebiasaan dan model boolean terpisah dari tampilan",
            "Buat checklist satu jendela dengan callback yang memperbarui data terpilih",
            "Simpan-muat JSON melalui tombol dan tangani data rusak tanpa menimpanya",
            "Uji buka ulang, perubahan satu kebiasaan, dan serahkan aplikasi dengan panduan"
          ],
          "checks": [
            "Setiap kebiasaan memiliki ID serta status sendiri",
            "Satu klik hanya mengubah kebiasaan terpilih",
            "Status serta ringkasan tetap sama setelah buka ulang",
            "Pengguna menjalankan brief baru dan menjelaskan bukti revisi"
          ],
          "faults": [
            "Beberapa checkbox berbagi satu variabel",
            "Callback menangkap ID terakhir pada loop",
            "Data rusak otomatis diganti kosong",
            "Ringkasan tidak disegarkan setelah muat"
          ],
          "recipe": "Tiga kebiasaan: membaca, latihan soal, merapikan catatan. Semua status false, lalu centang membaca sehingga ringkasan 1/3. Simpan dan muat kembali dengan nilai sama. Tidak ada kalender, akun, notifikasi, atau database. Ini prototype checklist satu periode; reset dilakukan lewat tombol eksplisit.",
          "art": "python-smp-lanjutan-p4-apps.svg",
          "number": 4,
          "start": 49,
          "end": 64,
          "novelty": "Proyek akhir berupa checklist interaktif dengan pemisahan state, callback, dan persistensi; siswa merancang aplikasi baru alih-alih merapikan menu tugas Pemula.",
          "decisions": [
            "Pilih label kebiasaan dan umpan balik ringkasan.",
            "Tentukan perilaku reset serta kapan data disimpan."
          ],
          "transfer": "Penguji mengganti satu nama kebiasaan dan memuat status lama; pertahankan identitas data melalui ID serta buktikan ringkasan benar.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Rancang tiga kebiasaan dan model boolean terpisah dari tampilan",
              "check": "Setiap kebiasaan memiliki ID serta status sendiri",
              "fault": "Beberapa checkbox berbagi satu variabel"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Buat checklist satu jendela dengan callback yang memperbarui data terpilih",
              "check": "Satu klik hanya mengubah kebiasaan terpilih",
              "fault": "Callback menangkap ID terakhir pada loop"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Simpan-muat JSON melalui tombol dan tangani data rusak tanpa menimpanya",
              "check": "Status serta ringkasan tetap sama setelah buka ulang",
              "fault": "Data rusak otomatis diganti kosong"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji buka ulang, perubahan satu kebiasaan, dan serahkan aplikasi dengan panduan",
              "check": "Pengguna menjalankan brief baru dan menjelaskan bukti revisi",
              "fault": "Ringkasan tidak disegarkan setelah muat"
            }
          ],
          "samplePath": "contoh/smp-lanjutan/app.py",
          "sampleReadme": "contoh/smp-lanjutan/README.md",
          "sampleTest": "contoh/smp-lanjutan/test_app.py",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Pelacak tiga kebiasaan belajar dengan checklist, ringkasan, serta simpan-muat lokal.",
          "minimumChecks": [
            "Setiap kebiasaan memiliki ID serta status sendiri",
            "Satu klik hanya mengubah kebiasaan terpilih",
            "Status serta ringkasan tetap sama setelah buka ulang"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Pelacak Kebiasaan Belajar dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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 fungsi dan data",
          "target": "Mampu menjelaskan dan menerapkan audit fungsi dan data",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Telusuri fungsi berparameter pada tiga buku. Minta prediksi sebelum menjalankan dan bandingkan dengan bekal fungsi serta dictionary dapat dijelaskan",
          "practice": "Telusuri fungsi berparameter pada tiga buku",
          "check": "Bekal fungsi serta dictionary dapat dijelaskan",
          "fault": "Syarat wajib diperlakukan sebagai bonus skor",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi dan data; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S01-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Telusuri fungsi berparameter pada tiga buku",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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 fungsi berparameter pada tiga buku",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi dan data; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Belajar orientasi alat dan simpan-buka ulang.",
              "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
            }
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "Peta preferensi pembaca",
          "target": "Mampu menjelaskan dan menerapkan peta preferensi pembaca",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bedakan syarat wajib dan preferensi bernilai. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh buku terlarang tidak lolos filter",
          "practice": "Bedakan syarat wajib dan preferensi bernilai",
          "check": "Contoh buku terlarang tidak lolos filter",
          "fault": "Syarat wajib diperlakukan sebagai bonus skor",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan peta preferensi pembaca; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S02-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bedakan syarat wajib dan preferensi bernilai",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Bedakan syarat wajib dan preferensi bernilai",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan peta preferensi pembaca; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 1,
          "title": "Aturan skor manual",
          "target": "Mampu menjelaskan dan menerapkan aturan skor manual",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung skor tiga buku pada kertas. Minta prediksi sebelum menjalankan dan bandingkan dengan a=3,c=2,b=0 pada konfigurasi contoh",
          "practice": "Hitung skor tiga buku pada kertas",
          "check": "A=3,C=2,B=0 pada konfigurasi contoh",
          "fault": "Syarat wajib diperlakukan sebagai bonus skor",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan aturan skor manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S03-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung skor tiga buku pada kertas",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung skor tiga buku pada kertas",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan aturan skor manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 1,
          "title": "Fungsi skor murni",
          "target": "Mampu menjelaskan dan menerapkan fungsi skor murni",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kembalikan angka serta alasan tanpa input terminal. Minta prediksi sebelum menjalankan dan bandingkan dengan dua pemanggilan memberi hasil sama",
          "practice": "Kembalikan angka serta alasan tanpa input terminal",
          "check": "Dua pemanggilan memberi hasil sama",
          "fault": "Syarat wajib diperlakukan sebagai bonus skor",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi skor murni; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S04-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kembalikan angka serta alasan tanpa input terminal",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kembalikan angka serta alasan tanpa input terminal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi skor murni; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 2,
          "title": "Filter buku",
          "target": "Mampu menjelaskan dan menerapkan filter buku",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pilih buku yang memenuhi syarat wajib. Minta prediksi sebelum menjalankan dan bandingkan dengan skor tinggi tidak meniadakan larangan",
          "practice": "Pilih buku yang memenuhi syarat wajib",
          "check": "Skor tinggi tidak meniadakan larangan",
          "fault": "Pemecah seri berubah antarputaran",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filter buku; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S05-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pilih buku yang memenuhi syarat wajib",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pilih buku yang memenuhi syarat wajib",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filter buku; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 2,
          "title": "sorted() dan key",
          "target": "Mampu menjelaskan dan menerapkan sorted() dan key",
          "demo": "Di VS Code, peragakan contoh minimum untuk Urutkan salinan berdasarkan skor. Minta prediksi sebelum menjalankan dan bandingkan dengan list asal tidak berubah",
          "practice": "Urutkan salinan berdasarkan skor",
          "check": "List asal tidak berubah",
          "fault": "Pemecah seri berubah antarputaran",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sorted() dan key; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S06-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Urutkan salinan berdasarkan skor",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Urutkan salinan berdasarkan skor",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sorted() dan key; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 2,
          "title": "Hasil seri dan ID",
          "target": "Mampu menjelaskan dan menerapkan hasil seri dan id",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan ID sebagai pemecah skor sama. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan seri dapat diprediksi",
          "practice": "Tetapkan ID sebagai pemecah skor sama",
          "check": "Urutan seri dapat diprediksi",
          "fault": "Pemecah seri berubah antarputaran",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hasil seri dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S07-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan ID sebagai pemecah skor sama",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan ID sebagai pemecah skor sama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hasil seri dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 2,
          "title": "Hasil tanpa kandidat",
          "target": "Mampu menjelaskan dan menerapkan hasil tanpa kandidat",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani semua buku gagal filter. Minta prediksi sebelum menjalankan dan bandingkan dengan pesan jelas tanpa mengakses elemen pertama",
          "practice": "Tangani semua buku gagal filter",
          "check": "Pesan jelas tanpa mengakses elemen pertama",
          "fault": "Pemecah seri berubah antarputaran",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hasil tanpa kandidat; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S08-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani semua buku gagal filter",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani semua buku gagal filter",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hasil tanpa kandidat; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 9,
          "project": 1,
          "phase": 3,
          "title": "Format CSV dan header",
          "target": "Mampu menjelaskan dan menerapkan format csv dan header",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca CSV sintetis menggunakan csv.DictReader. Minta prediksi sebelum menjalankan dan bandingkan dengan setiap kolom dikenali dari header",
          "practice": "Baca CSV sintetis menggunakan csv.DictReader",
          "check": "Setiap kolom dikenali dari header",
          "fault": "Angka CSV dibandingkan sebagai teks",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan format csv dan header; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S09-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca CSV sintetis menggunakan csv.DictReader",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 CSV sintetis menggunakan csv.DictReader",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan format csv dan header; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 10,
          "project": 1,
          "phase": 3,
          "title": "Konversi field CSV",
          "target": "Mampu menjelaskan dan menerapkan konversi field csv",
          "demo": "Di VS Code, peragakan contoh minimum untuk Konversi panjang halaman dan tangani nilai kosong. Minta prediksi sebelum menjalankan dan bandingkan dengan teks salah tidak lolos sebagai angka",
          "practice": "Konversi panjang halaman dan tangani nilai kosong",
          "check": "Teks salah tidak lolos sebagai angka",
          "fault": "Angka CSV dibandingkan sebagai teks",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi field csv; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S10-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Konversi panjang halaman dan tangani nilai kosong",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Konversi panjang halaman dan tangani nilai kosong",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi field csv; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 11,
          "project": 1,
          "phase": 3,
          "title": "Assert pada fungsi",
          "target": "Mampu menjelaskan dan menerapkan assert pada fungsi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tulis assert untuk skor, filter, dan hasil seri. Minta prediksi sebelum menjalankan dan bandingkan dengan satu kesalahan sengaja membuat assert gagal",
          "practice": "Tulis assert untuk skor, filter, dan hasil seri",
          "check": "Satu kesalahan sengaja membuat assert gagal",
          "fault": "Angka CSV dibandingkan sebagai teks",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert pada fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S11-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis assert untuk skor, filter, dan hasil seri",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tulis assert untuk skor, filter, dan hasil seri",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert pada fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 12,
          "project": 1,
          "phase": 3,
          "title": "Parsing dan logika",
          "target": "Mampu menjelaskan dan menerapkan parsing dan logika",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan pembaca CSV dari fungsi rekomendasi. Minta prediksi sebelum menjalankan dan bandingkan dengan fungsi diuji tanpa membaca file",
          "practice": "Pisahkan pembaca CSV dari fungsi rekomendasi",
          "check": "Fungsi diuji tanpa membaca file",
          "fault": "Angka CSV dibandingkan sebagai teks",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan parsing dan logika; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S12-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tetapkan bobot serta aturan hasil seri.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan pembaca CSV dari fungsi rekomendasi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan pembaca CSV dari fungsi rekomendasi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan parsing dan logika; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 13,
          "project": 1,
          "phase": 4,
          "title": "Preferensi kosong",
          "target": "Mampu menjelaskan dan menerapkan preferensi kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan hasil saat tidak ada preferensi. Minta prediksi sebelum menjalankan dan bandingkan dengan aturan tertulis cocok dengan keluaran",
          "practice": "Tetapkan hasil saat tidak ada preferensi",
          "check": "Aturan tertulis cocok dengan keluaran",
          "fault": "Fungsi mengubah data sumber tanpa sengaja",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan preferensi kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S13-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan hasil saat tidak ada preferensi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan hasil saat tidak ada preferensi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan preferensi kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 14,
          "project": 1,
          "phase": 4,
          "title": "Eksperimen bobot",
          "target": "Mampu menjelaskan dan menerapkan eksperimen bobot",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ubah satu bobot dan prediksi urutan baru. Minta prediksi sebelum menjalankan dan bandingkan dengan perubahan dapat ditelusuri",
          "practice": "Ubah satu bobot dan prediksi urutan baru",
          "check": "Perubahan dapat ditelusuri",
          "fault": "Fungsi mengubah data sumber tanpa sengaja",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan eksperimen bobot; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S14-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Ubah satu bobot dan prediksi urutan baru",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 satu bobot dan prediksi urutan baru",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan eksperimen bobot; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 15,
          "project": 1,
          "phase": 4,
          "title": "Uji pembaca baru",
          "target": "Mampu menjelaskan dan menerapkan uji pembaca baru",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman memberi preferensi berbeda. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil diverifikasi dengan hitungan manual",
          "practice": "Minta teman memberi preferensi berbeda",
          "check": "Hasil diverifikasi dengan hitungan manual",
          "fault": "Fungsi mengubah data sumber tanpa sengaja",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pembaca baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S15-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman memberi preferensi berbeda",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman memberi preferensi berbeda",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pembaca baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 16,
          "project": 1,
          "phase": 4,
          "title": "Presentasi: Mesin Rekomendasi Buku",
          "target": "Mampu menjelaskan dan menerapkan presentasi rekomendasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jelaskan aturan dan demonstrasikan brief baru. Minta prediksi sebelum menjalankan dan bandingkan dengan alasan hasil tidak mengklaim model ai",
          "practice": "Jelaskan aturan dan demonstrasikan brief baru Penguji mengganti bobot serta satu larangan; prediksi dan buktikan urutan baru tanpa mengubah fungsi inti. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Alasan hasil tidak mengklaim model AI",
          "fault": "Fungsi mengubah data sumber tanpa sengaja",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-lanjutan-S16-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika semua buku gagal filter.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jelaskan aturan dan demonstrasikan brief baru Penguji mengganti bobot serta satu larangan; prediksi dan buktikan urutan baru tanpa mengubah fungsi inti. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Mesin Rekomendasi Buku. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Jelaskan aturan dan demonstrasikan brief baru Penguji mengganti bobot serta satu larangan; prediksi dan buktikan urutan baru tanpa mengubah fungsi inti. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 17,
          "project": 2,
          "phase": 1,
          "title": "Brief satu loket",
          "target": "Mampu menjelaskan dan menerapkan brief satu loket",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Tuliskan asumsi FIFO serta satuan menit. Minta prediksi sebelum menjalankan dan bandingkan dengan aturan antrean tidak berubah saat diuji",
          "practice": "Tuliskan asumsi FIFO serta satuan menit",
          "check": "Aturan antrean tidak berubah saat diuji",
          "fault": "Durasi layanan disamakan dengan waktu selesai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief satu loket; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S17-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tuliskan asumsi FIFO serta satuan menit",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tuliskan asumsi FIFO serta satuan menit",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief satu loket; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 18,
          "project": 2,
          "phase": 1,
          "title": "Data kedatangan",
          "target": "Mampu menjelaskan dan menerapkan data kedatangan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Modelkan ID, datang, dan durasi tiga pengunjung. Minta prediksi sebelum menjalankan dan bandingkan dengan semua durasi positif",
          "practice": "Modelkan ID, datang, dan durasi tiga pengunjung",
          "check": "Semua durasi positif",
          "fault": "Durasi layanan disamakan dengan waktu selesai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan data kedatangan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S18-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Modelkan ID, datang, dan durasi tiga pengunjung",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Modelkan ID, datang, dan durasi tiga pengunjung",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan data kedatangan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 19,
          "project": 2,
          "phase": 1,
          "title": "Hitungan manual",
          "target": "Mampu menjelaskan dan menerapkan hitungan manual",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat tabel mulai, selesai, tunggu. Minta prediksi sebelum menjalankan dan bandingkan dengan tabel contoh menghasilkan tunggu 0,3,2",
          "practice": "Buat tabel mulai, selesai, tunggu",
          "check": "Tabel contoh menghasilkan tunggu 0,3,2",
          "fault": "Durasi layanan disamakan dengan waktu selesai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hitungan manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S19-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat tabel mulai, selesai, tunggu",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tabel mulai, selesai, tunggu",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan hitungan manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 20,
          "project": 2,
          "phase": 1,
          "title": "max() dan waktu mulai",
          "target": "Mampu menjelaskan dan menerapkan max() dan waktu mulai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung maksimum kedatangan dan loket tersedia. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak melayani sebelum datang",
          "practice": "Hitung maksimum kedatangan dan loket tersedia",
          "check": "Tidak melayani sebelum datang",
          "fault": "Durasi layanan disamakan dengan waktu selesai",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan max() dan waktu mulai; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S20-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung maksimum kedatangan dan loket tersedia",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung maksimum kedatangan dan loket tersedia",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan max() dan waktu mulai; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 21,
          "project": 2,
          "phase": 2,
          "title": "Loop simulasi",
          "target": "Mampu menjelaskan dan menerapkan loop simulasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbarui waktu loket setelah setiap pengunjung. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan hasil sesuai fifo",
          "practice": "Perbarui waktu loket setelah setiap pengunjung",
          "check": "Urutan hasil sesuai FIFO",
          "fault": "Waktu mulai lebih kecil dari waktu kedatangan",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan loop simulasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S21-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Perbarui waktu loket setelah setiap pengunjung",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Perbarui waktu loket setelah setiap pengunjung",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan loop simulasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 22,
          "project": 2,
          "phase": 2,
          "title": "Fungsi simulasi",
          "target": "Mampu menjelaskan dan menerapkan fungsi simulasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan data masuk dan daftar hasil. Minta prediksi sebelum menjalankan dan bandingkan dengan data masukan tetap utuh",
          "practice": "Pisahkan data masuk dan daftar hasil",
          "check": "Data masukan tetap utuh",
          "fault": "Waktu mulai lebih kecil dari waktu kedatangan",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi simulasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S22-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan data masuk dan daftar hasil",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan data masuk dan daftar hasil",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi simulasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 23,
          "project": 2,
          "phase": 2,
          "title": "Urutan dan seri",
          "target": "Mampu menjelaskan dan menerapkan urutan dan seri",
          "demo": "Di VS Code, peragakan contoh minimum untuk Urutkan salinan dengan ID untuk waktu datang sama. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil seri deterministik",
          "practice": "Urutkan salinan dengan ID untuk waktu datang sama",
          "check": "Hasil seri deterministik",
          "fault": "Waktu mulai lebih kecil dari waktu kedatangan",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan urutan dan seri; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S23-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Urutkan salinan dengan ID untuk waktu datang sama",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Urutkan salinan dengan ID untuk waktu datang sama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan urutan dan seri; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 24,
          "project": 2,
          "phase": 2,
          "title": "Rata-rata tunggu",
          "target": "Mampu menjelaskan dan menerapkan rata-rata tunggu",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung jumlah tunggu dibagi jumlah pengunjung. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh memberi 5/3 menit",
          "practice": "Hitung jumlah tunggu dibagi jumlah pengunjung",
          "check": "Contoh memberi 5/3 menit",
          "fault": "Waktu mulai lebih kecil dari waktu kedatangan",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rata-rata tunggu; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S24-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung jumlah tunggu dibagi jumlah pengunjung",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung jumlah tunggu dibagi jumlah pengunjung",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rata-rata tunggu; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 25,
          "project": 2,
          "phase": 3,
          "title": "Daftar kosong",
          "target": "Mampu menjelaskan dan menerapkan daftar kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan hasil kosong dan ringkasan nol. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak terjadi pembagian nol",
          "practice": "Tetapkan hasil kosong dan ringkasan nol",
          "check": "Tidak terjadi pembagian nol",
          "fault": "Rata-rata membagi nol pada daftar kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan daftar kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S25-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan hasil kosong dan ringkasan nol",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan hasil kosong dan ringkasan nol",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan daftar kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 26,
          "project": 2,
          "phase": 3,
          "title": "Durasi tidak valid",
          "target": "Mampu menjelaskan dan menerapkan durasi tidak valid",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak nol, negatif, dan teks salah. Minta prediksi sebelum menjalankan dan bandingkan dengan data salah tidak menghasilkan jadwal palsu",
          "practice": "Tolak nol, negatif, dan teks salah",
          "check": "Data salah tidak menghasilkan jadwal palsu",
          "fault": "Rata-rata membagi nol pada daftar kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan durasi tidak valid; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S26-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tolak nol, negatif, dan teks salah",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak nol, negatif, dan teks salah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan durasi tidak valid; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 27,
          "project": 2,
          "phase": 3,
          "title": "Assert tabel hasil",
          "target": "Mampu menjelaskan dan menerapkan assert tabel hasil",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa tiga waktu mulai dengan assert. Minta prediksi sebelum menjalankan dan bandingkan dengan kesalahan satu rumus terdeteksi",
          "practice": "Periksa tiga waktu mulai dengan assert",
          "check": "Kesalahan satu rumus terdeteksi",
          "fault": "Rata-rata membagi nol pada daftar kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert tabel hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S27-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa tiga waktu mulai dengan assert",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga waktu mulai dengan assert",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert tabel hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 28,
          "project": 2,
          "phase": 3,
          "title": "Kasus loket menganggur",
          "target": "Mampu menjelaskan dan menerapkan kasus loket menganggur",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tambahkan kedatangan jauh setelah layanan selesai. Minta prediksi sebelum menjalankan dan bandingkan dengan tunggu pengunjung tersebut nol",
          "practice": "Tambahkan kedatangan jauh setelah layanan selesai",
          "check": "Tunggu pengunjung tersebut nol",
          "fault": "Rata-rata membagi nol pada daftar kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus loket menganggur; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S28-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan pemecah seri kedatangan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tambahkan kedatangan jauh setelah layanan selesai",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tambahkan kedatangan jauh setelah layanan selesai",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus loket menganggur; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 29,
          "project": 2,
          "phase": 4,
          "title": "Konfigurasi baru",
          "target": "Mampu menjelaskan dan menerapkan konfigurasi baru",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kurangi satu durasi dan prediksi perubahan. Minta prediksi sebelum menjalankan dan bandingkan dengan hanya akibat parameter baru yang dibandingkan",
          "practice": "Kurangi satu durasi dan prediksi perubahan",
          "check": "Hanya akibat parameter baru yang dibandingkan",
          "fault": "Perbandingan memakai data awal yang berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konfigurasi baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S29-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kurangi satu durasi dan prediksi perubahan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 satu durasi dan prediksi perubahan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konfigurasi baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 30,
          "project": 2,
          "phase": 4,
          "title": "Tabel perbandingan",
          "target": "Mampu menjelaskan dan menerapkan tabel perbandingan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Sajikan dua hasil dari fungsi yang sama. Minta prediksi sebelum menjalankan dan bandingkan dengan perhitungan manual mendukung hasil",
          "practice": "Sajikan dua hasil dari fungsi yang sama",
          "check": "Perhitungan manual mendukung hasil",
          "fault": "Perbandingan memakai data awal yang berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tabel perbandingan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S30-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Sajikan dua hasil dari fungsi yang sama",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Sajikan dua hasil dari fungsi yang sama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tabel perbandingan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 31,
          "project": 2,
          "phase": 4,
          "title": "Batas model",
          "target": "Mampu menjelaskan dan menerapkan batas model",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jelaskan tidak adanya prioritas dan kapasitas nyata. Minta prediksi sebelum menjalankan dan bandingkan dengan kesimpulan sesuai asumsi kecil",
          "practice": "Jelaskan tidak adanya prioritas dan kapasitas nyata",
          "check": "Kesimpulan sesuai asumsi kecil",
          "fault": "Perbandingan memakai data awal yang berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan batas model; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S31-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jelaskan tidak adanya prioritas dan kapasitas nyata",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Jelaskan tidak adanya prioritas dan kapasitas nyata",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan batas model; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 32,
          "project": 2,
          "phase": 4,
          "title": "Presentasi: Simulator Antrean Sederhana",
          "target": "Mampu menjelaskan dan menerapkan presentasi simulator",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji data kedatangan baru dari mentor. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menelusuri satu pengunjung hingga selesai",
          "practice": "Uji data kedatangan baru dari mentor Mentor memberikan satu pengunjung datang saat loket menganggur; hitung manual lalu buktikan waktu tunggu dan selesai. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menelusuri satu pengunjung hingga selesai",
          "fault": "Perbandingan memakai data awal yang berbeda",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-lanjutan-S32-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih satu parameter layanan untuk dibandingkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji data kedatangan baru dari mentor Mentor memberikan satu pengunjung datang saat loket menganggur; hitung manual lalu buktikan waktu tunggu dan selesai. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Simulator Antrean Sederhana. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Uji data kedatangan baru dari mentor Mentor memberikan satu pengunjung datang saat loket menganggur; hitung manual lalu buktikan waktu tunggu dan selesai. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 33,
          "project": 3,
          "phase": 1,
          "title": "Audit fungsi hitung",
          "target": "Mampu menjelaskan dan menerapkan audit fungsi hitung",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Buat fungsi tambah yang menerima dua angka. Minta prediksi sebelum menjalankan dan bandingkan dengan fungsi berjalan tanpa gui",
          "practice": "Buat fungsi tambah yang menerima dua angka",
          "check": "Fungsi berjalan tanpa GUI",
          "fault": "while atau input() memblokir event loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi hitung; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S33-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat fungsi tambah yang menerima dua angka",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Buat fungsi tambah yang menerima dua angka",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi hitung; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 34,
          "project": 3,
          "phase": 1,
          "title": "Uji ketersediaan Tkinter",
          "target": "Mampu menjelaskan dan menerapkan uji ketersediaan tkinter",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan python -m tkinter dan catat hasil perangkat. Minta prediksi sebelum menjalankan dan bandingkan dengan jendela uji dapat dibuka dan ditutup",
          "practice": "Jalankan python -m tkinter dan catat hasil perangkat",
          "check": "Jendela uji dapat dibuka dan ditutup",
          "fault": "while atau input() memblokir event loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji ketersediaan tkinter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S34-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan python -m tkinter dan catat hasil perangkat",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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 python -m tkinter dan catat hasil perangkat",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji ketersediaan tkinter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Belajar orientasi alat dan simpan-buka ulang.",
              "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
            }
          }
        },
        {
          "number": 35,
          "project": 3,
          "phase": 1,
          "title": "Tk dan mainloop()",
          "target": "Mampu menjelaskan dan menerapkan tk dan mainloop()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buka satu jendela kosong lalu tutup melalui tombol sistem. Minta prediksi sebelum menjalankan dan bandingkan dengan hanya satu instance tk dibuat",
          "practice": "Buka satu jendela kosong lalu tutup melalui tombol sistem",
          "check": "Hanya satu instance Tk dibuat",
          "fault": "while atau input() memblokir event loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tk dan mainloop(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S35-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buka satu jendela kosong lalu tutup melalui tombol sistem",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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": "Buka satu jendela kosong lalu tutup melalui tombol sistem",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tk dan mainloop(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Belajar orientasi alat dan simpan-buka ulang.",
              "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
            }
          }
        },
        {
          "number": 36,
          "project": 3,
          "phase": 1,
          "title": "Label dan grid()",
          "target": "Mampu menjelaskan dan menerapkan label dan grid()",
          "demo": "Di VS Code, peragakan contoh minimum untuk Susun label input serta hasil dalam grid. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak mencampur pack dan grid pada parent sama",
          "practice": "Susun label input serta hasil dalam grid",
          "check": "Tidak mencampur pack dan grid pada parent sama",
          "fault": "while atau input() memblokir event loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan label dan grid(); prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S36-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Susun label input serta hasil dalam grid",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 label input serta hasil dalam grid",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan label dan grid(); prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 37,
          "project": 3,
          "phase": 2,
          "title": "Entry dan nilai teks",
          "target": "Mampu menjelaskan dan menerapkan entry dan nilai teks",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca dua Entry melalui callback sederhana. Minta prediksi sebelum menjalankan dan bandingkan dengan nilai input dapat ditampilkan",
          "practice": "Baca dua Entry melalui callback sederhana",
          "check": "Nilai input dapat ditampilkan",
          "fault": "command diisi hasil fungsi alih-alih callback",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan entry dan nilai teks; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S37-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca dua Entry melalui callback sederhana",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 dua Entry melalui callback sederhana",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan entry dan nilai teks; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 38,
          "project": 3,
          "phase": 2,
          "title": "Button dan callback",
          "target": "Mampu menjelaskan dan menerapkan button dan callback",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan command tanpa memanggil handler saat dibuat. Minta prediksi sebelum menjalankan dan bandingkan dengan aksi terjadi hanya setelah klik",
          "practice": "Hubungkan command tanpa memanggil handler saat dibuat",
          "check": "Aksi terjadi hanya setelah klik",
          "fault": "command diisi hasil fungsi alih-alih callback",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan button dan callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S38-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan command tanpa memanggil handler saat dibuat",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan command tanpa memanggil handler saat dibuat",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan button dan callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 39,
          "project": 3,
          "phase": 2,
          "title": "Fungsi dan tampilan",
          "target": "Mampu menjelaskan dan menerapkan fungsi dan tampilan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Panggil fungsi tambah dari handler. Minta prediksi sebelum menjalankan dan bandingkan dengan logika diuji tanpa membuat jendela",
          "practice": "Panggil fungsi tambah dari handler Terapkan fungsi hitung terpisah pada total harga dua barang sebelum menghubungkannya ke GUI.",
          "check": "Logika diuji tanpa membuat jendela",
          "fault": "command diisi hasil fungsi alih-alih callback",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi dan tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S39-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Panggil fungsi tambah dari handler Terapkan fungsi hitung terpisah pada total harga dua barang sebelum menghubungkannya ke GUI.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Panggil fungsi tambah dari handler Terapkan fungsi hitung terpisah pada total harga dua barang sebelum menghubungkannya ke GUI.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi dan tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 40,
          "project": 3,
          "phase": 2,
          "title": "Pilihan operasi",
          "target": "Mampu menjelaskan dan menerapkan pilihan operasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tambahkan kurang, kali, dan bagi. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh 6 dan 2 memberi 8,4,12,3",
          "practice": "Tambahkan kurang, kali, dan bagi",
          "check": "Contoh 6 dan 2 memberi 8,4,12,3",
          "fault": "command diisi hasil fungsi alih-alih callback",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pilihan operasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S40-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tambahkan kurang, kali, dan bagi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tambahkan kurang, kali, dan bagi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pilihan operasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 41,
          "project": 3,
          "phase": 3,
          "title": "Konversi float",
          "target": "Mampu menjelaskan dan menerapkan konversi float",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani input angka desimal dengan ValueError. Minta prediksi sebelum menjalankan dan bandingkan dengan huruf tidak menutup jendela",
          "practice": "Tangani input angka desimal dengan ValueError Gunakan contoh ukuran panjang dengan angka desimal; bandingkan hasil dengan hitungan manual.",
          "check": "Huruf tidak menutup jendela",
          "fault": "Konversi salah menutup aplikasi",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi float; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S41-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani input angka desimal dengan ValueError Gunakan contoh ukuran panjang dengan angka desimal; bandingkan hasil dengan hitungan manual.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani input angka desimal dengan ValueError Gunakan contoh ukuran panjang dengan angka desimal; bandingkan hasil dengan hitungan manual.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi float; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 42,
          "project": 3,
          "phase": 3,
          "title": "Pembagian nol",
          "target": "Mampu menjelaskan dan menerapkan pembagian nol",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa pembagi sebelum operasi. Minta prediksi sebelum menjalankan dan bandingkan dengan pesan menggantikan traceback",
          "practice": "Periksa pembagi sebelum operasi",
          "check": "Pesan menggantikan traceback",
          "fault": "Konversi salah menutup aplikasi",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pembagian nol; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S42-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa pembagi sebelum operasi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 pembagi sebelum operasi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pembagian nol; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 43,
          "project": 3,
          "phase": 3,
          "title": "Pesan dan state hasil",
          "target": "Mampu menjelaskan dan menerapkan pesan dan state hasil",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kosongkan hasil lama saat input tidak valid. Minta prediksi sebelum menjalankan dan bandingkan dengan pengguna tidak melihat hasil basi",
          "practice": "Kosongkan hasil lama saat input tidak valid",
          "check": "Pengguna tidak melihat hasil basi",
          "fault": "Konversi salah menutup aplikasi",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pesan dan state hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S43-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kosongkan hasil lama saat input tidak valid",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kosongkan hasil lama saat input tidak valid",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pesan dan state hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 44,
          "project": 3,
          "phase": 3,
          "title": "Tombol reset",
          "target": "Mampu menjelaskan dan menerapkan tombol reset",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kosongkan Entry serta label. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak membuat jendela atau widget tambahan",
          "practice": "Kosongkan Entry serta label Uji reset setelah hasil benar lalu setelah input salah; kedua kondisi kembali ke tampilan awal.",
          "check": "Tidak membuat jendela atau widget tambahan",
          "fault": "Konversi salah menutup aplikasi",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tombol reset; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S44-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih pesan untuk input kosong dan pembagian nol.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kosongkan Entry serta label Uji reset setelah hasil benar lalu setelah input salah; kedua kondisi kembali ke tampilan awal.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kosongkan Entry serta label Uji reset setelah hasil benar lalu setelah input salah; kedua kondisi kembali ke tampilan awal.",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tombol reset; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 45,
          "project": 3,
          "phase": 4,
          "title": "Event loop responsif",
          "target": "Mampu menjelaskan dan menerapkan event loop responsif",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji klik berulang tanpa input() atau while panjang. Minta prediksi sebelum menjalankan dan bandingkan dengan jendela tetap dapat dipindah dan ditutup",
          "practice": "Uji klik berulang tanpa input() atau while panjang",
          "check": "Jendela tetap dapat dipindah dan ditutup",
          "fault": "Reset menambah widget atau binding baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan event loop responsif; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S45-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji klik berulang tanpa input() atau while panjang",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 klik berulang tanpa input() atau while panjang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan event loop responsif; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 46,
          "project": 3,
          "phase": 4,
          "title": "Assert fungsi hitung",
          "target": "Mampu menjelaskan dan menerapkan assert fungsi hitung",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa empat operasi dan pembagian nol. Minta prediksi sebelum menjalankan dan bandingkan dengan kesalahan logika terdeteksi tanpa gui",
          "practice": "Periksa empat operasi dan pembagian nol",
          "check": "Kesalahan logika terdeteksi tanpa GUI",
          "fault": "Reset menambah widget atau binding baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert fungsi hitung; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S46-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa empat operasi dan pembagian nol",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 empat operasi dan pembagian nol",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert fungsi hitung; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 47,
          "project": 3,
          "phase": 4,
          "title": "Uji pengguna satu jendela",
          "target": "Mampu menjelaskan dan menerapkan uji pengguna satu jendela",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman mencoba angka dan reset. Minta prediksi sebelum menjalankan dan bandingkan dengan label serta pesan dapat dipahami",
          "practice": "Minta teman mencoba angka dan reset",
          "check": "Label serta pesan dapat dipahami",
          "fault": "Reset menambah widget atau binding baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna satu jendela; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S47-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman mencoba angka dan reset",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman mencoba angka dan reset",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna satu jendela; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 48,
          "project": 3,
          "phase": 4,
          "title": "Presentasi: Kalkulator Interaktif",
          "target": "Mampu menjelaskan dan menerapkan presentasi kalkulator",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan input salah dan perubahan brief. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan hubungan klik dan fungsi",
          "practice": "Demonstrasikan input salah dan perubahan brief Penguji meminta angka desimal serta klik reset di tengah penggunaan; aplikasi harus tetap memberi hasil dan state yang benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menjelaskan hubungan klik dan fungsi",
          "fault": "Reset menambah widget atau binding baru",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-lanjutan-S48-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan hasil lama perlu dikosongkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan input salah dan perubahan brief Penguji meminta angka desimal serta klik reset di tengah penggunaan; aplikasi harus tetap memberi hasil dan state yang benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Kalkulator 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan input salah dan perubahan brief Penguji meminta angka desimal serta klik reset di tengah penggunaan; aplikasi harus tetap memberi hasil dan state yang benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 49,
          "project": 4,
          "phase": 1,
          "title": "Brief kebiasaan belajar",
          "target": "Mampu menjelaskan dan menerapkan brief kebiasaan belajar",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Tulis tiga aktivitas dan alur checklist satu periode. Minta prediksi sebelum menjalankan dan bandingkan dengan syarat fitur dibatasi satu jendela",
          "practice": "Tulis tiga aktivitas dan alur checklist satu periode",
          "check": "Syarat fitur dibatasi satu jendela",
          "fault": "Beberapa checkbox berbagi satu variabel",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief kebiasaan belajar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S49-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis tiga aktivitas dan alur checklist satu periode",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga aktivitas dan alur checklist satu periode",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief kebiasaan belajar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 50,
          "project": 4,
          "phase": 1,
          "title": "Audit callback",
          "target": "Mampu menjelaskan dan menerapkan audit callback",
          "demo": "Di VS Code, peragakan contoh minimum untuk Telusuri klik menuju fungsi dan state. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa membedakan event dari loop terminal",
          "practice": "Telusuri klik menuju fungsi dan state",
          "check": "Siswa membedakan event dari loop terminal",
          "fault": "Beberapa checkbox berbagi satu variabel",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S50-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Telusuri klik menuju fungsi dan state",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 klik menuju fungsi dan state",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 51,
          "project": 4,
          "phase": 1,
          "title": "Model ID dan boolean",
          "target": "Mampu menjelaskan dan menerapkan model id dan boolean",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan tiga kebiasaan pada list dictionary. Minta prediksi sebelum menjalankan dan bandingkan dengan status tidak disimpan hanya dalam label",
          "practice": "Simpan tiga kebiasaan pada list dictionary",
          "check": "Status tidak disimpan hanya dalam label",
          "fault": "Beberapa checkbox berbagi satu variabel",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model id dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S51-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan tiga kebiasaan pada list dictionary",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga kebiasaan pada list dictionary",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model id dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 52,
          "project": 4,
          "phase": 1,
          "title": "Sketsa satu jendela",
          "target": "Mampu menjelaskan dan menerapkan sketsa satu jendela",
          "demo": "Di VS Code, peragakan contoh minimum untuk Letakkan checklist, ringkasan, simpan, muat, dan reset. Minta prediksi sebelum menjalankan dan bandingkan dengan semua tindakan memiliki label jelas",
          "practice": "Letakkan checklist, ringkasan, simpan, muat, dan reset",
          "check": "Semua tindakan memiliki label jelas",
          "fault": "Beberapa checkbox berbagi satu variabel",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa satu jendela; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S52-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Letakkan checklist, ringkasan, simpan, muat, dan reset",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Letakkan checklist, ringkasan, simpan, muat, dan reset",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa satu jendela; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 53,
          "project": 4,
          "phase": 2,
          "title": "Checkbutton pertama",
          "target": "Mampu menjelaskan dan menerapkan checkbutton pertama",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan satu BooleanVar dengan satu kebiasaan. Minta prediksi sebelum menjalankan dan bandingkan dengan klik mengubah satu status",
          "practice": "Hubungkan satu BooleanVar dengan satu kebiasaan",
          "check": "Klik mengubah satu status",
          "fault": "Callback menangkap ID terakhir pada loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan checkbutton pertama; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S53-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan satu BooleanVar dengan satu kebiasaan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan satu BooleanVar dengan satu kebiasaan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan checkbutton pertama; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 54,
          "project": 4,
          "phase": 2,
          "title": "Tiga checklist mandiri",
          "target": "Mampu menjelaskan dan menerapkan tiga checklist mandiri",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat variabel serta ID terpisah untuk setiap baris. Minta prediksi sebelum menjalankan dan bandingkan dengan klik baris kedua tidak mengubah baris ketiga",
          "practice": "Buat variabel serta ID terpisah untuk setiap baris",
          "check": "Klik baris kedua tidak mengubah baris ketiga",
          "fault": "Callback menangkap ID terakhir pada loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tiga checklist mandiri; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S54-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat variabel serta ID terpisah untuk setiap baris",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 variabel serta ID terpisah untuk setiap baris",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tiga checklist mandiri; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 55,
          "project": 4,
          "phase": 2,
          "title": "Fungsi ringkasan",
          "target": "Mampu menjelaskan dan menerapkan fungsi ringkasan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung status true dari model data. Minta prediksi sebelum menjalankan dan bandingkan dengan dua centang menghasilkan 2/3",
          "practice": "Hitung status true dari model data",
          "check": "Dua centang menghasilkan 2/3",
          "fault": "Callback menangkap ID terakhir pada loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi ringkasan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S55-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung status true dari model data",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung status true dari model data",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi ringkasan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 56,
          "project": 4,
          "phase": 2,
          "title": "Sinkronisasi tampilan",
          "target": "Mampu menjelaskan dan menerapkan sinkronisasi tampilan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbarui label setelah setiap callback. Minta prediksi sebelum menjalankan dan bandingkan dengan model dan label selalu cocok",
          "practice": "Perbarui label setelah setiap callback",
          "check": "Model dan label selalu cocok",
          "fault": "Callback menangkap ID terakhir pada loop",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sinkronisasi tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S56-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Perbarui label setelah setiap callback",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Perbarui label setelah setiap callback",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sinkronisasi tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 57,
          "project": 4,
          "phase": 3,
          "title": "Penyimpanan JSON",
          "target": "Mampu menjelaskan dan menerapkan penyimpanan json",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan hanya data ID dan status. Minta prediksi sebelum menjalankan dan bandingkan dengan widget tidak diserialisasi",
          "practice": "Simpan hanya data ID dan status",
          "check": "Widget tidak diserialisasi",
          "fault": "Data rusak otomatis diganti kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan penyimpanan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S57-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan hanya data ID dan status",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 hanya data ID dan status",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan penyimpanan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 58,
          "project": 4,
          "phase": 3,
          "title": "Muat dan render",
          "target": "Mampu menjelaskan dan menerapkan muat dan render",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca JSON lalu set variabel tampilan. Minta prediksi sebelum menjalankan dan bandingkan dengan status sama setelah tutup dan buka",
          "practice": "Baca JSON lalu set variabel tampilan",
          "check": "Status sama setelah tutup dan buka",
          "fault": "Data rusak otomatis diganti kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan render; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S58-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca JSON lalu set variabel tampilan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 JSON lalu set variabel tampilan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan render; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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.",
              "Ada waktu mesin yang bergantung perangkat; gunakan preview kecil."
            ],
            "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": "Periksa satu frame/preview kecil dalam kelas. Render penuh boleh berjalan setelah sumber dan setelan diperiksa; lama proses mesin tidak menentukan kelulusan.",
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          }
        },
        {
          "number": 59,
          "project": 4,
          "phase": 3,
          "title": "Validasi struktur",
          "target": "Mampu menjelaskan dan menerapkan validasi struktur",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak ID asing dan status bukan boolean. Minta prediksi sebelum menjalankan dan bandingkan dengan data salah tidak menggantikan state aktif",
          "practice": "Tolak ID asing dan status bukan boolean",
          "check": "Data salah tidak menggantikan state aktif",
          "fault": "Data rusak otomatis diganti kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi struktur; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S59-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tolak ID asing dan status bukan boolean",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak ID asing dan status bukan boolean",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi struktur; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 60,
          "project": 4,
          "phase": 3,
          "title": "File rusak dan hilang",
          "target": "Mampu menjelaskan dan menerapkan file rusak dan hilang",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bedakan file awal dari file JSON rusak. Minta prediksi sebelum menjalankan dan bandingkan dengan file rusak tidak ditimpa tanpa tindakan pengguna",
          "practice": "Bedakan file awal dari file JSON rusak",
          "check": "File rusak tidak ditimpa tanpa tindakan pengguna",
          "fault": "Data rusak otomatis diganti kosong",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file rusak dan hilang; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S60-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label kebiasaan dan umpan balik ringkasan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bedakan file awal dari file JSON rusak",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Bedakan file awal dari file JSON rusak",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file rusak dan hilang; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 61,
          "project": 4,
          "phase": 4,
          "title": "Reset eksplisit",
          "target": "Mampu menjelaskan dan menerapkan reset eksplisit",
          "demo": "Di VS Code, peragakan contoh minimum untuk Set semua status false melalui satu tombol. Minta prediksi sebelum menjalankan dan bandingkan dengan reset dapat dijelaskan pengguna",
          "practice": "Set semua status false melalui satu tombol",
          "check": "Reset dapat dijelaskan pengguna",
          "fault": "Ringkasan tidak disegarkan setelah muat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan reset eksplisit; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S61-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Set semua status false melalui satu tombol",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Set semua status false melalui satu tombol",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan reset eksplisit; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 62,
          "project": 4,
          "phase": 4,
          "title": "Uji fungsi dan callback",
          "target": "Mampu menjelaskan dan menerapkan uji fungsi dan callback",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa ringkasan serta perubahan satu ID. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak terjadi status ganda setelah klik berulang",
          "practice": "Periksa ringkasan serta perubahan satu ID",
          "check": "Tidak terjadi status ganda setelah klik berulang",
          "fault": "Ringkasan tidak disegarkan setelah muat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi dan callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S62-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa ringkasan serta perubahan satu ID",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 ringkasan serta perubahan satu ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi dan callback; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 63,
          "project": 4,
          "phase": 4,
          "title": "Uji pengguna dan revisi",
          "target": "Mampu menjelaskan dan menerapkan uji pengguna dan revisi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman mengikuti panduan simpan-muat. Minta prediksi sebelum menjalankan dan bandingkan dengan satu kesulitan diperbaiki dan diuji ulang",
          "practice": "Minta teman mengikuti panduan simpan-muat",
          "check": "Satu kesulitan diperbaiki dan diuji ulang",
          "fault": "Ringkasan tidak disegarkan setelah muat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-smp-lanjutan-S63-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman mengikuti panduan simpan-muat",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman mengikuti panduan simpan-muat",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 64,
          "project": 4,
          "phase": 4,
          "title": "Presentasi: Pelacak Kebiasaan Belajar",
          "target": "Mampu menjelaskan dan menerapkan presentasi pelacak",
          "demo": "Di VS Code, peragakan contoh minimum untuk Serahkan aplikasi serta demonstrasikan brief baru. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber, data sintetis, dan readme lengkap",
          "practice": "Serahkan aplikasi serta demonstrasikan brief baru Penguji mengganti satu nama kebiasaan dan memuat status lama; pertahankan identitas data melalui ID serta buktikan ringkasan benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Sumber, data sintetis, dan README lengkap",
          "fault": "Ringkasan tidak disegarkan setelah muat",
          "support": "Mentor memberi satu contoh kecil, lalu siswa memprediksi, mencoba variasi, dan menjelaskan hasil. Pada Lanjutan, gunakan pertanyaan serta petunjuk bertahap; periksa fondasi sebelum GUI.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-smp-lanjutan-S64-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan perilaku reset serta kapan data disimpan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Serahkan aplikasi serta demonstrasikan brief baru Penguji mengganti satu nama kebiasaan dan memuat status lama; pertahankan identitas data melalui ID serta buktikan ringkasan benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Pelacak Kebiasaan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Serahkan aplikasi serta demonstrasikan brief baru Penguji mengganti satu nama kebiasaan dan memuat status lama; pertahankan identitas data melalui ID serta buktikan ringkasan benar. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        }
      ],
      "toolRevision": "tools-2026-10-21",
      "toolIds": [
        "vscode"
      ],
      "setup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
      "curriculumRevision": "python-apps-2026-10-24-v1",
      "placement": [
        "Telusuri satu fungsi berparameter dan return pada data baru.",
        "Perbaiki satu kondisi atau loop dan tunjukkan bukti sebelum serta sesudah.",
        "Olah list/dictionary dan bedakan data kosong dengan input tidak valid.",
        "Baca serta simpan JSON sederhana tanpa menghapus data ketika file rusak."
      ],
      "learningApproach": "Siswa menentukan solusi dari brief, menyusun kasus uji, dan menjelaskan keputusan. Mentor memberi petunjuk bertahap."
    },
    {
      "id": "sma-pemula",
      "age": "SMA",
      "level": "pemula",
      "name": "SMA · Pemula",
      "entry": "Tidak memerlukan pengalaman Python. Mulai dari membuka file, print(), variabel, input(), dan latihan kecil; mentor memeriksa pemahaman sebelum menambah konsep.",
      "target": "Menguasai fondasi Python dan pemisahan fungsi melalui program terminal, lalu membangun aplikasi Tkinter satu jendela dengan validasi, pencarian, serta simpan-muat JSON secara lebih mandiri.",
      "scope": "64 sesi × 1 jam; dua proyek terminal untuk fondasi serta data, lalu kalkulator nilai dan pengatur tugas satu jendela. Data sintetis 5–10 entri, logika fungsi terpisah, JSON, validasi, dan satu revisi uji pengguna. Semua file dibuka sebagai satu folder proyek di VS Code dengan interpreter terpilih, terminal terintegrasi, serta debugger.",
      "adaptation": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
      "projects": [
        {
          "name": "Asisten Nilai Latihan",
          "topic": "Fondasi Python melalui program terminal",
          "out": "Program terminal yang merangkum nilai latihan sintetis dengan validasi dan fungsi.",
          "art": "python-sma-pemula-p1-apps.svg",
          "steps": [
            "Siapkan VS Code dan pelajari print(), variabel, tipe data, input(), serta konversi angka",
            "Pelajari operator, boolean, indentasi, if/elif/else, serta for dan range() dari latihan kecil",
            "Susun while dan list nilai, lalu pisahkan fungsi berparameter, return, serta scope",
            "Tangani ValueError, buktikan ringkasan melalui data kosong serta batas nilai, dan dokumentasikan cara menjalankan"
          ],
          "checks": [
            "Teks dan angka dibedakan melalui konversi yang benar",
            "Percabangan serta loop dapat ditelusuri manual",
            "Fungsi ringkasan menerima data tanpa input di dalamnya",
            "Nilai di luar 0–100 ditolak dan rata-rata kosong ditangani"
          ],
          "faults": [
            "Input angka dianggap sudah bertipe numerik",
            "Batas nilai memakai kondisi boolean yang salah",
            "Fungsi mencetak hasil tetapi tidak mengembalikan nilai",
            "Daftar kosong dibagi nol"
          ],
          "recipe": "Gunakan data latihan, bukan penentuan nilai sekolah nyata. Nilai 70,80,90 memberi rata-rata 80. Bangun dari print dan satu input, lalu list serta fungsi. Siswa memprediksi hasil sebelum menjalankan. Tidak perlu GUI pada proyek pertama.",
          "number": 1,
          "start": 1,
          "end": 16,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Program terminal yang merangkum nilai latihan sintetis dengan validasi dan fungsi.",
          "minimumChecks": [
            "Teks dan angka dibedakan melalui konversi yang benar",
            "Percabangan serta loop dapat ditelusuri manual",
            "Fungsi ringkasan menerima data tanpa input di dalamnya"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Asisten Nilai Latihan dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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": "Pencatat Anggaran Kegiatan",
          "topic": "Struktur data, fungsi, dan berkas",
          "out": "Pencatat anggaran kegiatan sintetis dengan kategori, saldo, dan penyimpanan JSON.",
          "art": "python-sma-pemula-p2-apps.svg",
          "steps": [
            "Modelkan transaksi sebagai list dictionary serta pisahkan fungsi data dan menu",
            "Implementasikan tambah, filter kategori, ringkasan, serta validasi rupiah integer",
            "Pelajari pathlib, with open, JSON, serta pemisahan file belum ada dan rusak",
            "Uji buka ulang dan data baru lalu susun README dengan skema data"
          ],
          "checks": [
            "ID dan field transaksi konsisten",
            "Ringkasan kategori cocok dengan hitungan manual",
            "Data dibaca kembali pada lokasi yang tetap",
            "Masukan salah tidak mengubah atau menimpa data valid"
          ],
          "faults": [
            "Nama field berubah antar fungsi",
            "Float dipakai untuk rupiah yang harus bulat",
            "Lokasi data berbeda saat terminal berganti folder",
            "File rusak ditimpa daftar kosong"
          ],
          "recipe": "Anggaran awal 100000, biaya alat 25000, konsumsi 15000 menghasilkan sisa 60000. Rupiah disimpan sebagai integer. Gunakan fungsi terpisah untuk validasi, ringkasan, dan simpan-muat. File rusak ditolak dan dipertahankan.",
          "number": 2,
          "start": 17,
          "end": 32,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Pencatat anggaran kegiatan sintetis dengan kategori, saldo, dan penyimpanan JSON.",
          "minimumChecks": [
            "ID dan field transaksi konsisten",
            "Ringkasan kategori cocok dengan hitungan manual",
            "Data dibaca kembali pada lokasi yang tetap"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Pencatat Anggaran Kegiatan dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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": "Kalkulator Nilai Berjendela",
          "topic": "Dasar Tkinter dan pemisahan logika",
          "out": "Aplikasi satu jendela untuk merangkum tiga nilai latihan dengan validasi.",
          "art": "python-sma-pemula-p3-apps.svg",
          "steps": [
            "Uji Tkinter dan bangun layout ttk dengan Entry, Label, serta grid",
            "Hubungkan callback ke fungsi ringkasan yang terpisah dari tampilan",
            "Validasi tiga nilai dan tangani state hasil serta reset tanpa memblokir event loop",
            "Uji fungsi dan alur pengguna lalu revisi pesan serta petunjuk"
          ],
          "checks": [
            "Layout terbaca dan hanya satu event loop aktif",
            "Fungsi ringkasan dapat dijalankan tanpa GUI",
            "Input kosong, huruf, serta nilai di luar rentang tertangani",
            "Reset dan klik berulang tidak menumpuk widget"
          ],
          "faults": [
            "Callback dijalankan saat tombol dibuat",
            "Logika nilai hanya dapat diuji dengan membuka GUI",
            "Hasil sebelumnya tertinggal setelah input gagal",
            "Loop terminal memblokir jendela"
          ],
          "recipe": "Gunakan tiga nilai sintetis 70,80,90 dan hasil rata-rata 80. Tkinter dipasang pada interpreter kelas, diuji melalui python -m tkinter. Callback membaca Entry, memanggil fungsi ringkasan, lalu memperbarui Label. Tidak ada input() di mainloop.",
          "number": 3,
          "start": 33,
          "end": 48,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi satu jendela untuk merangkum tiga nilai latihan dengan validasi.",
          "minimumChecks": [
            "Layout terbaca dan hanya satu event loop aktif",
            "Fungsi ringkasan dapat dijalankan tanpa GUI",
            "Input kosong, huruf, serta nilai di luar rentang tertangani"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Kalkulator Nilai Berjendela dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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": "Pengatur Tugas Belajar",
          "topic": "Aplikasi GUI dan persistensi JSON",
          "out": "Aplikasi tugas satu jendela dengan tambah, cari, selesai, serta simpan-muat lokal.",
          "art": "python-sma-pemula-p4-apps.svg",
          "steps": [
            "Rancang kebutuhan pengguna, ID stabil, dan pemisahan model dari tampilan",
            "Implementasikan form, Listbox, callback tambah-cari-selesai, dan ringkasan",
            "Gunakan JSON serta validasi skema agar status dan ID bertahan setelah buka ulang",
            "Uji fungsi dan pengguna, revisi aplikasi, serta serahkan panduan penggunaan"
          ],
          "checks": [
            "Sketsa dan model ID cocok dengan fungsi aplikasi",
            "Hasil pencarian tetap menunjuk ID tugas yang benar",
            "Simpan-muat mempertahankan judul serta status",
            "Kasus batas dan uji pengguna didokumentasikan"
          ],
          "faults": [
            "Indeks Listbox dianggap ID permanen",
            "Menandai selesai dari hasil filter mengubah tugas lain",
            "Status boolean dimuat sebagai teks",
            "File rusak ditimpa sebelum diperiksa"
          ],
          "recipe": "Tugas ID 1 matematika belum, ID 2 membaca selesai, ID 3 sains belum. Cari sains lalu tandai selesai; ringkasan menjadi 2/3 tanpa menambah tugas. Satu jendela memakai list dan form, JSON untuk data lokal. Desain berdasarkan kebutuhan siswa dan satu revisi uji pengguna.",
          "number": 4,
          "start": 49,
          "end": 64,
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "samplePath": "contoh/sma-pemula/app.py",
          "sampleReadme": "contoh/sma-pemula/README.md",
          "sampleTest": "contoh/sma-pemula/test_app.py",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi tugas satu jendela dengan tambah, cari, selesai, serta simpan-muat lokal.",
          "minimumChecks": [
            "Sketsa dan model ID cocok dengan fungsi aplikasi",
            "Hasil pencarian tetap menunjuk ID tugas yang benar",
            "Simpan-muat mempertahankan judul serta status"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Pengatur Tugas Belajar dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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": "Workspace dan Python",
          "target": "Mampu menjelaskan dan menerapkan workspace dan python",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Pilih interpreter dan jalankan file pertama di terminal VS Code. Minta prediksi sebelum menjalankan dan bandingkan dengan perintah serta lokasi file tercatat",
          "practice": "Pilih interpreter dan jalankan file pertama di terminal VS Code",
          "check": "Perintah serta lokasi file tercatat",
          "fault": "Input angka dianggap sudah bertipe numerik",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan workspace dan python; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S01-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pilih interpreter dan jalankan file pertama di terminal VS Code",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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": "Pilih interpreter dan jalankan file pertama di terminal VS Code",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan workspace dan python; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "print dan f-string",
          "target": "Mampu menjelaskan dan menerapkan print dan f-string",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan judul laporan serta nilai contoh. Minta prediksi sebelum menjalankan dan bandingkan dengan keluaran dapat diprediksi tanpa menjalankan",
          "practice": "Tampilkan judul laporan serta nilai contoh",
          "check": "Keluaran dapat diprediksi tanpa menjalankan",
          "fault": "Input angka dianggap sudah bertipe numerik",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan print dan f-string; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S02-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan judul laporan serta nilai contoh",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan judul laporan serta nilai contoh",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan print dan f-string; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 1,
          "title": "Variabel dan tipe data",
          "target": "Mampu menjelaskan dan menerapkan variabel dan tipe data",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bedakan str, int, float, serta bool melalui contoh. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan fungsi setiap tipe",
          "practice": "Bedakan str, int, float, serta bool melalui contoh",
          "check": "Siswa menjelaskan fungsi setiap tipe",
          "fault": "Input angka dianggap sudah bertipe numerik",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel dan tipe data; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S03-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bedakan str, int, float, serta bool melalui contoh",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Bedakan str, int, float, serta bool melalui contoh",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan variabel dan tipe data; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 1,
          "title": "Input dan konversi",
          "target": "Mampu menjelaskan dan menerapkan input dan konversi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca nama serta nilai dan konversi angka. Minta prediksi sebelum menjalankan dan bandingkan dengan teks numerik tidak dijumlah sebagai string",
          "practice": "Baca nama serta nilai dan konversi angka",
          "check": "Teks numerik tidak dijumlah sebagai string",
          "fault": "Input angka dianggap sudah bertipe numerik",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan input dan konversi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S04-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca nama serta nilai dan konversi angka",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 nama serta nilai dan konversi angka",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan input dan konversi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 2,
          "title": "Operator dan prioritas",
          "target": "Mampu menjelaskan dan menerapkan operator dan prioritas",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung total serta rata-rata tiga angka. Minta prediksi sebelum menjalankan dan bandingkan dengan 70,80,90 memberi rata-rata 80",
          "practice": "Hitung total serta rata-rata tiga angka",
          "check": "70,80,90 memberi rata-rata 80",
          "fault": "Batas nilai memakai kondisi boolean yang salah",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan operator dan prioritas; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S05-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hitung total serta rata-rata tiga angka",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung total serta rata-rata tiga angka",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan operator dan prioritas; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 2,
          "title": "Perbandingan dan boolean",
          "target": "Mampu menjelaskan dan menerapkan perbandingan dan boolean",
          "demo": "Di VS Code, peragakan contoh minimum untuk Validasi rentang 0 sampai 100 dengan and. Minta prediksi sebelum menjalankan dan bandingkan dengan minus satu dan 101 tidak lolos",
          "practice": "Validasi rentang 0 sampai 100 dengan and",
          "check": "Minus satu dan 101 tidak lolos",
          "fault": "Batas nilai memakai kondisi boolean yang salah",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan perbandingan dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S06-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Validasi rentang 0 sampai 100 dengan and",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Validasi rentang 0 sampai 100 dengan and",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan perbandingan dan boolean; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 2,
          "title": "if elif else dan indentasi",
          "target": "Mampu menjelaskan dan menerapkan if elif else dan indentasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Beri respons input kosong, valid, atau salah. Minta prediksi sebelum menjalankan dan bandingkan dengan cabang tidak berjalan bersamaan",
          "practice": "Beri respons input kosong, valid, atau salah",
          "check": "Cabang tidak berjalan bersamaan",
          "fault": "Batas nilai memakai kondisi boolean yang salah",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan if elif else dan indentasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S07-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Beri respons input kosong, valid, atau salah",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Beri respons input kosong, valid, atau salah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan if elif else dan indentasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 2,
          "title": "for dan range",
          "target": "Mampu menjelaskan dan menerapkan for dan range",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ulangi input sejumlah nilai yang ditetapkan. Minta prediksi sebelum menjalankan dan bandingkan dengan pencacah dan jumlah input sesuai",
          "practice": "Ulangi input sejumlah nilai yang ditetapkan",
          "check": "Pencacah dan jumlah input sesuai",
          "fault": "Batas nilai memakai kondisi boolean yang salah",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan for dan range; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S08-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Ulangi input sejumlah nilai yang ditetapkan",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Ulangi input sejumlah nilai yang ditetapkan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan for dan range; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 9,
          "project": 1,
          "phase": 3,
          "title": "while dan break",
          "target": "Mampu menjelaskan dan menerapkan while dan break",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat menu pendek dengan kondisi keluar. Minta prediksi sebelum menjalankan dan bandingkan dengan program tidak terjebak loop",
          "practice": "Buat menu pendek dengan kondisi keluar",
          "check": "Program tidak terjebak loop",
          "fault": "Fungsi mencetak hasil tetapi tidak mengembalikan nilai",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan while dan break; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S09-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat menu pendek dengan kondisi keluar",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 menu pendek dengan kondisi keluar",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan while dan break; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 10,
          "project": 1,
          "phase": 3,
          "title": "List dan agregasi",
          "target": "Mampu menjelaskan dan menerapkan list dan agregasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan nilai lalu hitung jumlah dan banyaknya. Minta prediksi sebelum menjalankan dan bandingkan dengan data tidak hilang tiap putaran",
          "practice": "Simpan nilai lalu hitung jumlah dan banyaknya",
          "check": "Data tidak hilang tiap putaran",
          "fault": "Fungsi mencetak hasil tetapi tidak mengembalikan nilai",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan agregasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S10-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan nilai lalu hitung jumlah dan banyaknya",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 nilai lalu hitung jumlah dan banyaknya",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan agregasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 11,
          "project": 1,
          "phase": 3,
          "title": "def dan parameter",
          "target": "Mampu menjelaskan dan menerapkan def dan parameter",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan ringkasan ke fungsi yang menerima list. Minta prediksi sebelum menjalankan dan bandingkan dengan fungsi dapat dipakai pada dua data",
          "practice": "Pisahkan ringkasan ke fungsi yang menerima list",
          "check": "Fungsi dapat dipakai pada dua data",
          "fault": "Fungsi mencetak hasil tetapi tidak mengembalikan nilai",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan def dan parameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S11-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan ringkasan ke fungsi yang menerima list",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan ringkasan ke fungsi yang menerima list",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan def dan parameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 12,
          "project": 1,
          "phase": 3,
          "title": "return dan scope",
          "target": "Mampu menjelaskan dan menerapkan return dan scope",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kembalikan hasil ringkasan tanpa mencampur input. Minta prediksi sebelum menjalankan dan bandingkan dengan nilai lokal tidak bergantung variabel global",
          "practice": "Kembalikan hasil ringkasan tanpa mencampur input",
          "check": "Nilai lokal tidak bergantung variabel global",
          "fault": "Fungsi mencetak hasil tetapi tidak mengembalikan nilai",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan return dan scope; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S12-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kembalikan hasil ringkasan tanpa mencampur input",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kembalikan hasil ringkasan tanpa mencampur input",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan return dan scope; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 13,
          "project": 1,
          "phase": 4,
          "title": "try except ValueError",
          "target": "Mampu menjelaskan dan menerapkan try except valueerror",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani huruf saat konversi nilai. Minta prediksi sebelum menjalankan dan bandingkan dengan input salah tidak menghentikan menu",
          "practice": "Tangani huruf saat konversi nilai",
          "check": "Input salah tidak menghentikan menu",
          "fault": "Daftar kosong dibagi nol",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan try except valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S13-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani huruf saat konversi nilai",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani huruf saat konversi nilai",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan try except valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 14,
          "project": 1,
          "phase": 4,
          "title": "Kasus batas dan kosong",
          "target": "Mampu menjelaskan dan menerapkan kasus batas dan kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji nol, seratus, serta list kosong. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada pembagian nol",
          "practice": "Uji nol, seratus, serta list kosong",
          "check": "Tidak ada pembagian nol",
          "fault": "Daftar kosong dibagi nol",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus batas dan kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S14-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji nol, seratus, serta list kosong",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 nol, seratus, serta list kosong",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus batas dan kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 15,
          "project": 1,
          "phase": 4,
          "title": "Breakpoint dan bukti uji",
          "target": "Mampu menjelaskan dan menerapkan breakpoint dan bukti uji",
          "demo": "Di VS Code, peragakan contoh minimum untuk Amati akumulator serta bandingkan hasil manual. Minta prediksi sebelum menjalankan dan bandingkan dengan satu kesalahan dapat dijelaskan",
          "practice": "Amati akumulator serta bandingkan hasil manual",
          "check": "Satu kesalahan dapat dijelaskan",
          "fault": "Daftar kosong dibagi nol",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan breakpoint dan bukti uji; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S15-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Amati akumulator serta bandingkan hasil manual",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 akumulator serta bandingkan hasil manual",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan breakpoint dan bukti uji; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 16,
          "project": 1,
          "phase": 4,
          "title": "Presentasi: Asisten Nilai Latihan",
          "target": "Mampu menjelaskan dan menerapkan presentasi asisten nilai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan data baru dan serahkan README. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan fungsi dan batas input",
          "practice": "Jalankan data baru dan serahkan README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menjelaskan fungsi dan batas input",
          "fault": "Daftar kosong dibagi nol",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-pemula-S16-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan data baru dan serahkan README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Asisten Nilai Latihan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Jalankan data baru dan serahkan README Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 17,
          "project": 2,
          "phase": 1,
          "title": "Brief dan skema transaksi",
          "target": "Mampu menjelaskan dan menerapkan brief dan skema transaksi",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Tulis ID, jenis, kategori, serta nominal. Minta prediksi sebelum menjalankan dan bandingkan dengan satuan rupiah dan batas input tertulis",
          "practice": "Tulis ID, jenis, kategori, serta nominal",
          "check": "Satuan rupiah dan batas input tertulis",
          "fault": "Nama field berubah antar fungsi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief dan skema transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S17-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis ID, jenis, kategori, serta nominal",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 ID, jenis, kategori, serta nominal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief dan skema transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 18,
          "project": 2,
          "phase": 1,
          "title": "Dictionary transaksi",
          "target": "Mampu menjelaskan dan menerapkan dictionary transaksi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat tiga transaksi sintetis berlabel. Minta prediksi sebelum menjalankan dan bandingkan dengan field diakses tanpa posisi tetap",
          "practice": "Buat tiga transaksi sintetis berlabel",
          "check": "Field diakses tanpa posisi tetap",
          "fault": "Nama field berubah antar fungsi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dictionary transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S18-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat tiga transaksi sintetis berlabel",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga transaksi sintetis berlabel",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dictionary transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 19,
          "project": 2,
          "phase": 1,
          "title": "List dan iterasi",
          "target": "Mampu menjelaskan dan menerapkan list dan iterasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan list dictionary dengan for. Minta prediksi sebelum menjalankan dan bandingkan dengan jumlah baris cocok dengan data",
          "practice": "Tampilkan list dictionary dengan for",
          "check": "Jumlah baris cocok dengan data",
          "fault": "Nama field berubah antar fungsi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan iterasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S19-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan list dictionary dengan for",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan list dictionary dengan for",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan list dan iterasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 20,
          "project": 2,
          "phase": 1,
          "title": "Fungsi tambah transaksi",
          "target": "Mampu menjelaskan dan menerapkan fungsi tambah transaksi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kembalikan data baru setelah validasi. Minta prediksi sebelum menjalankan dan bandingkan dengan input salah tidak menambah baris",
          "practice": "Kembalikan data baru setelah validasi",
          "check": "Input salah tidak menambah baris",
          "fault": "Nama field berubah antar fungsi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi tambah transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S20-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kembalikan data baru setelah validasi",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kembalikan data baru setelah validasi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi tambah transaksi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 21,
          "project": 2,
          "phase": 2,
          "title": "Rupiah dan integer",
          "target": "Mampu menjelaskan dan menerapkan rupiah dan integer",
          "demo": "Di VS Code, peragakan contoh minimum untuk Konversi nominal positif tanpa float. Minta prediksi sebelum menjalankan dan bandingkan dengan teks desimal serta negatif ditolak",
          "practice": "Konversi nominal positif tanpa float",
          "check": "Teks desimal serta negatif ditolak",
          "fault": "Float dipakai untuk rupiah yang harus bulat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rupiah dan integer; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S21-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Konversi nominal positif tanpa float",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Konversi nominal positif tanpa float",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rupiah dan integer; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 22,
          "project": 2,
          "phase": 2,
          "title": "Fungsi saldo",
          "target": "Mampu menjelaskan dan menerapkan fungsi saldo",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan pemasukan dari pengeluaran. Minta prediksi sebelum menjalankan dan bandingkan dengan contoh memberi sisa 60000",
          "practice": "Pisahkan pemasukan dari pengeluaran",
          "check": "Contoh memberi sisa 60000",
          "fault": "Float dipakai untuk rupiah yang harus bulat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi saldo; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S22-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan pemasukan dari pengeluaran",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan pemasukan dari pengeluaran",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi saldo; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 23,
          "project": 2,
          "phase": 2,
          "title": "Filter kategori",
          "target": "Mampu menjelaskan dan menerapkan filter kategori",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat fungsi yang menerima kategori. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber transaksi tidak berubah",
          "practice": "Buat fungsi yang menerima kategori",
          "check": "Sumber transaksi tidak berubah",
          "fault": "Float dipakai untuk rupiah yang harus bulat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filter kategori; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S23-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat fungsi yang menerima kategori",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 fungsi yang menerima kategori",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan filter kategori; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 24,
          "project": 2,
          "phase": 2,
          "title": "Menu dan fungsi",
          "target": "Mampu menjelaskan dan menerapkan menu dan fungsi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan pilihan pengguna ke fungsi data. Minta prediksi sebelum menjalankan dan bandingkan dengan menu tidak menggandakan logika",
          "practice": "Hubungkan pilihan pengguna ke fungsi data",
          "check": "Menu tidak menggandakan logika",
          "fault": "Float dipakai untuk rupiah yang harus bulat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu dan fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S24-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan pilihan pengguna ke fungsi data",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan pilihan pengguna ke fungsi data",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menu dan fungsi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 25,
          "project": 2,
          "phase": 3,
          "title": "Path data stabil",
          "target": "Mampu menjelaskan dan menerapkan path data stabil",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gunakan pathlib relatif ke sumber program. Minta prediksi sebelum menjalankan dan bandingkan dengan data yang sama terbaca dari folder berbeda",
          "practice": "Gunakan pathlib relatif ke sumber program",
          "check": "Data yang sama terbaca dari folder berbeda",
          "fault": "Lokasi data berbeda saat terminal berganti folder",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan path data stabil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S25-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Gunakan pathlib relatif ke sumber program",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 pathlib relatif ke sumber program",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan path data stabil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 26,
          "project": 2,
          "phase": 3,
          "title": "with open UTF-8",
          "target": "Mampu menjelaskan dan menerapkan with open utf-8",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca serta tulis contoh teks. Minta prediksi sebelum menjalankan dan bandingkan dengan nama kategori beraksen tetap terbaca",
          "practice": "Baca serta tulis contoh teks",
          "check": "Nama kategori beraksen tetap terbaca",
          "fault": "Lokasi data berbeda saat terminal berganti folder",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan with open utf-8; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S26-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca serta tulis contoh teks",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 serta tulis contoh teks",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan with open utf-8; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 27,
          "project": 2,
          "phase": 3,
          "title": "JSON dan skema",
          "target": "Mampu menjelaskan dan menerapkan json dan skema",
          "demo": "Di VS Code, peragakan contoh minimum untuk Simpan list dictionary sebagai JSON. Minta prediksi sebelum menjalankan dan bandingkan dengan id dan tipe nominal dipertahankan",
          "practice": "Simpan list dictionary sebagai JSON",
          "check": "ID dan tipe nominal dipertahankan",
          "fault": "Lokasi data berbeda saat terminal berganti folder",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json dan skema; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S27-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Simpan list dictionary sebagai JSON",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 list dictionary sebagai JSON",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan json dan skema; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 28,
          "project": 2,
          "phase": 3,
          "title": "Muat dan validasi",
          "target": "Mampu menjelaskan dan menerapkan muat dan validasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa struktur sebelum mengganti data aktif. Minta prediksi sebelum menjalankan dan bandingkan dengan file dengan field hilang ditolak",
          "practice": "Periksa struktur sebelum mengganti data aktif",
          "check": "File dengan field hilang ditolak",
          "fault": "Lokasi data berbeda saat terminal berganti folder",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S28-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa struktur sebelum mengganti data aktif",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 struktur sebelum mengganti data aktif",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 29,
          "project": 2,
          "phase": 4,
          "title": "File belum ada",
          "target": "Mampu menjelaskan dan menerapkan file belum ada",
          "demo": "Di VS Code, peragakan contoh minimum untuk Mulai data awal hanya pada FileNotFoundError. Minta prediksi sebelum menjalankan dan bandingkan dengan kesalahan izin tidak disamakan file kosong",
          "practice": "Mulai data awal hanya pada FileNotFoundError",
          "check": "Kesalahan izin tidak disamakan file kosong",
          "fault": "File rusak ditimpa daftar kosong",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file belum ada; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S29-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Mulai data awal hanya pada FileNotFoundError",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 data awal hanya pada FileNotFoundError",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file belum ada; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 30,
          "project": 2,
          "phase": 4,
          "title": "File rusak pada salinan",
          "target": "Mampu menjelaskan dan menerapkan file rusak pada salinan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani JSONDecodeError dan jelaskan pemulihan. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber rusak tetap utuh",
          "practice": "Tangani JSONDecodeError dan jelaskan pemulihan",
          "check": "Sumber rusak tetap utuh",
          "fault": "File rusak ditimpa daftar kosong",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file rusak pada salinan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S30-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani JSONDecodeError dan jelaskan pemulihan",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani JSONDecodeError dan jelaskan pemulihan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file rusak pada salinan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 31,
          "project": 2,
          "phase": 4,
          "title": "Uji regresi dan data baru",
          "target": "Mampu menjelaskan dan menerapkan uji regresi dan data baru",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji filter, saldo, serta buka ulang. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil manual cocok pada dua data",
          "practice": "Uji filter, saldo, serta buka ulang",
          "check": "Hasil manual cocok pada dua data",
          "fault": "File rusak ditimpa daftar kosong",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji regresi dan data baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S31-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji filter, saldo, serta buka ulang",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 filter, saldo, serta buka ulang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji regresi dan data baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 32,
          "project": 2,
          "phase": 4,
          "title": "Presentasi: Pencatat Anggaran Kegiatan",
          "target": "Mampu menjelaskan dan menerapkan presentasi anggaran",
          "demo": "Di VS Code, peragakan contoh minimum untuk Serahkan folder, skema data, dan panduan. Minta prediksi sebelum menjalankan dan bandingkan dengan penguji dapat mengulang hasil",
          "practice": "Serahkan folder, skema data, dan panduan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Penguji dapat mengulang hasil",
          "fault": "File rusak ditimpa daftar kosong",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-pemula-S32-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Serahkan folder, skema data, dan panduan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Pencatat Anggaran Kegiatan 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Serahkan folder, skema data, dan panduan Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 33,
          "project": 3,
          "phase": 1,
          "title": "Audit fungsi ringkasan",
          "target": "Mampu menjelaskan dan menerapkan audit fungsi ringkasan",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Uji fungsi tiga nilai sebelum GUI. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil tidak bergantung input terminal",
          "practice": "Uji fungsi tiga nilai sebelum GUI",
          "check": "Hasil tidak bergantung input terminal",
          "fault": "Callback dijalankan saat tombol dibuat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi ringkasan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S33-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji fungsi tiga nilai sebelum GUI",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 fungsi tiga nilai sebelum GUI",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi ringkasan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 34,
          "project": 3,
          "phase": 1,
          "title": "Pemeriksaan Tkinter",
          "target": "Mampu menjelaskan dan menerapkan pemeriksaan tkinter",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan python -m tkinter pada interpreter kelas. Minta prediksi sebelum menjalankan dan bandingkan dengan versi serta hasil uji perangkat tercatat",
          "practice": "Jalankan python -m tkinter pada interpreter kelas",
          "check": "Versi serta hasil uji perangkat tercatat",
          "fault": "Callback dijalankan saat tombol dibuat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemeriksaan tkinter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S34-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan python -m tkinter pada interpreter kelas",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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 python -m tkinter pada interpreter kelas",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemeriksaan tkinter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 35,
          "project": 3,
          "phase": 1,
          "title": "Tk dan mainloop",
          "target": "Mampu menjelaskan dan menerapkan tk dan mainloop",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buka dan tutup satu root window. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak membuat root untuk setiap tombol",
          "practice": "Buka dan tutup satu root window",
          "check": "Tidak membuat root untuk setiap tombol",
          "fault": "Callback dijalankan saat tombol dibuat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tk dan mainloop; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S35-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buka dan tutup satu root window",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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": "Buka dan tutup satu root window",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tk dan mainloop; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 36,
          "project": 3,
          "phase": 1,
          "title": "Layout ttk dan grid",
          "target": "Mampu menjelaskan dan menerapkan layout ttk dan grid",
          "demo": "Di VS Code, peragakan contoh minimum untuk Rancang tiga Entry, tombol hitung, serta label. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan label mengikuti input",
          "practice": "Rancang tiga Entry, tombol hitung, serta label",
          "check": "Urutan label mengikuti input",
          "fault": "Callback dijalankan saat tombol dibuat",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan layout ttk dan grid; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S36-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Rancang tiga Entry, tombol hitung, serta label",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga Entry, tombol hitung, serta label",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan layout ttk dan grid; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 37,
          "project": 3,
          "phase": 2,
          "title": "Entry dan StringVar",
          "target": "Mampu menjelaskan dan menerapkan entry dan stringvar",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca tiga nilai sebagai teks. Minta prediksi sebelum menjalankan dan bandingkan dengan nilai widget belum dianggap angka",
          "practice": "Baca tiga nilai sebagai teks",
          "check": "Nilai widget belum dianggap angka",
          "fault": "Logika nilai hanya dapat diuji dengan membuka GUI",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan entry dan stringvar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S37-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Baca tiga nilai sebagai teks",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga nilai sebagai teks",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan entry dan stringvar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 38,
          "project": 3,
          "phase": 2,
          "title": "Button command",
          "target": "Mampu menjelaskan dan menerapkan button command",
          "demo": "Di VS Code, peragakan contoh minimum untuk Daftarkan callback tanpa kurung pemanggilan. Minta prediksi sebelum menjalankan dan bandingkan dengan klik memicu handler tepat sekali",
          "practice": "Daftarkan callback tanpa kurung pemanggilan",
          "check": "Klik memicu handler tepat sekali",
          "fault": "Logika nilai hanya dapat diuji dengan membuka GUI",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan button command; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S38-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Daftarkan callback tanpa kurung pemanggilan",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Daftarkan callback tanpa kurung pemanggilan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan button command; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 39,
          "project": 3,
          "phase": 2,
          "title": "Fungsi terpisah",
          "target": "Mampu menjelaskan dan menerapkan fungsi terpisah",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan callback ke fungsi ringkasan. Minta prediksi sebelum menjalankan dan bandingkan dengan fungsi diuji tanpa tk",
          "practice": "Hubungkan callback ke fungsi ringkasan",
          "check": "Fungsi diuji tanpa Tk",
          "fault": "Logika nilai hanya dapat diuji dengan membuka GUI",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S39-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan callback ke fungsi ringkasan",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan callback ke fungsi ringkasan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 40,
          "project": 3,
          "phase": 2,
          "title": "Menampilkan hasil",
          "target": "Mampu menjelaskan dan menerapkan menampilkan hasil",
          "demo": "Di VS Code, peragakan contoh minimum untuk Format rata-rata dengan ketelitian tertulis. Minta prediksi sebelum menjalankan dan bandingkan dengan 70,80,90 tampil sebagai 80",
          "practice": "Format rata-rata dengan ketelitian tertulis",
          "check": "70,80,90 tampil sebagai 80",
          "fault": "Logika nilai hanya dapat diuji dengan membuka GUI",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menampilkan hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S40-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Format rata-rata dengan ketelitian tertulis",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Format rata-rata dengan ketelitian tertulis",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan menampilkan hasil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 41,
          "project": 3,
          "phase": 3,
          "title": "Validasi input kosong",
          "target": "Mampu menjelaskan dan menerapkan validasi input kosong",
          "demo": "Di VS Code, peragakan contoh minimum untuk Berikan pesan sebelum menghitung. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada hasil palsu dari nilai kosong",
          "practice": "Berikan pesan sebelum menghitung",
          "check": "Tidak ada hasil palsu dari nilai kosong",
          "fault": "Hasil sebelumnya tertinggal setelah input gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi input kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S41-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Berikan pesan sebelum menghitung",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Berikan pesan sebelum menghitung",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi input kosong; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 42,
          "project": 3,
          "phase": 3,
          "title": "Konversi dan ValueError",
          "target": "Mampu menjelaskan dan menerapkan konversi dan valueerror",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani input huruf serta desimal. Minta prediksi sebelum menjalankan dan bandingkan dengan jendela tetap terbuka setelah gagal",
          "practice": "Tangani input huruf serta desimal",
          "check": "Jendela tetap terbuka setelah gagal",
          "fault": "Hasil sebelumnya tertinggal setelah input gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi dan valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S42-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tangani input huruf serta desimal",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani input huruf serta desimal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi dan valueerror; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 43,
          "project": 3,
          "phase": 3,
          "title": "Validasi rentang nilai",
          "target": "Mampu menjelaskan dan menerapkan validasi rentang nilai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Batasi setiap nilai 0 sampai 100. Minta prediksi sebelum menjalankan dan bandingkan dengan minus satu dan 101 ditolak",
          "practice": "Batasi setiap nilai 0 sampai 100",
          "check": "Minus satu dan 101 ditolak",
          "fault": "Hasil sebelumnya tertinggal setelah input gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi rentang nilai; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S43-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Batasi setiap nilai 0 sampai 100",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Batasi setiap nilai 0 sampai 100",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi rentang nilai; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 44,
          "project": 3,
          "phase": 3,
          "title": "Reset state",
          "target": "Mampu menjelaskan dan menerapkan reset state",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kosongkan Entry, pesan, serta hasil. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak menyisakan rata-rata lama",
          "practice": "Kosongkan Entry, pesan, serta hasil",
          "check": "Tidak menyisakan rata-rata lama",
          "fault": "Hasil sebelumnya tertinggal setelah input gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan reset state; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S44-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Kosongkan Entry, pesan, serta hasil",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kosongkan Entry, pesan, serta hasil",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan reset state; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 45,
          "project": 3,
          "phase": 4,
          "title": "Respons event loop",
          "target": "Mampu menjelaskan dan menerapkan respons event loop",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji klik cepat dan perubahan input. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak memakai while panjang di callback",
          "practice": "Uji klik cepat dan perubahan input",
          "check": "Tidak memakai while panjang di callback",
          "fault": "Loop terminal memblokir jendela",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan respons event loop; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S45-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji klik cepat dan perubahan input",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 klik cepat dan perubahan input",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan respons event loop; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 46,
          "project": 3,
          "phase": 4,
          "title": "Assert dan kasus batas",
          "target": "Mampu menjelaskan dan menerapkan assert dan kasus batas",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji fungsi dengan nol, seratus, dan data salah. Minta prediksi sebelum menjalankan dan bandingkan dengan kesalahan fungsi terdeteksi otomatis",
          "practice": "Uji fungsi dengan nol, seratus, dan data salah",
          "check": "Kesalahan fungsi terdeteksi otomatis",
          "fault": "Loop terminal memblokir jendela",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert dan kasus batas; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S46-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Uji fungsi dengan nol, seratus, dan data salah",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 fungsi dengan nol, seratus, dan data salah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert dan kasus batas; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 47,
          "project": 3,
          "phase": 4,
          "title": "Uji teman dan revisi",
          "target": "Mampu menjelaskan dan menerapkan uji teman dan revisi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Amati satu pengguna tanpa demo penuh. Minta prediksi sebelum menjalankan dan bandingkan dengan label serta pesan diperbaiki dari bukti",
          "practice": "Amati satu pengguna tanpa demo penuh",
          "check": "Label serta pesan diperbaiki dari bukti",
          "fault": "Loop terminal memblokir jendela",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji teman dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S47-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Amati satu pengguna tanpa demo penuh",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 satu pengguna tanpa demo penuh",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji teman dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 48,
          "project": 3,
          "phase": 4,
          "title": "Presentasi: Kalkulator Nilai Berjendela",
          "target": "Mampu menjelaskan dan menerapkan presentasi kalkulator nilai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan data baru serta reset. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan alur event hingga hasil",
          "practice": "Demonstrasikan data baru serta reset Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Siswa menjelaskan alur event hingga hasil",
          "fault": "Loop terminal memblokir jendela",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-pemula-S48-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan data baru serta reset Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Kalkulator Nilai Berjendela 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan data baru serta reset Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 49,
          "project": 4,
          "phase": 1,
          "title": "Brief aplikasi belajar",
          "target": "Mampu menjelaskan dan menerapkan brief aplikasi belajar",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Tulis tiga skenario pengguna serta kriteria selesai. Minta prediksi sebelum menjalankan dan bandingkan dengan fitur inti dibedakan dari pengayaan",
          "practice": "Tulis tiga skenario pengguna serta kriteria selesai",
          "check": "Fitur inti dibedakan dari pengayaan",
          "fault": "Indeks Listbox dianggap ID permanen",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief aplikasi belajar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S49-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tulis tiga skenario pengguna serta kriteria selesai",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga skenario pengguna serta kriteria selesai",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief aplikasi belajar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 50,
          "project": 4,
          "phase": 1,
          "title": "Model tugas dengan ID",
          "target": "Mampu menjelaskan dan menerapkan model tugas dengan id",
          "demo": "Di VS Code, peragakan contoh minimum untuk Rancang ID, judul, dan boolean status. Minta prediksi sebelum menjalankan dan bandingkan dengan id tetap setelah daftar difilter",
          "practice": "Rancang ID, judul, dan boolean status",
          "check": "ID tetap setelah daftar difilter",
          "fault": "Indeks Listbox dianggap ID permanen",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model tugas dengan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S50-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Rancang ID, judul, dan boolean status",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 ID, judul, dan boolean status",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model tugas dengan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 51,
          "project": 4,
          "phase": 1,
          "title": "Sketsa form dan daftar",
          "target": "Mampu menjelaskan dan menerapkan sketsa form dan daftar",
          "demo": "Di VS Code, peragakan contoh minimum untuk Susun Entry, Listbox, tombol, dan ringkasan. Minta prediksi sebelum menjalankan dan bandingkan dengan alur selesai satu jendela",
          "practice": "Susun Entry, Listbox, tombol, dan ringkasan",
          "check": "Alur selesai satu jendela",
          "fault": "Indeks Listbox dianggap ID permanen",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa form dan daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S51-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Susun Entry, Listbox, tombol, dan ringkasan",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 Entry, Listbox, tombol, dan ringkasan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa form dan daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 52,
          "project": 4,
          "phase": 1,
          "title": "Fungsi data",
          "target": "Mampu menjelaskan dan menerapkan fungsi data",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat tambah, cari, dan tandai berdasarkan ID. Minta prediksi sebelum menjalankan dan bandingkan dengan logika berjalan tanpa gui",
          "practice": "Buat tambah, cari, dan tandai berdasarkan ID",
          "check": "Logika berjalan tanpa GUI",
          "fault": "Indeks Listbox dianggap ID permanen",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi data; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S52-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Buat tambah, cari, dan tandai berdasarkan ID",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tambah, cari, dan tandai berdasarkan ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi data; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 53,
          "project": 4,
          "phase": 2,
          "title": "Form tambah tervalidasi",
          "target": "Mampu menjelaskan dan menerapkan form tambah tervalidasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hubungkan input dengan fungsi tambah. Minta prediksi sebelum menjalankan dan bandingkan dengan judul kosong tidak diterima",
          "practice": "Hubungkan input dengan fungsi tambah",
          "check": "Judul kosong tidak diterima",
          "fault": "Menandai selesai dari hasil filter mengubah tugas lain",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan form tambah tervalidasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S53-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Hubungkan input dengan fungsi tambah",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hubungkan input dengan fungsi tambah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan form tambah tervalidasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 54,
          "project": 4,
          "phase": 2,
          "title": "Render daftar",
          "target": "Mampu menjelaskan dan menerapkan render daftar",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan judul serta status dari model. Minta prediksi sebelum menjalankan dan bandingkan dengan tampilan tidak menjadi sumber data utama",
          "practice": "Tampilkan judul serta status dari model",
          "check": "Tampilan tidak menjadi sumber data utama",
          "fault": "Menandai selesai dari hasil filter mengubah tugas lain",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan render daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S54-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan judul serta status dari model",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan judul serta status dari model",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan render daftar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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.",
              "Ada waktu mesin yang bergantung perangkat; gunakan preview kecil."
            ],
            "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": "Periksa satu frame/preview kecil dalam kelas. Render penuh boleh berjalan setelah sumber dan setelan diperiksa; lama proses mesin tidak menentukan kelulusan.",
            "pilot": {
              "students": null,
              "actualMinutes": null,
              "help": null,
              "minimumMet": null,
              "probeMet": null,
              "nextSupport": null
            }
          }
        },
        {
          "number": 55,
          "project": 4,
          "phase": 2,
          "title": "Pilihan dan ID",
          "target": "Mampu menjelaskan dan menerapkan pilihan dan id",
          "demo": "Di VS Code, peragakan contoh minimum untuk Petakan baris tampilan ke ID tugas. Minta prediksi sebelum menjalankan dan bandingkan dengan filter tidak mengubah sasaran tindakan",
          "practice": "Petakan baris tampilan ke ID tugas",
          "check": "Filter tidak mengubah sasaran tindakan",
          "fault": "Menandai selesai dari hasil filter mengubah tugas lain",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pilihan dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S55-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Petakan baris tampilan ke ID tugas",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 baris tampilan ke ID tugas",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pilihan dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 56,
          "project": 4,
          "phase": 2,
          "title": "Callback selesai",
          "target": "Mampu menjelaskan dan menerapkan callback selesai",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tandai tugas terpilih lalu render ulang. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada baris tambahan",
          "practice": "Tandai tugas terpilih lalu render ulang",
          "check": "Tidak ada baris tambahan",
          "fault": "Menandai selesai dari hasil filter mengubah tugas lain",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan callback selesai; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S56-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tandai tugas terpilih lalu render ulang",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tugas terpilih lalu render ulang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan callback selesai; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 57,
          "project": 4,
          "phase": 3,
          "title": "Pencarian interaktif",
          "target": "Mampu menjelaskan dan menerapkan pencarian interaktif",
          "demo": "Di VS Code, peragakan contoh minimum untuk Filter judul dan tangani hasil kosong. Minta prediksi sebelum menjalankan dan bandingkan dengan kembali ke semua data tidak kehilangan tugas",
          "practice": "Filter judul dan tangani hasil kosong",
          "check": "Kembali ke semua data tidak kehilangan tugas",
          "fault": "Status boolean dimuat sebagai teks",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian interaktif; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S57-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Filter judul dan tangani hasil kosong",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Filter judul dan tangani hasil kosong",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian interaktif; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 58,
          "project": 4,
          "phase": 3,
          "title": "Ringkasan status",
          "target": "Mampu menjelaskan dan menerapkan ringkasan status",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan selesai dan belum dari data utama. Minta prediksi sebelum menjalankan dan bandingkan dengan ringkasan benar saat pencarian aktif",
          "practice": "Tampilkan selesai dan belum dari data utama",
          "check": "Ringkasan benar saat pencarian aktif",
          "fault": "Status boolean dimuat sebagai teks",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan status; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S58-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan selesai dan belum dari data utama",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan selesai dan belum dari data utama",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan status; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 59,
          "project": 4,
          "phase": 3,
          "title": "Simpan JSON",
          "target": "Mampu menjelaskan dan menerapkan simpan json",
          "demo": "Di VS Code, peragakan contoh minimum untuk Serialisasikan ID, judul, dan status. Minta prediksi sebelum menjalankan dan bandingkan dengan widget tidak dimasukkan ke file",
          "practice": "Serialisasikan ID, judul, dan status",
          "check": "Widget tidak dimasukkan ke file",
          "fault": "Status boolean dimuat sebagai teks",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan simpan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S59-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Serialisasikan ID, judul, dan status",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Serialisasikan ID, judul, dan status",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan simpan json; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 60,
          "project": 4,
          "phase": 3,
          "title": "Muat dengan validasi",
          "target": "Mampu menjelaskan dan menerapkan muat dengan validasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa tipe dan ID sebelum mengganti model. Minta prediksi sebelum menjalankan dan bandingkan dengan status tidak berubah menjadi string",
          "practice": "Periksa tipe dan ID sebelum mengganti model",
          "check": "Status tidak berubah menjadi string",
          "fault": "Status boolean dimuat sebagai teks",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dengan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S60-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa tipe dan ID sebelum mengganti model",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tipe dan ID sebelum mengganti model",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan muat dengan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 61,
          "project": 4,
          "phase": 4,
          "title": "File hilang dan rusak",
          "target": "Mampu menjelaskan dan menerapkan file hilang dan rusak",
          "demo": "Di VS Code, peragakan contoh minimum untuk Bedakan data baru dari kegagalan parse. Minta prediksi sebelum menjalankan dan bandingkan dengan data rusak tidak ditimpa otomatis",
          "practice": "Bedakan data baru dari kegagalan parse",
          "check": "Data rusak tidak ditimpa otomatis",
          "fault": "File rusak ditimpa sebelum diperiksa",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file hilang dan rusak; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S61-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Bedakan data baru dari kegagalan parse",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Bedakan data baru dari kegagalan parse",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan file hilang dan rusak; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 62,
          "project": 4,
          "phase": 4,
          "title": "Uji fungsi dan reset",
          "target": "Mampu menjelaskan dan menerapkan uji fungsi dan reset",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa ID salah, judul sama, serta buka ulang. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada perubahan pada tugas lain",
          "practice": "Periksa ID salah, judul sama, serta buka ulang",
          "check": "Tidak ada perubahan pada tugas lain",
          "fault": "File rusak ditimpa sebelum diperiksa",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi dan reset; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S62-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Periksa ID salah, judul sama, serta buka ulang",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 ID salah, judul sama, serta buka ulang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji fungsi dan reset; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 63,
          "project": 4,
          "phase": 4,
          "title": "Uji pengguna dan README",
          "target": "Mampu menjelaskan dan menerapkan uji pengguna dan readme",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman menambah, mencari, menyelesaikan tugas. Minta prediksi sebelum menjalankan dan bandingkan dengan catat hambatan dan perbaiki satu",
          "practice": "Minta teman menambah, mencari, menyelesaikan tugas",
          "check": "Catat hambatan dan perbaiki satu",
          "fault": "File rusak ditimpa sebelum diperiksa",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna dan readme; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-pemula-S63-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman menambah, mencari, menyelesaikan tugas",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman menambah, mencari, menyelesaikan tugas",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna dan readme; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 64,
          "project": 4,
          "phase": 4,
          "title": "Presentasi: Pengatur Tugas Belajar",
          "target": "Mampu menjelaskan dan menerapkan presentasi aplikasi tugas",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan perubahan brief dari penguji. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber dan laporan uji mendukung keputusan",
          "practice": "Demonstrasikan perubahan brief dari penguji Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "check": "Sumber dan laporan uji mendukung keputusan",
          "fault": "File rusak ditimpa sebelum diperiksa",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-pemula-S64-kode-siswa",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan perubahan brief dari penguji Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
          "independentProbe": "Gunakan tema atau data baru pada Pengatur Tugas Belajar 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan perubahan brief dari penguji Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        }
      ],
      "toolRevision": "tools-2026-10-21",
      "toolIds": [
        "vscode"
      ],
      "setup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
      "curriculumRevision": "python-apps-2026-10-24-v1",
      "learningApproach": "Mentor memberi contoh kecil; siswa memprediksi, mencoba variasi, lalu menjelaskan dan memperbaiki hasil."
    },
    {
      "id": "sma-lanjutan",
      "age": "SMA",
      "level": "lanjutan",
      "name": "SMA · Lanjutan",
      "entry": "Dapat menulis fungsi yang terpisah dari GUI, memakai callback Tkinter sederhana, mengelola list/dictionary, memvalidasi input, dan menyimpan JSON. Audit awal mendahului CSV, SQL, serta pengujian otomatis.",
      "target": "Merancang pipeline CSV, repository SQLite, dan aplikasi beberapa tampilan dengan logika terpisah, transaksi konsisten, pengujian otomatis, serta revisi dari kebutuhan pengguna.",
      "scope": "64 sesi × 1 jam; empat proyek: analisis CSV, katalog SQLite, inventaris dua tampilan, lalu perpustakaan mini. Data sintetis 10–30 entri; SQL berparameter, transaksi, unittest, dan laporan lokal. Tidak memerlukan server, login, atau distribusi .exe. Semua file dibuka sebagai satu folder proyek di VS Code dengan interpreter terpilih, terminal terintegrasi, serta debugger.",
      "adaptation": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
      "projects": [
        {
          "name": "Analisis Kegiatan Belajar",
          "topic": "CSV, modul, dan pengujian otomatis",
          "out": "Alat terminal yang memvalidasi CSV kegiatan dan mengekspor ringkasan durasi per kategori.",
          "steps": [
            "Audit fungsi serta JSON, lalu tetapkan skema CSV dan contoh hasil manual",
            "Pisahkan parser, validator, dan agregasi dengan konversi data yang eksplisit",
            "Pelajari assert lalu unittest pada fungsi dan kasus batas sebelum menulis laporan",
            "Ekspor CSV ke file berbeda dan buktikan hasil pada data baru tanpa mengubah sumber"
          ],
          "checks": [
            "Skema serta satuan durasi jelas dan masukan tidak ditimpa",
            "Konversi teks CSV serta validasi menolak baris salah",
            "Unittest membuktikan agregasi serta data kosong",
            "Laporan baru cocok dengan ringkasan manual"
          ],
          "faults": [
            "Durasi CSV dijumlah sebagai string",
            "Parser mencampur pencetakan dan logika agregasi",
            "Pengujian memakai hasil program sendiri sebagai jawaban",
            "Ekspor menimpa data asal"
          ],
          "recipe": "Data membaca 20 menit, sains 30, membaca 10 menghasilkan membaca 30 dan sains 30. csv.DictReader menghasilkan teks; konversikan menit ke int positif. Buka CSV dengan newline kosong dan encoding UTF-8. Input serta output berbeda. Mulai assert, lalu kenali TestCase dan assertEqual pada contoh kecil.",
          "art": "python-sma-lanjutan-p1-apps.svg",
          "number": 1,
          "start": 1,
          "end": 16,
          "novelty": "Siswa merancang pipeline input-validasi-agregasi-output dengan kontrak antarmodul dan pengujian otomatis; hasil berbeda dari kuis serta aplikasi tugas Pemula.",
          "decisions": [
            "Pilih menolak seluruh file atau melaporkan baris salah.",
            "Tentukan kebijakan ID duplikat serta urutan laporan."
          ],
          "transfer": "Penguji memberi header salah dan kategori baru; laporkan kesalahan secara tepat lalu hasilkan ringkasan valid tanpa mengubah input.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Audit fungsi serta JSON, lalu tetapkan skema CSV dan contoh hasil manual",
              "check": "Skema serta satuan durasi jelas dan masukan tidak ditimpa",
              "fault": "Durasi CSV dijumlah sebagai string"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Pisahkan parser, validator, dan agregasi dengan konversi data yang eksplisit",
              "check": "Konversi teks CSV serta validasi menolak baris salah",
              "fault": "Parser mencampur pencetakan dan logika agregasi"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Pelajari assert lalu unittest pada fungsi dan kasus batas sebelum menulis laporan",
              "check": "Unittest membuktikan agregasi serta data kosong",
              "fault": "Pengujian memakai hasil program sendiri sebagai jawaban"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Ekspor CSV ke file berbeda dan buktikan hasil pada data baru tanpa mengubah sumber",
              "check": "Laporan baru cocok dengan ringkasan manual",
              "fault": "Ekspor menimpa data asal"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Alat terminal yang memvalidasi CSV kegiatan dan mengekspor ringkasan durasi per kategori.",
          "minimumChecks": [
            "Skema serta satuan durasi jelas dan masukan tidak ditimpa",
            "Konversi teks CSV serta validasi menolak baris salah",
            "Unittest membuktikan agregasi serta data kosong"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Analisis Kegiatan Belajar dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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": "Katalog Buku Lokal",
          "topic": "SQLite, SQL, dan repository",
          "out": "Katalog terminal dengan ID buku, pencarian, ubah, hapus, serta database SQLite lokal.",
          "steps": [
            "Modelkan tabel, primary key, dan batas judul sebelum mencoba SQLite pada database latihan",
            "Gunakan CREATE, SELECT, INSERT, UPDATE, DELETE dengan parameter SQL",
            "Pisahkan repository dari menu serta pelajari commit, rollback, dan koneksi tertutup",
            "Uji CRUD, judul berapostrof, data kosong, serta persistensi dengan database sementara"
          ],
          "checks": [
            "ID buku unik dan field wajib memiliki validasi",
            "SQL menerima parameter terpisah dari teks query",
            "Perubahan tersimpan sesudah commit dan koneksi ditutup",
            "Pengujian tidak menyentuh database pengguna"
          ],
          "faults": [
            "Judul dijadikan ID sehingga buku berbeda bertabrakan",
            "Input ditempel langsung ke SQL",
            "Perubahan tidak di-commit sebelum koneksi ditutup",
            "Test menghapus database kerja pengguna"
          ],
          "recipe": "Gunakan sqlite3 dengan parameter ?, bukan interpolasi input. Buat tabel buku id INTEGER PRIMARY KEY dan judul TEXT NOT NULL. Tambah Buku A, ubah, cari, hapus melalui ID; uji judul berapostrof. Gunakan database sementara pada unittest dan tutup koneksi setelah operasi.",
          "art": "python-sma-lanjutan-p2-apps.svg",
          "number": 2,
          "start": 17,
          "end": 32,
          "novelty": "Persistensi memakai tabel relasional, identitas baris, dan transaksi; siswa merancang repository yang dapat diuji, bukan sekadar mengganti file JSON Pemula.",
          "decisions": [
            "Tentukan field wajib dan kebijakan judul sama.",
            "Pilih respons ketika ID tidak ditemukan."
          ],
          "transfer": "Penguji menambah judul berapostrof serta meminta ubah ID yang tidak ada; data valid harus tetap utuh dan hasil dapat dijelaskan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "toolNote": "Jalankan program melalui terminal VS Code; nama perintah Python mengikuti interpreter perangkat. Gunakan data sintetis dan pustaka standar.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Modelkan tabel, primary key, dan batas judul sebelum mencoba SQLite pada database latihan",
              "check": "ID buku unik dan field wajib memiliki validasi",
              "fault": "Judul dijadikan ID sehingga buku berbeda bertabrakan"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Gunakan CREATE, SELECT, INSERT, UPDATE, DELETE dengan parameter SQL",
              "check": "SQL menerima parameter terpisah dari teks query",
              "fault": "Input ditempel langsung ke SQL"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Pisahkan repository dari menu serta pelajari commit, rollback, dan koneksi tertutup",
              "check": "Perubahan tersimpan sesudah commit dan koneksi ditutup",
              "fault": "Perubahan tidak di-commit sebelum koneksi ditutup"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji CRUD, judul berapostrof, data kosong, serta persistensi dengan database sementara",
              "check": "Pengujian tidak menyentuh database pengguna",
              "fault": "Test menghapus database kerja pengguna"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Katalog terminal dengan ID buku, pencarian, ubah, hapus, serta database SQLite lokal.",
          "minimumChecks": [
            "ID buku unik dan field wajib memiliki validasi",
            "SQL menerima parameter terpisah dari teks query",
            "Perubahan tersimpan sesudah commit dan koneksi ditutup"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Katalog Buku Lokal dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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": "Inventaris Kelas",
          "topic": "GUI, SQLite, dan pemisahan tanggung jawab",
          "out": "Aplikasi dua tampilan untuk daftar barang dan ringkasan stok dengan database lokal.",
          "steps": [
            "Rancang brief, model barang, serta pemisahan tampilan, layanan validasi, dan repository",
            "Bangun dua Frame atau ttk.Notebook serta Treeview dengan pemilihan ID",
            "Hubungkan tambah, ubah stok, cari, dan ringkasan melalui callback serta transaksi",
            "Uji fungsi otomatis dan alur GUI, lalu revisi aplikasi berdasarkan pengguna"
          ],
          "checks": [
            "Kebutuhan dan pembagian modul dapat dijelaskan",
            "Pilihan tabel dipetakan ke ID database",
            "Stok negatif serta teks salah ditolak sebelum perubahan",
            "Ringkasan dan database sesuai setelah buka ulang"
          ],
          "faults": [
            "Kode widget sekaligus menyusun SQL tanpa batas modul",
            "Indeks hasil pencarian dianggap primary key",
            "Stok minus disimpan sebelum validasi",
            "Tampilan ringkasan tidak diperbarui setelah commit"
          ],
          "recipe": "Batasi barang pada id,nama,stok integer nonnegatif. Dua tampilan: katalog barang dan ringkasan jumlah jenis serta total stok. SQL berparameter pada repository; callback memanggil layanan lalu render ulang. Uji penolakan stok -1 tanpa mengubah stok sebelumnya.",
          "art": "python-sma-lanjutan-p3-apps.svg",
          "number": 3,
          "start": 33,
          "end": 48,
          "novelty": "Aplikasi menghubungkan dua tampilan, layanan validasi, dan repository SQLite; siswa harus menjaga konsistensi antarlapisan ketika data berubah.",
          "decisions": [
            "Pilih label dan alur perubahan stok.",
            "Tentukan kapan kedua tampilan disegarkan."
          ],
          "transfer": "Penguji memfilter barang lalu mencoba stok negatif dan stok nol; sasaran ID serta ringkasan harus tetap konsisten.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Rancang brief, model barang, serta pemisahan tampilan, layanan validasi, dan repository",
              "check": "Kebutuhan dan pembagian modul dapat dijelaskan",
              "fault": "Kode widget sekaligus menyusun SQL tanpa batas modul"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Bangun dua Frame atau ttk.Notebook serta Treeview dengan pemilihan ID",
              "check": "Pilihan tabel dipetakan ke ID database",
              "fault": "Indeks hasil pencarian dianggap primary key"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Hubungkan tambah, ubah stok, cari, dan ringkasan melalui callback serta transaksi",
              "check": "Stok negatif serta teks salah ditolak sebelum perubahan",
              "fault": "Stok minus disimpan sebelum validasi"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji fungsi otomatis dan alur GUI, lalu revisi aplikasi berdasarkan pengguna",
              "check": "Ringkasan dan database sesuai setelah buka ulang",
              "fault": "Tampilan ringkasan tidak diperbarui setelah commit"
            }
          ],
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi dua tampilan untuk daftar barang dan ringkasan stok dengan database lokal.",
          "minimumChecks": [
            "Kebutuhan dan pembagian modul dapat dijelaskan",
            "Pilihan tabel dipetakan ke ID database",
            "Stok negatif serta teks salah ditolak sebelum perubahan"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Inventaris Kelas dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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": "Perpustakaan Mini",
          "topic": "Proyek aplikasi mandiri dan transaksi",
          "out": "Aplikasi buku serta peminjaman lokal dengan pencarian, transaksi, laporan, dan bukti uji.",
          "steps": [
            "Susun kebutuhan pengguna dan model buku-peminjaman dengan batas fitur yang disepakati",
            "Bangun dua tampilan dan alur pinjam-kembali dengan ID serta SQL berparameter",
            "Jaga stok dan status melalui transaksi atomik, pengujian otomatis, serta laporan CSV",
            "Uji brief baru bersama pengguna, revisi, dan serahkan folder aplikasi serta dokumentasi"
          ],
          "checks": [
            "Brief memuat kasus normal, batas stok, serta kriteria selesai",
            "Pinjam dan kembali memakai ID buku serta ID pinjaman yang tepat",
            "Pinjam gagal tidak mengubah stok dan pengembalian tidak diproses dua kali",
            "Aplikasi, DB latihan, laporan, README, serta hasil test dapat dibuka ulang"
          ],
          "faults": [
            "Nama peminjam dijadikan pengganti ID pinjaman",
            "Pencarian menghilangkan pemetaan ID buku",
            "Stok berubah walau pencatatan pinjaman gagal",
            "Klik kembali berulang menambah stok berkali-kali"
          ],
          "recipe": "Data sintetis: Buku A stok 1. Pinjam sekali menjadi stok 0 dan satu pinjaman aktif. Pinjam berikutnya ditolak tanpa perubahan. Kembalikan ID pinjaman tersebut menjadi stok 1; kembali kedua ditolak. Gabungkan perubahan stok dan pinjaman dalam satu transaksi SQLite. Dua tampilan: buku dan pinjaman. Laporan CSV disimpan pada file baru.",
          "art": "python-sma-lanjutan-p4-apps.svg",
          "number": 4,
          "start": 49,
          "end": 64,
          "novelty": "Proyek akhir dibangun dari brief baru yang menggabungkan dua entitas dan transaksi atomik, berbeda dari aplikasi tugas JSON pada Pemula serta CRUD satu tabel.",
          "decisions": [
            "Tentukan data minimum peminjam memakai data sintetis.",
            "Prioritaskan alur stok konsisten sebelum fitur tambahan."
          ],
          "transfer": "Penguji meminjam buku terakhir lalu mencoba pinjam ulang dan mengembalikan pinjaman dua kali; stok serta status harus tetap benar setelah aplikasi dibuka ulang.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "deliverables": "README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "toolNote": "Gunakan satu Tk dan mainloop(); callback memanggil fungsi data, tanpa input() atau loop panjang yang memblokir jendela. Sumber tetap .py, bukan .exe.",
          "artCaption": "Ilustrasi alur dan antarmuka konsep proyek; hasil siswa dibangun serta diuji di Python melalui VS Code.",
          "stages": [
            {
              "title": "Model dan kontrak",
              "task": "Susun kebutuhan pengguna dan model buku-peminjaman dengan batas fitur yang disepakati",
              "check": "Brief memuat kasus normal, batas stok, serta kriteria selesai",
              "fault": "Nama peminjam dijadikan pengganti ID pinjaman"
            },
            {
              "title": "Implementasi fungsi",
              "task": "Bangun dua tampilan dan alur pinjam-kembali dengan ID serta SQL berparameter",
              "check": "Pinjam dan kembali memakai ID buku serta ID pinjaman yang tepat",
              "fault": "Pencarian menghilangkan pemetaan ID buku"
            },
            {
              "title": "Validasi dan integrasi",
              "task": "Jaga stok dan status melalui transaksi atomik, pengujian otomatis, serta laporan CSV",
              "check": "Pinjam gagal tidak mengubah stok dan pengembalian tidak diproses dua kali",
              "fault": "Stok berubah walau pencatatan pinjaman gagal"
            },
            {
              "title": "Pengujian brief baru",
              "task": "Uji brief baru bersama pengguna, revisi, dan serahkan folder aplikasi serta dokumentasi",
              "check": "Aplikasi, DB latihan, laporan, README, serta hasil test dapat dibuka ulang",
              "fault": "Klik kembali berulang menambah stok berkali-kali"
            }
          ],
          "samplePath": "contoh/sma-lanjutan/app.py",
          "sampleReadme": "contoh/sma-lanjutan/README.md",
          "sampleTest": "contoh/sma-lanjutan/test_app.py",
          "artWidth": 800,
          "artHeight": 440,
          "minimumOutcome": "Aplikasi buku serta peminjaman lokal dengan pencarian, transaksi, laporan, dan bukti uji.",
          "minimumChecks": [
            "Brief memuat kasus normal, batas stok, serta kriteria selesai",
            "Pinjam dan kembali memakai ID buku serta ID pinjaman yang tepat",
            "Pinjam gagal tidak mengubah stok dan pengembalian tidak diproses dua kali"
          ],
          "enrichment": "Setelah hasil minimum lolos, buat satu variasi aturan atau data pada proyek Perpustakaan Mini dan bandingkan hasilnya; jangan menambah banyak fitur sekaligus.",
          "transferTask": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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 fungsi dan struktur data",
          "target": "Mampu menjelaskan dan menerapkan audit fungsi dan struktur data",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Telusuri fungsi terpisah pada contoh kegiatan. Minta prediksi sebelum menjalankan dan bandingkan dengan prasyarat input-loop-fungsi-data terlihat mandiri",
          "practice": "Telusuri fungsi terpisah pada contoh kegiatan",
          "check": "Prasyarat input-loop-fungsi-data terlihat mandiri",
          "fault": "Durasi CSV dijumlah sebagai string",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi dan struktur data; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S01-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Telusuri fungsi terpisah pada contoh kegiatan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 10,
            "guidedMinutes": 10,
            "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 fungsi terpisah pada contoh kegiatan",
            "understanding": "Tutup lalu buka kembali sumber, ulangi satu tindakan tanpa mengikuti klik mentor dan jelaskan apa yang berubah.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan audit fungsi dan struktur data; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 5,
              "max": 10,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan memiliki slot terpisah."
            },
            "workloadFactors": [
              "Belajar orientasi alat dan simpan-buka ulang.",
              "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
            }
          }
        },
        {
          "number": 2,
          "project": 1,
          "phase": 1,
          "title": "Skema dan hasil manual",
          "target": "Mampu menjelaskan dan menerapkan skema dan hasil manual",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan id, kategori, menit dan hitung contoh. Minta prediksi sebelum menjalankan dan bandingkan dengan satuan serta kategori kosong terdefinisi",
          "practice": "Tetapkan id, kategori, menit dan hitung contoh",
          "check": "Satuan serta kategori kosong terdefinisi",
          "fault": "Durasi CSV dijumlah sebagai string",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan skema dan hasil manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S02-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan id, kategori, menit dan hitung contoh",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan id, kategori, menit dan hitung contoh",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan skema dan hasil manual; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 3,
          "project": 1,
          "phase": 1,
          "title": "csv.DictReader",
          "target": "Mampu menjelaskan dan menerapkan csv.dictreader",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca header dan tiga baris sintetis. Minta prediksi sebelum menjalankan dan bandingkan dengan parser mengenali kolom tanpa indeks tetap",
          "practice": "Baca header dan tiga baris sintetis",
          "check": "Parser mengenali kolom tanpa indeks tetap",
          "fault": "Durasi CSV dijumlah sebagai string",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan csv.dictreader; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S03-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Baca header dan tiga baris sintetis",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 header dan tiga baris sintetis",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan csv.dictreader; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 4,
          "project": 1,
          "phase": 1,
          "title": "Konversi dan validasi",
          "target": "Mampu menjelaskan dan menerapkan konversi dan validasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Konversi menit dan kumpulkan nomor baris salah. Minta prediksi sebelum menjalankan dan bandingkan dengan huruf serta nilai negatif ditolak",
          "practice": "Konversi menit dan kumpulkan nomor baris salah",
          "check": "Huruf serta nilai negatif ditolak",
          "fault": "Durasi CSV dijumlah sebagai string",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi dan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S04-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Konversi menit dan kumpulkan nomor baris salah",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Konversi menit dan kumpulkan nomor baris salah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan konversi dan validasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 5,
          "project": 1,
          "phase": 2,
          "title": "Fungsi agregasi",
          "target": "Mampu menjelaskan dan menerapkan fungsi agregasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jumlahkan menit tiap kategori pada dictionary baru. Minta prediksi sebelum menjalankan dan bandingkan dengan membaca 20 dan 10 menjadi 30",
          "practice": "Jumlahkan menit tiap kategori pada dictionary baru",
          "check": "Membaca 20 dan 10 menjadi 30",
          "fault": "Parser mencampur pencetakan dan logika agregasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi agregasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S05-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Jumlahkan menit tiap kategori pada dictionary baru",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Jumlahkan menit tiap kategori pada dictionary baru",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan fungsi agregasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 6,
          "project": 1,
          "phase": 2,
          "title": "Pemecahan modul",
          "target": "Mampu menjelaskan dan menerapkan pemecahan modul",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan parser dan logika pada file berbeda. Minta prediksi sebelum menjalankan dan bandingkan dengan modul logika tidak membaca file saat diimpor",
          "practice": "Pisahkan parser dan logika pada file berbeda",
          "check": "Modul logika tidak membaca file saat diimpor",
          "fault": "Parser mencampur pencetakan dan logika agregasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemecahan modul; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S06-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan parser dan logika pada file berbeda",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan parser dan logika pada file berbeda",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemecahan modul; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 7,
          "project": 1,
          "phase": 2,
          "title": "Assert sebelum framework",
          "target": "Mampu menjelaskan dan menerapkan assert sebelum framework",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji dua fungsi kecil dengan assert. Minta prediksi sebelum menjalankan dan bandingkan dengan kasus salah benar-benar gagal",
          "practice": "Uji dua fungsi kecil dengan assert",
          "check": "Kasus salah benar-benar gagal",
          "fault": "Parser mencampur pencetakan dan logika agregasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert sebelum framework; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S07-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji dua fungsi kecil dengan assert",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 fungsi kecil dengan assert",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan assert sebelum framework; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 8,
          "project": 1,
          "phase": 2,
          "title": "Unittest dasar",
          "target": "Mampu menjelaskan dan menerapkan unittest dasar",
          "demo": "Di VS Code, peragakan contoh minimum untuk Kenali TestCase, assertEqual, dan discovery. Minta prediksi sebelum menjalankan dan bandingkan dengan satu test dapat ditemukan dan dijalankan",
          "practice": "Kenali TestCase, assertEqual, dan discovery",
          "check": "Satu test dapat ditemukan dan dijalankan",
          "fault": "Parser mencampur pencetakan dan logika agregasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest dasar; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S08-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Kenali TestCase, assertEqual, dan discovery",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Kenali TestCase, assertEqual, dan discovery",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest dasar; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 9,
          "project": 1,
          "phase": 3,
          "title": "Kasus kosong dan duplikat",
          "target": "Mampu menjelaskan dan menerapkan kasus kosong dan duplikat",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tulis aturan ID serta file tanpa baris. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil jelas dan tidak membagi nol",
          "practice": "Tulis aturan ID serta file tanpa baris",
          "check": "Hasil jelas dan tidak membagi nol",
          "fault": "Pengujian memakai hasil program sendiri sebagai jawaban",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus kosong dan duplikat; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S09-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tulis aturan ID serta file tanpa baris",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tulis aturan ID serta file tanpa baris",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kasus kosong dan duplikat; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 10,
          "project": 1,
          "phase": 3,
          "title": "Kesalahan header",
          "target": "Mampu menjelaskan dan menerapkan kesalahan header",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak kolom wajib yang hilang. Minta prediksi sebelum menjalankan dan bandingkan dengan pesan menunjukkan skema yang diharapkan",
          "practice": "Tolak kolom wajib yang hilang",
          "check": "Pesan menunjukkan skema yang diharapkan",
          "fault": "Pengujian memakai hasil program sendiri sebagai jawaban",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kesalahan header; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S10-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tolak kolom wajib yang hilang",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak kolom wajib yang hilang",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan kesalahan header; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 11,
          "project": 1,
          "phase": 3,
          "title": "Laporan CSV terpisah",
          "target": "Mampu menjelaskan dan menerapkan laporan csv terpisah",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tulis ringkasan melalui DictWriter. Minta prediksi sebelum menjalankan dan bandingkan dengan file sumber tidak berubah",
          "practice": "Tulis ringkasan melalui DictWriter",
          "check": "File sumber tidak berubah",
          "fault": "Pengujian memakai hasil program sendiri sebagai jawaban",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan laporan csv terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S11-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tulis ringkasan melalui DictWriter",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tulis ringkasan melalui DictWriter",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan laporan csv terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 12,
          "project": 1,
          "phase": 3,
          "title": "newline dan encoding",
          "target": "Mampu menjelaskan dan menerapkan newline dan encoding",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji baris beraksen serta pembukaan ulang CSV. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada baris kosong tambahan",
          "practice": "Uji baris beraksen serta pembukaan ulang CSV",
          "check": "Tidak ada baris kosong tambahan",
          "fault": "Pengujian memakai hasil program sendiri sebagai jawaban",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan newline dan encoding; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S12-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih menolak seluruh file atau melaporkan baris salah.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji baris beraksen serta pembukaan ulang CSV",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 baris beraksen serta pembukaan ulang CSV",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan newline dan encoding; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 13,
          "project": 1,
          "phase": 4,
          "title": "Uji otomatis pipeline",
          "target": "Mampu menjelaskan dan menerapkan uji otomatis pipeline",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji parser melalui file sementara. Minta prediksi sebelum menjalankan dan bandingkan dengan test tidak bergantung data pribadi",
          "practice": "Uji parser melalui file sementara",
          "check": "Test tidak bergantung data pribadi",
          "fault": "Ekspor menimpa data asal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji otomatis pipeline; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S13-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji parser melalui file sementara",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 parser melalui file sementara",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji otomatis pipeline; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 14,
          "project": 1,
          "phase": 4,
          "title": "Data baru dari penguji",
          "target": "Mampu menjelaskan dan menerapkan data baru dari penguji",
          "demo": "Di VS Code, peragakan contoh minimum untuk Proses kategori dan durasi yang belum dicontohkan. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil cocok dengan hitungan independen",
          "practice": "Proses kategori dan durasi yang belum dicontohkan",
          "check": "Hasil cocok dengan hitungan independen",
          "fault": "Ekspor menimpa data asal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan data baru dari penguji; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S14-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Proses kategori dan durasi yang belum dicontohkan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Proses kategori dan durasi yang belum dicontohkan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan data baru dari penguji; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 15,
          "project": 1,
          "phase": 4,
          "title": "Dokumentasi batas",
          "target": "Mampu menjelaskan dan menerapkan dokumentasi batas",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jelaskan unit, kebijakan data salah, serta hasil. Minta prediksi sebelum menjalankan dan bandingkan dengan readme tidak menjanjikan analisis tanpa batas",
          "practice": "Jelaskan unit, kebijakan data salah, serta hasil",
          "check": "README tidak menjanjikan analisis tanpa batas",
          "fault": "Ekspor menimpa data asal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dokumentasi batas; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S15-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Jelaskan unit, kebijakan data salah, serta hasil",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Jelaskan unit, kebijakan data salah, serta hasil",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan dokumentasi batas; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 16,
          "project": 1,
          "phase": 4,
          "title": "Presentasi: Analisis Kegiatan Belajar",
          "target": "Mampu menjelaskan dan menerapkan presentasi analisis",
          "demo": "Di VS Code, peragakan contoh minimum untuk Serahkan modul, CSV sintetis, dan hasil unittest. Minta prediksi sebelum menjalankan dan bandingkan dengan brief baru dijalankan dari terminal",
          "practice": "Serahkan modul, CSV sintetis, dan hasil unittest Penguji memberi header salah dan kategori baru; laporkan kesalahan secara tepat lalu hasilkan ringkasan valid tanpa mengubah input. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "check": "Brief baru dijalankan dari terminal",
          "fault": "Ekspor menimpa data asal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-lanjutan-S16-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kebijakan ID duplikat serta urutan laporan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Serahkan modul, CSV sintetis, dan hasil unittest Penguji memberi header salah dan kategori baru; laporkan kesalahan secara tepat lalu hasilkan ringkasan valid tanpa mengubah input. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Analisis Kegiatan Belajar. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Serahkan modul, CSV sintetis, dan hasil unittest Penguji memberi header salah dan kategori baru; laporkan kesalahan secara tepat lalu hasilkan ringkasan valid tanpa mengubah input. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 17,
          "project": 2,
          "phase": 1,
          "title": "Model relasional kecil",
          "target": "Mampu menjelaskan dan menerapkan model relasional kecil",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Di VS Code, peragakan contoh minimum untuk Tentukan field buku serta arti primary key. Minta prediksi sebelum menjalankan dan bandingkan dengan judul sama tidak dianggap id sama",
          "practice": "Tentukan field buku serta arti primary key",
          "check": "Judul sama tidak dianggap ID sama",
          "fault": "Judul dijadikan ID sehingga buku berbeda bertabrakan",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model relasional kecil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S17-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tentukan field buku serta arti primary key",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tentukan field buku serta arti primary key",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model relasional kecil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 18,
          "project": 2,
          "phase": 1,
          "title": "Pemeriksaan sqlite3",
          "target": "Mampu menjelaskan dan menerapkan pemeriksaan sqlite3",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buka database latihan pada folder proyek. Minta prediksi sebelum menjalankan dan bandingkan dengan lokasi file db tercatat",
          "practice": "Buka database latihan pada folder proyek",
          "check": "Lokasi file DB tercatat",
          "fault": "Judul dijadikan ID sehingga buku berbeda bertabrakan",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemeriksaan sqlite3; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S18-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Buka database latihan pada folder proyek",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Buka database latihan pada folder proyek",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemeriksaan sqlite3; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 19,
          "project": 2,
          "phase": 1,
          "title": "CREATE TABLE",
          "target": "Mampu menjelaskan dan menerapkan create table",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat tabel buku dan batas field wajib. Minta prediksi sebelum menjalankan dan bandingkan dengan tabel terbentuk pada database kosong",
          "practice": "Buat tabel buku dan batas field wajib",
          "check": "Tabel terbentuk pada database kosong",
          "fault": "Judul dijadikan ID sehingga buku berbeda bertabrakan",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan create table; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S19-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Buat tabel buku dan batas field wajib",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tabel buku dan batas field wajib",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan create table; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 20,
          "project": 2,
          "phase": 1,
          "title": "SELECT dan baris",
          "target": "Mampu menjelaskan dan menerapkan select dan baris",
          "demo": "Di VS Code, peragakan contoh minimum untuk Baca katalog kosong serta tiga buku. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan hasil ditetapkan",
          "practice": "Baca katalog kosong serta tiga buku",
          "check": "Urutan hasil ditetapkan",
          "fault": "Judul dijadikan ID sehingga buku berbeda bertabrakan",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan select dan baris; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S20-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Baca katalog kosong serta tiga buku",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 katalog kosong serta tiga buku",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan select dan baris; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 21,
          "project": 2,
          "phase": 2,
          "title": "INSERT berparameter",
          "target": "Mampu menjelaskan dan menerapkan insert berparameter",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tambahkan judul melalui placeholder ?. Minta prediksi sebelum menjalankan dan bandingkan dengan judul berapostrof tersimpan utuh",
          "practice": "Tambahkan judul melalui placeholder ?",
          "check": "Judul berapostrof tersimpan utuh",
          "fault": "Input ditempel langsung ke SQL",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan insert berparameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S21-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tambahkan judul melalui placeholder ?",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tambahkan judul melalui placeholder ?",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan insert berparameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 22,
          "project": 2,
          "phase": 2,
          "title": "Validasi form terminal",
          "target": "Mampu menjelaskan dan menerapkan validasi form terminal",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tolak judul kosong sebelum SQL. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak ada baris kosong baru",
          "practice": "Tolak judul kosong sebelum SQL",
          "check": "Tidak ada baris kosong baru",
          "fault": "Input ditempel langsung ke SQL",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi form terminal; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S22-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tolak judul kosong sebelum SQL",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tolak judul kosong sebelum SQL",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan validasi form terminal; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 23,
          "project": 2,
          "phase": 2,
          "title": "UPDATE berdasarkan ID",
          "target": "Mampu menjelaskan dan menerapkan update berdasarkan id",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ubah satu buku pada ID terpilih. Minta prediksi sebelum menjalankan dan bandingkan dengan baris lain tidak berubah",
          "practice": "Ubah satu buku pada ID terpilih",
          "check": "Baris lain tidak berubah",
          "fault": "Input ditempel langsung ke SQL",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan update berdasarkan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S23-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Ubah satu buku pada ID terpilih",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 satu buku pada ID terpilih",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan update berdasarkan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 24,
          "project": 2,
          "phase": 2,
          "title": "DELETE dan konfirmasi",
          "target": "Mampu menjelaskan dan menerapkan delete dan konfirmasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hapus satu ID setelah keputusan eksplisit. Minta prediksi sebelum menjalankan dan bandingkan dengan id tidak ditemukan memberi hasil jelas",
          "practice": "Hapus satu ID setelah keputusan eksplisit",
          "check": "ID tidak ditemukan memberi hasil jelas",
          "fault": "Input ditempel langsung ke SQL",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan delete dan konfirmasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S24-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Hapus satu ID setelah keputusan eksplisit",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hapus satu ID setelah keputusan eksplisit",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan delete dan konfirmasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 25,
          "project": 2,
          "phase": 3,
          "title": "Commit dan rollback",
          "target": "Mampu menjelaskan dan menerapkan commit dan rollback",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji simpan perubahan dan pembatalan transaksi. Minta prediksi sebelum menjalankan dan bandingkan dengan kegagalan tidak menyisakan perubahan separuh",
          "practice": "Uji simpan perubahan dan pembatalan transaksi",
          "check": "Kegagalan tidak menyisakan perubahan separuh",
          "fault": "Perubahan tidak di-commit sebelum koneksi ditutup",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan commit dan rollback; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S25-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji simpan perubahan dan pembatalan transaksi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 simpan perubahan dan pembatalan transaksi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan commit dan rollback; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 26,
          "project": 2,
          "phase": 3,
          "title": "Pencarian berparameter",
          "target": "Mampu menjelaskan dan menerapkan pencarian berparameter",
          "demo": "Di VS Code, peragakan contoh minimum untuk Cari kata judul dengan nilai parameter. Minta prediksi sebelum menjalankan dan bandingkan dengan input bukan bagian teks sql",
          "practice": "Cari kata judul dengan nilai parameter",
          "check": "Input bukan bagian teks SQL",
          "fault": "Perubahan tidak di-commit sebelum koneksi ditutup",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian berparameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S26-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Cari kata judul dengan nilai parameter",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Cari kata judul dengan nilai parameter",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian berparameter; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 27,
          "project": 2,
          "phase": 3,
          "title": "Repository terpisah",
          "target": "Mampu menjelaskan dan menerapkan repository terpisah",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan akses DB dari menu terminal. Minta prediksi sebelum menjalankan dan bandingkan dengan repository dapat dipanggil test",
          "practice": "Pisahkan akses DB dari menu terminal",
          "check": "Repository dapat dipanggil test",
          "fault": "Perubahan tidak di-commit sebelum koneksi ditutup",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan repository terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S27-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan akses DB dari menu terminal",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan akses DB dari menu terminal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan repository terpisah; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 28,
          "project": 2,
          "phase": 3,
          "title": "Koneksi dan penutupan",
          "target": "Mampu menjelaskan dan menerapkan koneksi dan penutupan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tutup koneksi pada alur berhasil maupun gagal. Minta prediksi sebelum menjalankan dan bandingkan dengan file dapat dibuka ulang setelah operasi",
          "practice": "Tutup koneksi pada alur berhasil maupun gagal",
          "check": "File dapat dibuka ulang setelah operasi",
          "fault": "Perubahan tidak di-commit sebelum koneksi ditutup",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan koneksi dan penutupan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S28-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan field wajib dan kebijakan judul sama.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tutup koneksi pada alur berhasil maupun gagal",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tutup koneksi pada alur berhasil maupun gagal",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan koneksi dan penutupan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 29,
          "project": 2,
          "phase": 4,
          "title": "Unittest DB sementara",
          "target": "Mampu menjelaskan dan menerapkan unittest db sementara",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pakai TemporaryDirectory untuk setiap test. Minta prediksi sebelum menjalankan dan bandingkan dengan database kelas tidak tersentuh",
          "practice": "Pakai TemporaryDirectory untuk setiap test",
          "check": "Database kelas tidak tersentuh",
          "fault": "Test menghapus database kerja pengguna",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest db sementara; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S29-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Pakai TemporaryDirectory untuk setiap test",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pakai TemporaryDirectory untuk setiap test",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest db sementara; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 30,
          "project": 2,
          "phase": 4,
          "title": "Regresi CRUD",
          "target": "Mampu menjelaskan dan menerapkan regresi crud",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji tambah-ubah-cari-hapus serta ID salah. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil diperiksa dengan select terpisah",
          "practice": "Uji tambah-ubah-cari-hapus serta ID salah",
          "check": "Hasil diperiksa dengan SELECT terpisah",
          "fault": "Test menghapus database kerja pengguna",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan regresi crud; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S30-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji tambah-ubah-cari-hapus serta ID salah",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 tambah-ubah-cari-hapus serta ID salah",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan regresi crud; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 31,
          "project": 2,
          "phase": 4,
          "title": "Pemulihan dan README",
          "target": "Mampu menjelaskan dan menerapkan pemulihan dan readme",
          "demo": "Di VS Code, peragakan contoh minimum untuk Catat cara backup ketika aplikasi ditutup. Minta prediksi sebelum menjalankan dan bandingkan dengan petunjuk cocok dengan lokasi db",
          "practice": "Catat cara backup ketika aplikasi ditutup",
          "check": "Petunjuk cocok dengan lokasi DB",
          "fault": "Test menghapus database kerja pengguna",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemulihan dan readme; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S31-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Catat cara backup ketika aplikasi ditutup",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 cara backup ketika aplikasi ditutup",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pemulihan dan readme; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 32,
          "project": 2,
          "phase": 4,
          "title": "Presentasi: Katalog Buku Lokal",
          "target": "Mampu menjelaskan dan menerapkan presentasi katalog",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji data baru dari penguji. Minta prediksi sebelum menjalankan dan bandingkan dengan siswa menjelaskan parameter serta commit",
          "practice": "Uji data baru dari penguji Penguji menambah judul berapostrof serta meminta ubah ID yang tidak ada; data valid harus tetap utuh dan hasil dapat dijelaskan. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "check": "Siswa menjelaskan parameter serta commit",
          "fault": "Test menghapus database kerja pengguna",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-lanjutan-S32-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Pilih respons ketika ID tidak ditemukan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji data baru dari penguji Penguji menambah judul berapostrof serta meminta ubah ID yang tidak ada; data valid harus tetap utuh dan hasil dapat dijelaskan. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Katalog Buku Lokal. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Uji data baru dari penguji Penguji menambah judul berapostrof serta meminta ubah ID yang tidak ada; data valid harus tetap utuh dan hasil dapat dijelaskan. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 33,
          "project": 3,
          "phase": 1,
          "title": "Brief inventaris kecil",
          "target": "Mampu menjelaskan dan menerapkan brief inventaris kecil",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Tulis tiga skenario dan kriteria hasil. Minta prediksi sebelum menjalankan dan bandingkan dengan login serta server bukan bagian brief",
          "practice": "Tulis tiga skenario dan kriteria hasil",
          "check": "Login serta server bukan bagian brief",
          "fault": "Kode widget sekaligus menyusun SQL tanpa batas modul",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief inventaris kecil; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S33-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tulis tiga skenario dan kriteria hasil",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tiga skenario dan kriteria hasil",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief inventaris kecil; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 34,
          "project": 3,
          "phase": 1,
          "title": "Diagram modul",
          "target": "Mampu menjelaskan dan menerapkan diagram modul",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan view, service, dan repository. Minta prediksi sebelum menjalankan dan bandingkan dengan arah pemanggilan dapat dijelaskan",
          "practice": "Pisahkan view, service, dan repository",
          "check": "Arah pemanggilan dapat dijelaskan",
          "fault": "Kode widget sekaligus menyusun SQL tanpa batas modul",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan diagram modul; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S34-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan view, service, dan repository",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan view, service, dan repository",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan diagram modul; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 35,
          "project": 3,
          "phase": 1,
          "title": "Model stok",
          "target": "Mampu menjelaskan dan menerapkan model stok",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tetapkan ID, nama, serta integer nonnegatif. Minta prediksi sebelum menjalankan dan bandingkan dengan stok nol tetap valid",
          "practice": "Tetapkan ID, nama, serta integer nonnegatif",
          "check": "Stok nol tetap valid",
          "fault": "Kode widget sekaligus menyusun SQL tanpa batas modul",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S35-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tetapkan ID, nama, serta integer nonnegatif",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tetapkan ID, nama, serta integer nonnegatif",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 36,
          "project": 3,
          "phase": 1,
          "title": "Sketsa dua tampilan",
          "target": "Mampu menjelaskan dan menerapkan sketsa dua tampilan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Rancang daftar dan ringkasan pada Notebook. Minta prediksi sebelum menjalankan dan bandingkan dengan navigasi kembali jelas",
          "practice": "Rancang daftar dan ringkasan pada Notebook",
          "check": "Navigasi kembali jelas",
          "fault": "Kode widget sekaligus menyusun SQL tanpa batas modul",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa dua tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S36-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Rancang daftar dan ringkasan pada Notebook",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 daftar dan ringkasan pada Notebook",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan sketsa dua tampilan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 37,
          "project": 3,
          "phase": 2,
          "title": "Frame dan Notebook",
          "target": "Mampu menjelaskan dan menerapkan frame dan notebook",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat dua tab dengan satu root. Minta prediksi sebelum menjalankan dan bandingkan dengan perpindahan tidak membuat root baru",
          "practice": "Buat dua tab dengan satu root",
          "check": "Perpindahan tidak membuat root baru",
          "fault": "Indeks hasil pencarian dianggap primary key",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan frame dan notebook; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S37-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Buat dua tab dengan satu root",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tab dengan satu root",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan frame dan notebook; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 38,
          "project": 3,
          "phase": 2,
          "title": "Treeview dan ID",
          "target": "Mampu menjelaskan dan menerapkan treeview dan id",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan barang serta simpan primary key. Minta prediksi sebelum menjalankan dan bandingkan dengan urutan visual tidak dijadikan id",
          "practice": "Tampilkan barang serta simpan primary key",
          "check": "Urutan visual tidak dijadikan ID",
          "fault": "Indeks hasil pencarian dianggap primary key",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan treeview dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S38-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan barang serta simpan primary key",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan barang serta simpan primary key",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan treeview dan id; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 39,
          "project": 3,
          "phase": 2,
          "title": "Form tambah",
          "target": "Mampu menjelaskan dan menerapkan form tambah",
          "demo": "Di VS Code, peragakan contoh minimum untuk Validasi nama dan stok sebelum repository. Minta prediksi sebelum menjalankan dan bandingkan dengan input salah tidak menyimpan barang",
          "practice": "Validasi nama dan stok sebelum repository",
          "check": "Input salah tidak menyimpan barang",
          "fault": "Indeks hasil pencarian dianggap primary key",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan form tambah; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S39-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Validasi nama dan stok sebelum repository",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Validasi nama dan stok sebelum repository",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan form tambah; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 40,
          "project": 3,
          "phase": 2,
          "title": "Ubah stok",
          "target": "Mampu menjelaskan dan menerapkan ubah stok",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbarui barang terpilih melalui ID. Minta prediksi sebelum menjalankan dan bandingkan dengan barang lain tidak berubah",
          "practice": "Perbarui barang terpilih melalui ID",
          "check": "Barang lain tidak berubah",
          "fault": "Indeks hasil pencarian dianggap primary key",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ubah stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S40-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Perbarui barang terpilih melalui ID",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Perbarui barang terpilih melalui ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ubah stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 41,
          "project": 3,
          "phase": 3,
          "title": "Pencarian barang",
          "target": "Mampu menjelaskan dan menerapkan pencarian barang",
          "demo": "Di VS Code, peragakan contoh minimum untuk Filter Treeview dan pertahankan ID. Minta prediksi sebelum menjalankan dan bandingkan dengan aksi pada hasil filter tepat sasaran",
          "practice": "Filter Treeview dan pertahankan ID",
          "check": "Aksi pada hasil filter tepat sasaran",
          "fault": "Stok minus disimpan sebelum validasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian barang; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S41-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Filter Treeview dan pertahankan ID",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Filter Treeview dan pertahankan ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pencarian barang; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 42,
          "project": 3,
          "phase": 3,
          "title": "Ringkasan stok",
          "target": "Mampu menjelaskan dan menerapkan ringkasan stok",
          "demo": "Di VS Code, peragakan contoh minimum untuk Hitung jumlah jenis serta total stok. Minta prediksi sebelum menjalankan dan bandingkan dengan data 2 dan 3 menghasilkan total 5",
          "practice": "Hitung jumlah jenis serta total stok",
          "check": "Data 2 dan 3 menghasilkan total 5",
          "fault": "Stok minus disimpan sebelum validasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S42-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Hitung jumlah jenis serta total stok",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Hitung jumlah jenis serta total stok",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan ringkasan stok; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 43,
          "project": 3,
          "phase": 3,
          "title": "Refresh setelah commit",
          "target": "Mampu menjelaskan dan menerapkan refresh setelah commit",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbarui daftar dan ringkasan dari database. Minta prediksi sebelum menjalankan dan bandingkan dengan dua tampilan selalu konsisten",
          "practice": "Perbarui daftar dan ringkasan dari database",
          "check": "Dua tampilan selalu konsisten",
          "fault": "Stok minus disimpan sebelum validasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan refresh setelah commit; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S43-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Perbarui daftar dan ringkasan dari database",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Perbarui daftar dan ringkasan dari database",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan refresh setelah commit; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 44,
          "project": 3,
          "phase": 3,
          "title": "Pesan kegagalan",
          "target": "Mampu menjelaskan dan menerapkan pesan kegagalan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tangani tanpa pilihan dan kesalahan validasi. Minta prediksi sebelum menjalankan dan bandingkan dengan tidak muncul sukses palsu",
          "practice": "Tangani tanpa pilihan dan kesalahan validasi",
          "check": "Tidak muncul sukses palsu",
          "fault": "Stok minus disimpan sebelum validasi",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pesan kegagalan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S44-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Pilih label dan alur perubahan stok.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tangani tanpa pilihan dan kesalahan validasi",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tangani tanpa pilihan dan kesalahan validasi",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan pesan kegagalan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 45,
          "project": 3,
          "phase": 4,
          "title": "Unittest service",
          "target": "Mampu menjelaskan dan menerapkan unittest service",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji stok minus, nol, huruf, dan batas ID. Minta prediksi sebelum menjalankan dan bandingkan dengan penolakan tidak mengubah database",
          "practice": "Uji stok minus, nol, huruf, dan batas ID",
          "check": "Penolakan tidak mengubah database",
          "fault": "Tampilan ringkasan tidak diperbarui setelah commit",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest service; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S45-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji stok minus, nol, huruf, dan batas ID",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 stok minus, nol, huruf, dan batas ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest service; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 46,
          "project": 3,
          "phase": 4,
          "title": "Uji integrasi repository",
          "target": "Mampu menjelaskan dan menerapkan uji integrasi repository",
          "demo": "Di VS Code, peragakan contoh minimum untuk Jalankan CRUD pada DB sementara. Minta prediksi sebelum menjalankan dan bandingkan dengan data bertahan setelah koneksi dibuka ulang",
          "practice": "Jalankan CRUD pada DB sementara",
          "check": "Data bertahan setelah koneksi dibuka ulang",
          "fault": "Tampilan ringkasan tidak diperbarui setelah commit",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji integrasi repository; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S46-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Jalankan CRUD pada DB sementara",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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 CRUD pada DB sementara",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji integrasi repository; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 47,
          "project": 3,
          "phase": 4,
          "title": "Uji GUI dan revisi",
          "target": "Mampu menjelaskan dan menerapkan uji gui dan revisi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman mencari dan mengubah stok. Minta prediksi sebelum menjalankan dan bandingkan dengan bukti masalah serta revisi disimpan",
          "practice": "Minta teman mencari dan mengubah stok",
          "check": "Bukti masalah serta revisi disimpan",
          "fault": "Tampilan ringkasan tidak diperbarui setelah commit",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji gui dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S47-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman mencari dan mengubah stok",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman mencari dan mengubah stok",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji gui dan revisi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 48,
          "project": 3,
          "phase": 4,
          "title": "Presentasi: Inventaris Kelas",
          "target": "Mampu menjelaskan dan menerapkan presentasi inventaris",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan brief baru dan hasil test. Minta prediksi sebelum menjalankan dan bandingkan dengan struktur modul dijelaskan mandiri",
          "practice": "Demonstrasikan brief baru dan hasil test Penguji memfilter barang lalu mencoba stok negatif dan stok nol; sasaran ID serta ringkasan harus tetap konsisten. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "check": "Struktur modul dijelaskan mandiri",
          "fault": "Tampilan ringkasan tidak diperbarui setelah commit",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-lanjutan-S48-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Tentukan kapan kedua tampilan disegarkan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan brief baru dan hasil test Penguji memfilter barang lalu mencoba stok negatif dan stok nol; sasaran ID serta ringkasan harus tetap konsisten. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Inventaris Kelas. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan brief baru dan hasil test Penguji memfilter barang lalu mencoba stok negatif dan stok nol; sasaran ID serta ringkasan harus tetap konsisten. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        },
        {
          "number": 49,
          "project": 4,
          "phase": 1,
          "title": "Brief pengguna mandiri",
          "target": "Mampu menjelaskan dan menerapkan brief pengguna mandiri",
          "demo": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup. Di VS Code, peragakan contoh minimum untuk Tentukan pemakai, tiga skenario, dan batas fitur. Minta prediksi sebelum menjalankan dan bandingkan dengan kriteria dapat diuji tanpa dekorasi",
          "practice": "Tentukan pemakai, tiga skenario, dan batas fitur",
          "check": "Kriteria dapat diuji tanpa dekorasi",
          "fault": "Nama peminjam dijadikan pengganti ID pinjaman",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief pengguna mandiri; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S49-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tentukan pemakai, tiga skenario, dan batas fitur",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tentukan pemakai, tiga skenario, dan batas fitur",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan brief pengguna mandiri; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 50,
          "project": 4,
          "phase": 1,
          "title": "Model buku dan pinjaman",
          "target": "Mampu menjelaskan dan menerapkan model buku dan pinjaman",
          "demo": "Di VS Code, peragakan contoh minimum untuk Rancang dua tabel serta relasi ID. Minta prediksi sebelum menjalankan dan bandingkan dengan pinjaman merujuk buku yang benar",
          "practice": "Rancang dua tabel serta relasi ID",
          "check": "Pinjaman merujuk buku yang benar",
          "fault": "Nama peminjam dijadikan pengganti ID pinjaman",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model buku dan pinjaman; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S50-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Rancang dua tabel serta relasi ID",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 dua tabel serta relasi ID",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan model buku dan pinjaman; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 51,
          "project": 4,
          "phase": 1,
          "title": "Rencana uji sebelum kode",
          "target": "Mampu menjelaskan dan menerapkan rencana uji sebelum kode",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tulis kasus stok satu, stok nol, dan kembali dua kali. Minta prediksi sebelum menjalankan dan bandingkan dengan hasil harapan dihitung manual",
          "practice": "Tulis kasus stok satu, stok nol, dan kembali dua kali",
          "check": "Hasil harapan dihitung manual",
          "fault": "Nama peminjam dijadikan pengganti ID pinjaman",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rencana uji sebelum kode; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S51-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tulis kasus stok satu, stok nol, dan kembali dua kali",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tulis kasus stok satu, stok nol, dan kembali dua kali",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan rencana uji sebelum kode; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 52,
          "project": 4,
          "phase": 1,
          "title": "Arsitektur aplikasi",
          "target": "Mampu menjelaskan dan menerapkan arsitektur aplikasi",
          "demo": "Di VS Code, peragakan contoh minimum untuk Pisahkan repository, layanan, dan dua tampilan. Minta prediksi sebelum menjalankan dan bandingkan dengan tanggung jawab modul tidak tumpang tindih",
          "practice": "Pisahkan repository, layanan, dan dua tampilan",
          "check": "Tanggung jawab modul tidak tumpang tindih",
          "fault": "Nama peminjam dijadikan pengganti ID pinjaman",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan arsitektur aplikasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S52-kode-siswa",
          "advancedDemand": "Model dan kontrak",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Pisahkan repository, layanan, dan dua tampilan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Pisahkan repository, layanan, dan dua tampilan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan arsitektur aplikasi; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 53,
          "project": 4,
          "phase": 2,
          "title": "Database awal",
          "target": "Mampu menjelaskan dan menerapkan database awal",
          "demo": "Di VS Code, peragakan contoh minimum untuk Buat tabel serta data sintetis melalui parameter. Minta prediksi sebelum menjalankan dan bandingkan dengan db kosong dapat diinisialisasi ulang",
          "practice": "Buat tabel serta data sintetis melalui parameter",
          "check": "DB kosong dapat diinisialisasi ulang",
          "fault": "Pencarian menghilangkan pemetaan ID buku",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan database awal; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S53-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Buat tabel serta data sintetis melalui parameter",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 tabel serta data sintetis melalui parameter",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan database awal; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 54,
          "project": 4,
          "phase": 2,
          "title": "Tampilan buku",
          "target": "Mampu menjelaskan dan menerapkan tampilan buku",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan ID, judul, stok, dan pencarian. Minta prediksi sebelum menjalankan dan bandingkan dengan pemilihan hasil filter tetap tepat",
          "practice": "Tampilkan ID, judul, stok, dan pencarian",
          "check": "Pemilihan hasil filter tetap tepat",
          "fault": "Pencarian menghilangkan pemetaan ID buku",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tampilan buku; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S54-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan ID, judul, stok, dan pencarian",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan ID, judul, stok, dan pencarian",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tampilan buku; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 55,
          "project": 4,
          "phase": 2,
          "title": "Tampilan pinjaman",
          "target": "Mampu menjelaskan dan menerapkan tampilan pinjaman",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tampilkan ID pinjaman dan status aktif. Minta prediksi sebelum menjalankan dan bandingkan dengan id buku berbeda dari id pinjaman",
          "practice": "Tampilkan ID pinjaman dan status aktif",
          "check": "ID buku berbeda dari ID pinjaman",
          "fault": "Pencarian menghilangkan pemetaan ID buku",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tampilan pinjaman; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S55-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tampilkan ID pinjaman dan status aktif",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Tampilkan ID pinjaman dan status aktif",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan tampilan pinjaman; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 56,
          "project": 4,
          "phase": 2,
          "title": "Alur pinjam",
          "target": "Mampu menjelaskan dan menerapkan alur pinjam",
          "demo": "Di VS Code, peragakan contoh minimum untuk Validasi stok dan nama peminjam sebelum perubahan. Minta prediksi sebelum menjalankan dan bandingkan dengan stok satu menghasilkan satu pinjaman aktif",
          "practice": "Validasi stok dan nama peminjam sebelum perubahan",
          "check": "Stok satu menghasilkan satu pinjaman aktif",
          "fault": "Pencarian menghilangkan pemetaan ID buku",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan alur pinjam; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S56-kode-siswa",
          "advancedDemand": "Implementasi fungsi",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Validasi stok dan nama peminjam sebelum perubahan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Validasi stok dan nama peminjam sebelum perubahan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan alur pinjam; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 57,
          "project": 4,
          "phase": 3,
          "title": "Transaksi atomik",
          "target": "Mampu menjelaskan dan menerapkan transaksi atomik",
          "demo": "Di VS Code, peragakan contoh minimum untuk Gabungkan kurangi stok serta catat pinjaman. Minta prediksi sebelum menjalankan dan bandingkan dengan gagal di tengah mengembalikan state awal",
          "practice": "Gabungkan kurangi stok serta catat pinjaman",
          "check": "Gagal di tengah mengembalikan state awal",
          "fault": "Stok berubah walau pencatatan pinjaman gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan transaksi atomik; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S57-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Gabungkan kurangi stok serta catat pinjaman",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Gabungkan kurangi stok serta catat pinjaman",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan transaksi atomik; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 19,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 58,
          "project": 4,
          "phase": 3,
          "title": "Alur kembali",
          "target": "Mampu menjelaskan dan menerapkan alur kembali",
          "demo": "Di VS Code, peragakan contoh minimum untuk Periksa status sebelum menambah stok. Minta prediksi sebelum menjalankan dan bandingkan dengan kembali kedua ditolak",
          "practice": "Periksa status sebelum menambah stok",
          "check": "Kembali kedua ditolak",
          "fault": "Stok berubah walau pencatatan pinjaman gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan alur kembali; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S58-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Periksa status sebelum menambah stok",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 status sebelum menambah stok",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan alur kembali; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 59,
          "project": 4,
          "phase": 3,
          "title": "Laporan CSV",
          "target": "Mampu menjelaskan dan menerapkan laporan csv",
          "demo": "Di VS Code, peragakan contoh minimum untuk Ekspor data pinjaman ke file keluaran baru. Minta prediksi sebelum menjalankan dan bandingkan dengan sumber database tetap utuh",
          "practice": "Ekspor data pinjaman ke file keluaran baru",
          "check": "Sumber database tetap utuh",
          "fault": "Stok berubah walau pencatatan pinjaman gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan laporan csv; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S59-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Ekspor data pinjaman ke file keluaran baru",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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": "Ekspor data pinjaman ke file keluaran baru",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan laporan csv; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 60,
          "project": 4,
          "phase": 3,
          "title": "Unittest layanan",
          "target": "Mampu menjelaskan dan menerapkan unittest layanan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Uji stok habis, ID salah, dan kembali ganda. Minta prediksi sebelum menjalankan dan bandingkan dengan kasus gagal tidak mengubah data",
          "practice": "Uji stok habis, ID salah, dan kembali ganda",
          "check": "Kasus gagal tidak mengubah data",
          "fault": "Stok berubah walau pencatatan pinjaman gagal",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest layanan; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S60-kode-siswa",
          "advancedDemand": "Validasi dan integrasi",
          "independentDecision": "Tentukan data minimum peminjam memakai data sintetis.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Uji stok habis, ID salah, dan kembali ganda",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 19,
            "guidedMinutes": 8,
            "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 stok habis, ID salah, dan kembali ganda",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan unittest layanan; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 11,
              "max": 19,
              "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
            }
          }
        },
        {
          "number": 61,
          "project": 4,
          "phase": 4,
          "title": "Uji integrasi buka ulang",
          "target": "Mampu menjelaskan dan menerapkan uji integrasi buka ulang",
          "demo": "Di VS Code, peragakan contoh minimum untuk Tutup koneksi lalu baca ulang data tersimpan. Minta prediksi sebelum menjalankan dan bandingkan dengan stok dan status konsisten",
          "practice": "Tutup koneksi lalu baca ulang data tersimpan",
          "check": "Stok dan status konsisten",
          "fault": "Klik kembali berulang menambah stok berkali-kali",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji integrasi buka ulang; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S61-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Tutup koneksi lalu baca ulang data tersimpan",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Tutup koneksi lalu baca ulang data tersimpan",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji integrasi buka ulang; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 17,
              "max": 22,
              "unit": "menit",
              "includes": "Mengerjakan dan mencoba variasi; uji formal serta penyimpanan 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
            }
          }
        },
        {
          "number": 62,
          "project": 4,
          "phase": 4,
          "title": "Uji pengguna brief baru",
          "target": "Mampu menjelaskan dan menerapkan uji pengguna brief baru",
          "demo": "Di VS Code, peragakan contoh minimum untuk Minta teman mencari, meminjam, dan kembali. Minta prediksi sebelum menjalankan dan bandingkan dengan catat bantuan serta hambatan",
          "practice": "Minta teman mencari, meminjam, dan kembali",
          "check": "Catat bantuan serta hambatan",
          "fault": "Klik kembali berulang menambah stok berkali-kali",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna brief baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S62-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Minta teman mencari, meminjam, dan kembali",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Minta teman mencari, meminjam, dan kembali",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan uji pengguna brief baru; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 63,
          "project": 4,
          "phase": 4,
          "title": "Revisi dan serah terima",
          "target": "Mampu menjelaskan dan menerapkan revisi dan serah terima",
          "demo": "Di VS Code, peragakan contoh minimum untuk Perbaiki prioritas tertinggi lalu ulangi test. Minta prediksi sebelum menjalankan dan bandingkan dengan readme sesuai versi akhir",
          "practice": "Perbaiki prioritas tertinggi lalu ulangi test",
          "check": "README sesuai versi akhir",
          "fault": "Klik kembali berulang menambah stok berkali-kali",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan revisi dan serah terima; prediksi hasil dan tambahkan bukti pemeriksaan.",
          "evidence": "python-sma-lanjutan-S63-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Perbaiki prioritas tertinggi lalu ulangi test",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": 22,
            "guidedMinutes": 5,
            "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": "Perbaiki prioritas tertinggi lalu ulangi test",
            "understanding": "Gunakan satu input/data baru yang belum dicontohkan; tulis hasil harapan, jalankan dan jelaskan baris penyebabnya.",
            "enrichment": "Setelah target inti tercapai, ubah satu data atau batas input pada kegiatan revisi dan serah terima; prediksi hasil dan tambahkan bukti pemeriksaan.",
            "estimatedIndependent": {
              "min": 14,
              "max": 22,
              "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
            }
          }
        },
        {
          "number": 64,
          "project": 4,
          "phase": 4,
          "title": "Presentasi: Perpustakaan Mini",
          "target": "Mampu menjelaskan dan menerapkan presentasi perpustakaan",
          "demo": "Di VS Code, peragakan contoh minimum untuk Demonstrasikan brief baru serta bukti regresi. Minta prediksi sebelum menjalankan dan bandingkan dengan aplikasi mandiri memenuhi syarat yang disepakati",
          "practice": "Demonstrasikan brief baru serta bukti regresi Penguji meminjam buku terakhir lalu mencoba pinjam ulang dan mengembalikan pinjaman dua kali; stok serta status harus tetap benar setelah aplikasi dibuka ulang. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "check": "Aplikasi mandiri memenuhi syarat yang disepakati",
          "fault": "Klik kembali berulang menambah stok berkali-kali",
          "support": "Siswa mencatat keputusan, memisahkan tanggung jawab fungsi, dan menguji kasus baru. Pemula tetap dimulai dari dasar; Lanjutan memakai brief mandiri, bukti uji, serta revisi pengguna.",
          "extension": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
          "evidence": "python-sma-lanjutan-S64-kode-siswa",
          "advancedDemand": "Pengujian brief baru",
          "independentDecision": "Prioritaskan alur stok konsisten sebelum fitur tambahan.",
          "toolId": "vscode",
          "toolName": "Visual Studio Code (VS Code)",
          "sourceFormat": ".py dan folder proyek",
          "toolSetup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
          "handoff": "Simpan sumber .py dan folder proyek di Visual Studio Code (VS Code), README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, serta hasil uji dan revisi.",
          "minimumTask": "Demonstrasikan brief baru serta bukti regresi Penguji meminjam buku terakhir lalu mencoba pinjam ulang dan mengembalikan pinjaman dua kali; stok serta status harus tetap benar setelah aplikasi dibuka ulang. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
          "independentProbe": "Mentor mengubah satu aturan atau data pada Perpustakaan Mini. 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.",
          "pacingNote": "Jangan habiskan satu jam untuk mengenalkan nama fitur. Gunakan sisa waktu untuk masalah kecil, penelusuran hasil, dan variasi mandiri; jika siswa belum siap, ulangi contoh minimum.",
          "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": "Demonstrasikan brief baru serta bukti regresi Penguji meminjam buku terakhir lalu mencoba pinjam ulang dan mengembalikan pinjaman dua kali; stok serta status harus tetap benar setelah aplikasi dibuka ulang. Kerjakan perubahan di Visual Studio Code (VS Code); serahkan sumber .py dan folder proyek, README, data sintetis, serta tabel hasil uji, unittest, database latihan, dan laporan sesuai proyek, dan catatan uji.",
            "understanding": "Tunjukkan satu bagian yang dibuat sendiri, satu keputusan dan satu perbaikan; jawab satu pertanyaan menggunakan sumber karya.",
            "enrichment": "Pilih satu masukan yang berguna, revisi bagian terkait dan tunjukkan hasil uji ulang; tidak perlu menambah fitur baru.",
            "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
            }
          }
        }
      ],
      "toolRevision": "tools-2026-10-21",
      "toolIds": [
        "vscode"
      ],
      "setup": "Siapkan VS Code, Python 3, ekstensi Python dan Python Debugger dari Microsoft. Pilih Python: Select Interpreter, jalankan file .py pada terminal terintegrasi, lalu uji satu breakpoint. Simpan seluruh sumber dan data sintetis dalam satu folder proyek. Untuk proyek GUI, jalankan python -m tkinter pada interpreter yang sama sebelum kelas. Jika modul Tkinter belum tersedia, pasang dukungan Tcl/Tk dari distribusi Python perangkat; konfirmasi jendela uji dapat dibuka dan ditutup.",
      "curriculumRevision": "python-apps-2026-10-24-v1",
      "placement": [
        "Telusuri satu fungsi berparameter dan return pada data baru.",
        "Perbaiki satu kondisi atau loop dan tunjukkan bukti sebelum serta sesudah.",
        "Olah list/dictionary dan bedakan data kosong dengan input tidak valid.",
        "Jelaskan callback satu tombol serta simpan-muat JSON; GUI diperiksa sebelum SQL."
      ],
      "learningApproach": "Siswa menentukan solusi dari brief, menyusun kasus uji, dan menjelaskan keputusan. Mentor memberi petunjuk bertahap.",
      "projectHabits": "Gunakan struktur folder sumber/data/uji, coba .venv pada salinan proyek melalui interpreter VS Code, serta simpan riwayat perubahan sederhana (versi bernama atau Git lokal terbimbing). Tetap gunakan pustaka standar; instal paket bukan prasyarat."
    }
  ],
  "toolRevision": "tools-2026-10-21",
  "curriculumRevision": "python-apps-2026-10-24-v1",
  "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."
  }
}
