{
  "schema": "MAKNOW_ASSESSMENT_ITEMS_v1.0",
  "lesson_id": "NET-002",
  "formative": [
    {
      "id": "NET-002-F1",
      "prompt": {
        "fa-IR": "**NET-002-F1 — بازیابی مرز.** تفاوت مسیر ثبت‌شده در OpenAPI و مجوز اعمال‌شده چیست؟ یک مشاهده نام ببرید که فراخوانی مستقیم handler اثباتش نمی‌کند. اگر یکی را مدرک کل pipeline دانستید، به چهار نوع رکورد بالا برگردید.\n<!-- /MN:SECTION -->",
        "en-US": "**NET-002-F1 — Boundary retrieval.** Name the difference between an OpenAPI path and an enforced permission. Give one observation that a direct handler call cannot establish. If you treat either as proof of the whole pipeline, return to the four records above.\n<!-- /MN:SECTION -->"
      },
      "remediation_ref": "lesson://NET-002#section/mental_model"
    },
    {
      "id": "NET-002-F2",
      "prompt": {
        "fa-IR": "**NET-002-F2 — تشخیص حالت منفی.** در `error_as_200` فیلد پاسخِ خلاف قرارداد، پیامد آن برای کلاینت، کوچک‌ترین تعمیر و حالت نیازمند اجرای مجدد را تعیین کنید. اگر فقط متن پیام را عوض می‌کنید، به معنای خطا برگردید.",
        "en-US": "**NET-002-F2 — Negative-case diagnosis.** For `error_as_200`, identify the response field that contradicts the contract, name the consequence for a client, and describe the smallest repair plus the case that must run again. Return to error semantics if your repair changes only the message text."
      },
      "remediation_ref": "lesson://NET-002#section/deep_explanation"
    },
    {
      "id": "NET-002-F3",
      "prompt": {
        "fa-IR": "**NET-002-F3 — بررسی انتقال.** چرا timeout حالت تازهٔ خطا و اثر می‌خواهد؟ توضیح دهید چرا برگرداندن `201` از قرارداد کپی‌شدهٔ POST، به‌روزرسانی جزئی را برقرار نمی‌کند. اگر revision قدیمی را بدون ساخت دوبارهٔ شواهد استفاده می‌کنید، به profile هدف برگردید.\n<!-- /MN:SECTION -->",
        "en-US": "**NET-002-F3 — Transfer check.** Why does the timeout require a new failure-and-effects case? Explain why returning `201` from the copied POST contract cannot establish a partial update. Return to the target profile if your answer reuses the old revision without rebuilding evidence.\n<!-- /MN:SECTION -->"
      },
      "remediation_ref": "lesson://NET-002#section/guided_and_independent_practice"
    }
  ],
  "summative": [
    {
      "id": "NET-002-S1",
      "type": "retrieval",
      "blocking": true,
      "prompt": {
        "fa-IR": "**NET-002-S1 — بازیابی.** مرز API متعلق به این درس را توضیح دهید، مستند را از اعمال تعهد جدا کنید و یک خروجی مجاور نام ببرید. وضعیتی را مشخص کنید که بدون شاهد اجرا باید حل‌نشده بماند.",
        "en-US": "**NET-002-S1 — Retrieval.** Explain the API boundary owned by this lesson, distinguish documentation from enforcement, and name one adjacent non-goal. Identify a state that must stay unresolved without execution evidence."
      },
      "expected_evidence": "Boundary-correct explanation and one non-goal.",
      "claim_refs": [
        "lesson://NET-002#claim/NET-002-K1",
        "lesson://NET-002#claim/NET-002-K2",
        "lesson://NET-002#claim/NET-002-K3",
        "lesson://NET-002#claim/NET-002-K4"
      ],
      "answer_key": "NOT_EMBEDDED"
    },
    {
      "id": "NET-002-S2",
      "type": "application",
      "blocking": true,
      "prompt": {
        "fa-IR": "**NET-002-S2 — کاربرد.** ماتریس کامل baseline را بسازید و نتیجهٔ محدودش را توجیه کنید. چرا رد POST بدون هویت آزمون منفی موفق است و چرا اعتبارسنجی اعتبارنامهٔ واقعی را ثابت نمی‌کند؟",
        "en-US": "**NET-002-S2 — Application.** Build the complete baseline matrix and defend its bounded result. Explain why rejecting an unauthenticated POST is a successful negative test and why that does not prove real credential validation."
      },
      "expected_evidence": "Complete evidence artifact and bounded decision.",
      "claim_refs": [
        "lesson://NET-002#claim/NET-002-K1",
        "lesson://NET-002#claim/NET-002-K2",
        "lesson://NET-002#claim/NET-002-K3",
        "lesson://NET-002#claim/NET-002-K4"
      ],
      "answer_key": "NOT_EMBEDDED"
    },
    {
      "id": "NET-002-S3",
      "type": "diagnosis",
      "blocking": true,
      "prompt": {
        "fa-IR": "**NET-002-S3 — تشخیص.** حذف مجوز POST با باقی‌ماندن مسیر OpenAPI را تشخیص دهید. هر بُعد نامعتبر، پیامد کلاینت/داده، کوچک‌ترین تعمیر و شاهد تازهٔ لازم را تعیین کنید. چرا عوض‌کردن هش، اجرای مفقود را ایجاد نمی‌کند؟",
        "en-US": "**NET-002-S3 — Diagnosis.** Diagnose the removed POST authorization while its OpenAPI path remains. Identify every invalidated dimension, client/data consequence, minimal repair and required fresh evidence. Explain why changing a hash cannot create a missing run."
      },
      "expected_evidence": "Invalidated field/state, consequence and minimal repair.",
      "claim_refs": [
        "lesson://NET-002#claim/NET-002-K1",
        "lesson://NET-002#claim/NET-002-K2",
        "lesson://NET-002#claim/NET-002-K3",
        "lesson://NET-002#claim/NET-002-K4"
      ],
      "answer_key": "NOT_EMBEDDED"
    },
    {
      "id": "NET-002-S4",
      "type": "transfer",
      "blocking": true,
      "prompt": {
        "fa-IR": "**NET-002-S4 — انتقال.** تصمیم `transfer_patch` را از شواهد خودش بازسازی کنید. تفاوت حذف فیلد و null، media/schema و وضعیت موفق، اثر timeout و خرابی وابستگی فقط‌خواندنی و همهٔ مشاهده‌های وابسته به revision و نیازمند تجدید را توضیح دهید. نتیجهٔ baseline را کپی نکنید.",
        "en-US": "**NET-002-S4 — Transfer.** Recompute `transfer_patch` from its own evidence. Explain omission versus null, media/schema and success status, the read-only dependency's timeout/failure effects, and all revision-bound observations that must be renewed. Do not copy the baseline result."
      },
      "expected_evidence": "Decision recomputed from changed evidence.",
      "claim_refs": [
        "lesson://NET-002#claim/NET-002-K1",
        "lesson://NET-002#claim/NET-002-K2",
        "lesson://NET-002#claim/NET-002-K3",
        "lesson://NET-002#claim/NET-002-K4"
      ],
      "answer_key": "NOT_EMBEDDED"
    }
  ],
  "checker_policy": "Public structural checks; instructor semantic evaluation; reproducible rationale review."
}
