{
  "schema": "MAKNOW_VISUALS_v1.0",
  "lesson_id": "NET-002",
  "required": true,
  "assets": [
    {
      "asset_id": "NET-002-ASSET-TABLE",
      "learning_question": "Can a reviewer derive the intended API behavior from the contract and reproduce both success and failure cases through the actual ASP.NET Core request pipeline?",
      "source_data_spec": "Endpoint / Method / Route / Request / Response / Status / Validation / AuthN / AuthZ / Error Type / Idempotency / Dependency / OpenAPI / Integration Case / Negative Case / State / Review",
      "interaction_states": [
        "baseline",
        "mutated",
        "unknown-or-disputed",
        "bounded-decision"
      ],
      "placement_semantic_anchor": "NET-002:worked_examples",
      "production_brief": "Render ASP.NET Core API Contract, Failure and Verification Matrix v1 as a compact evidence table with explicit state labels.",
      "asset_lock_state": "SPEC_LOCKED"
    },
    {
      "asset_id": "NET-002-ASSET-FLOW",
      "learning_question": "Which gate must pass before the bounded API acceptance?",
      "source_data_spec": "bounded requirement → HTTP contract → pipeline + auth + validation → implementation candidate → OpenAPI snapshot → integration test host → happy + negative cases → VERIFIED / REPAIR / HOLD",
      "interaction_states": [
        "evidence",
        "gate",
        "hold",
        "decision"
      ],
      "placement_semantic_anchor": "NET-002:mental_model",
      "production_brief": "Render as a left-to-right decision flow with explicit non-success branches.",
      "asset_lock_state": "SPEC_LOCKED"
    }
  ],
  "accessibility_contract": "Every visual must have a text-equivalent explanation of states, arrows, quantities and exceptions; color alone must never encode PASS/FAIL.",
  "rendered_asset": "derived_text/visuals/NET-002-ASSET-FLOW.svg",
  "fallback": {
    "fa-IR": "معادل متنی نمودار: نیاز و قرارداد HTTP را تعریف کنید؛ احراز هویت، مجوز و اعتبارسنجی را بررسی کنید؛ نسخهٔ پیاده‌سازی را مشخص کنید؛ OpenAPI را بسازید و مقایسه کنید؛ میزبان آزمونِ نام‌دار را با حالت‌های عادی و منفی اجرا کنید؛ پاسخ و اثر جانبی را ببینید. شاهد ناقص یا قدیمی یعنی `HOLD`. تناقض یعنی تعمیر و اجرای دوباره با حفظ `HOLD`. شواهد کامل فقط `VERIFIED_SYNTHETIC` در محدودهٔ `SYNTHETIC_ONLY` را مجاز می‌کنند، نه تأیید اجرای چارچوب یا استقرار.",
    "en-US": "The flow's text equivalent is: define the requirement and HTTP contract; inspect authentication, authorization and validation; bind the candidate implementation; generate and compare OpenAPI; execute a named test host with happy and negative cases; inspect responses and side effects. Missing or stale evidence means `HOLD`. Contradiction means repair and rerun while keeping `HOLD`. Complete evidence permits `VERIFIED_SYNTHETIC` only within `SYNTHETIC_ONLY`, never framework or deployment approval."
  }
}
