{
  "schema_version": 1,
  "id": "atlas:release:0.1-preview",
  "title": "Ephemerent Atlas 0.1 — Foundations preview",
  "version": "0.1-preview",
  "license": "CC BY 4.0",
  "language": "en",
  "published_at": "2026-08-12T12:00:00Z",
  "manifest_sha256": "2d0fabcd426772067106746384a2fa3e4cf8e49215243cf182f6bfc2fb782320",
  "pathways": [
    {
      "id": "pathway:mathematics",
      "slug": "mathematics",
      "title": "Mathematics from quantity to uncertainty",
      "short_title": "Mathematics",
      "color": "#2457c5",
      "statement": "Build quantities into functions, vectors, change, and evidence—then carry those structures into code and physical models.",
      "concept_ids": [
        "concept:quantities-ratios-and-scale",
        "concept:functions-as-dependence",
        "concept:vectors-and-coordinate-change",
        "concept:change-and-accumulation",
        "concept:probability-as-evidence"
      ]
    },
    {
      "id": "pathway:computing",
      "slug": "computing",
      "title": "Computing from procedure to learning systems",
      "short_title": "Computing",
      "color": "#cb4f35",
      "statement": "Make procedures explicit, reason about data and cost, then cross the boundary from software systems into evaluated machine learning.",
      "concept_ids": [
        "concept:procedures-and-state",
        "concept:data-and-invariants",
        "concept:algorithms-and-cost",
        "concept:ownership-and-systems",
        "concept:learning-systems-and-evaluation"
      ]
    },
    {
      "id": "pathway:physics",
      "slug": "physics",
      "title": "Physics from measurement to fields",
      "short_title": "Physics",
      "color": "#14735b",
      "statement": "Begin with what can be measured, then explain motion through interaction, conservation, waves, and field models.",
      "concept_ids": [
        "concept:measurement-and-uncertainty",
        "concept:motion-and-interaction",
        "concept:energy-and-conservation",
        "concept:waves-and-information",
        "concept:fields-models-and-limits"
      ]
    }
  ],
  "nodes": [
    {
      "id": "version:atlas-0.1",
      "kind": "content_version",
      "slug": "atlas-0-1",
      "title": "Atlas 0.1 preview",
      "summary": "A sealed curriculum preview awaiting independent subject review.",
      "pathway": null,
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0af1ce4a220b89414356d4fe2a9840e0a254ef225c5c85ac24dc37e02eb8d938"
        }
      ]
    },
    {
      "id": "discipline:mathematics",
      "kind": "discipline",
      "slug": "discipline-mathematics",
      "title": "Mathematics",
      "summary": "Build quantities into functions, vectors, change, and evidence—then carry those structures into code and physical models.",
      "pathway": "mathematics",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a3998b2f359e89c4c868d66b3aaaf3ed6940bf32a452d4a37cceaba5b0cbacc9"
        }
      ]
    },
    {
      "id": "pathway:mathematics",
      "kind": "pathway",
      "slug": "mathematics",
      "title": "Mathematics from quantity to uncertainty",
      "summary": "Build quantities into functions, vectors, change, and evidence—then carry those structures into code and physical models.",
      "pathway": "mathematics",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "66e99f6eb1f0a5a55162dfc40b37bfb375959ebea18c3e28193eb059e84f2762"
        }
      ]
    },
    {
      "id": "discipline:computing",
      "kind": "discipline",
      "slug": "discipline-computing",
      "title": "Computing",
      "summary": "Make procedures explicit, reason about data and cost, then cross the boundary from software systems into evaluated machine learning.",
      "pathway": "computing",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0ef4773a81aa8b774d5069dd35142a470edaf27cbc4a3681b6618897e9b5f6cc"
        }
      ]
    },
    {
      "id": "pathway:computing",
      "kind": "pathway",
      "slug": "computing",
      "title": "Computing from procedure to learning systems",
      "summary": "Make procedures explicit, reason about data and cost, then cross the boundary from software systems into evaluated machine learning.",
      "pathway": "computing",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "276f8d8ad8cb6060c16b3ef2923c808871941a682ae2b13cc91cf8d5a691361e"
        }
      ]
    },
    {
      "id": "discipline:physics",
      "kind": "discipline",
      "slug": "discipline-physics",
      "title": "Physics",
      "summary": "Begin with what can be measured, then explain motion through interaction, conservation, waves, and field models.",
      "pathway": "physics",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a73bfdf812feeafc3636d833371548a4e97e838b3edbcd1b65f63b58002069e8"
        }
      ]
    },
    {
      "id": "pathway:physics",
      "kind": "pathway",
      "slug": "physics",
      "title": "Physics from measurement to fields",
      "summary": "Begin with what can be measured, then explain motion through interaction, conservation, waves, and field models.",
      "pathway": "physics",
      "level": 0,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0b8a177b1982d7eb08d26ad98fbb27a52c52b76ad4d3b7fb7e29f9002e6c83d1"
        }
      ]
    },
    {
      "id": "concept:quantities-ratios-and-scale",
      "kind": "concept",
      "slug": "quantities-ratios-and-scale",
      "title": "Quantities, ratios, and scale",
      "summary": "Treat numbers as measured relationships rather than marks on a page.",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6fd4f4f55428ee22057ec048d2e6be5a66393e4e92e1c2e4b3f4b6ec4edd08bd"
        }
      ]
    },
    {
      "id": "objective:quantities-ratios-and-scale",
      "kind": "learning_objective",
      "slug": "objective-quantities-ratios-and-scale",
      "title": "Represent a situation with units, ratios, and a scale-aware comparison.",
      "summary": "Represent a situation with units, ratios, and a scale-aware comparison.",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b12cd2db1e2691b19d5f3b9ed841b7aa804bfcbfcf1e34a8e804230d5beb8ad1"
        }
      ]
    },
    {
      "id": "lesson:quantities-ratios-and-scale",
      "kind": "lesson",
      "slug": "lesson-quantities-ratios-and-scale",
      "title": "Quantities, ratios, and scale",
      "summary": "Treat numbers as measured relationships rather than marks on a page.",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5758506d9c272cfe7f5743cfd6330086e12d8dfcb71c353c228a4fc78876e0a3"
        }
      ]
    },
    {
      "id": "assessment:quantities-ratios-and-scale",
      "kind": "assessment",
      "slug": "assessment-quantities-ratios-and-scale",
      "title": "Quantities, ratios, and scale: retrieval check",
      "summary": "Why is 5 meters + 3 seconds not a meaningful physical sum?",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3d38cc768ffbcb511e94a635ca0b9752472be4a05e21b861f61c1548117717e5"
        }
      ]
    },
    {
      "id": "misconception:quantities-ratios-and-scale",
      "kind": "misconception",
      "slug": "misconception-quantities-ratios-and-scale",
      "title": "Common error: Quantities, ratios, and scale",
      "summary": "A larger written number always represents a larger real quantity.",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9ab67fd4d4ca72120bff1c7d12bebc59fabab1e2fc0219418d2322c7590c87f0"
        }
      ]
    },
    {
      "id": "simulation:scale-bench",
      "kind": "simulation",
      "slug": "scale-bench",
      "title": "Quantities, ratios, and scale",
      "summary": "Choose a familiar object and estimate it in centimeters, meters, and kilometers. Convert each estimate back to meters. The magnitude changes with the unit while the represented length stays fixed.",
      "pathway": "mathematics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0962af88cdf6a1641a1d8da2b1f075d6152eafae317f7b756766ffc4efd8f7c3"
        }
      ]
    },
    {
      "id": "concept:functions-as-dependence",
      "kind": "concept",
      "slug": "functions-as-dependence",
      "title": "Functions as dependence",
      "summary": "Read a function as a dependable relationship between changing quantities.",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e7ec44734702b0ca1395a8f1b90e3da6c5649f03ffbc9ae8fe318793a9bf369e"
        }
      ]
    },
    {
      "id": "objective:functions-as-dependence",
      "kind": "learning_objective",
      "slug": "objective-functions-as-dependence",
      "title": "Move between verbal, tabular, graphical, and symbolic descriptions of a function.",
      "summary": "Move between verbal, tabular, graphical, and symbolic descriptions of a function.",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ba4a1bafe1c994db354ba1c11405d1b0a9d0b5a543a82f4b4408f299c876d701"
        }
      ]
    },
    {
      "id": "lesson:functions-as-dependence",
      "kind": "lesson",
      "slug": "lesson-functions-as-dependence",
      "title": "Functions as dependence",
      "summary": "Read a function as a dependable relationship between changing quantities.",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "77ea8fc48b0985ccb41b42c871e93507f84eb46192f5439b18564e10975b289f"
        }
      ]
    },
    {
      "id": "assessment:functions-as-dependence",
      "kind": "assessment",
      "slug": "assessment-functions-as-dependence",
      "title": "Functions as dependence: retrieval check",
      "summary": "Can two different inputs of a function produce the same output?",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2119c66deb3d5bb8c06aa27869df2f829331299047b06c153e0a378d2b55a717"
        }
      ]
    },
    {
      "id": "misconception:functions-as-dependence",
      "kind": "misconception",
      "slug": "misconception-functions-as-dependence",
      "title": "Common error: Functions as dependence",
      "summary": "A function is merely an equation that contains x.",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d7cbcf1c18e356ecd9d857d7e545d9b47876771ab421ac22ab7a1ce4c1ec1e77"
        }
      ]
    },
    {
      "id": "simulation:function-bench",
      "kind": "simulation",
      "slug": "function-bench",
      "title": "Functions as dependence",
      "summary": "Change the rate and initial value in a linear rule. Predict which visual feature moves before checking: steepness belongs to the rate; vertical placement belongs to the initial value.",
      "pathway": "mathematics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "34d6327b5c8525b3a9063e0a76ee90e07b7b6877f4e3b5777bb96bf537303596"
        }
      ]
    },
    {
      "id": "concept:vectors-and-coordinate-change",
      "kind": "concept",
      "slug": "vectors-and-coordinate-change",
      "title": "Vectors and coordinate change",
      "summary": "Separate a geometric direction from the coordinates used to describe it.",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ce173d17db2e724866c2c6949d17463d442990e7da00bfac0cd775a9f943275f"
        }
      ]
    },
    {
      "id": "objective:vectors-and-coordinate-change",
      "kind": "learning_objective",
      "slug": "objective-vectors-and-coordinate-change",
      "title": "Add, scale, and reinterpret two-dimensional vectors across coordinate frames.",
      "summary": "Add, scale, and reinterpret two-dimensional vectors across coordinate frames.",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6ce83a7ad89489cd80e189a0645cbe00637f3de1ea9b19d5d85eb75dbe5d2d6b"
        }
      ]
    },
    {
      "id": "lesson:vectors-and-coordinate-change",
      "kind": "lesson",
      "slug": "lesson-vectors-and-coordinate-change",
      "title": "Vectors and coordinate change",
      "summary": "Separate a geometric direction from the coordinates used to describe it.",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c1485e548ee9dc3f583dfabb6e1dc0c216a9081324a3dba76e5da8b35a49d2bb"
        }
      ]
    },
    {
      "id": "assessment:vectors-and-coordinate-change",
      "kind": "assessment",
      "slug": "assessment-vectors-and-coordinate-change",
      "title": "Vectors and coordinate change: retrieval check",
      "summary": "What remains unchanged when a vector is written in a new basis?",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e53a2c2dc7de6ca47c5b75e9ae1f82a5b39f2041db1a0a22872cba6ddb92383d"
        }
      ]
    },
    {
      "id": "misconception:vectors-and-coordinate-change",
      "kind": "misconception",
      "slug": "misconception-vectors-and-coordinate-change",
      "title": "Common error: Vectors and coordinate change",
      "summary": "A vector is the same thing as its coordinate pair.",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "349dc6ec44e942c18730140b34ded4aa63aa4626c1fe68b887b00b44b20e94f2"
        }
      ]
    },
    {
      "id": "simulation:vector-composer",
      "kind": "simulation",
      "slug": "vector-composer",
      "title": "Vectors and coordinate change",
      "summary": "Compose two draggable arrows and compare component addition with the head-to-tail construction. Then rotate the coordinate axes and watch the coordinates move while the resultant arrow stays fixed.",
      "pathway": "mathematics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9b95d884271abe0cb35e376556900ef1c881aa69b73f989b2bd09c5cd233eaf5"
        }
      ]
    },
    {
      "id": "concept:change-and-accumulation",
      "kind": "concept",
      "slug": "change-and-accumulation",
      "title": "Change and accumulation",
      "summary": "See derivatives and integrals as two views of how local change builds a whole.",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "58b7827335b26ea57e6fa6c3548bf7ea3e76f63c36493a80c6d32a91fc5ccf1c"
        }
      ]
    },
    {
      "id": "objective:change-and-accumulation",
      "kind": "learning_objective",
      "slug": "objective-change-and-accumulation",
      "title": "Interpret a derivative as local rate and an integral as accumulated contribution.",
      "summary": "Interpret a derivative as local rate and an integral as accumulated contribution.",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9f2eff054b8255c47e733079bd57cf59b2e3c21376e34bf40279e72c3e87aea7"
        }
      ]
    },
    {
      "id": "lesson:change-and-accumulation",
      "kind": "lesson",
      "slug": "lesson-change-and-accumulation",
      "title": "Change and accumulation",
      "summary": "See derivatives and integrals as two views of how local change builds a whole.",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "301a3a67972be45c7ace45c72103d06b0f7538dfcedae9d942f10872974f703f"
        }
      ]
    },
    {
      "id": "assessment:change-and-accumulation",
      "kind": "assessment",
      "slug": "assessment-change-and-accumulation",
      "title": "Change and accumulation: retrieval check",
      "summary": "Why does a derivative need a limiting process?",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ca29e8deb9f1df24c7ec409995508a28e06a5ee648882cdbd560bccb18a95d00"
        }
      ]
    },
    {
      "id": "misconception:change-and-accumulation",
      "kind": "misconception",
      "slug": "misconception-change-and-accumulation",
      "title": "Common error: Change and accumulation",
      "summary": "A derivative is only a symbolic rule for lowering exponents.",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "f65dea396b5f5ab6b4ebec966d827fbf1dc35e65f0dd85a74bfb594d85f3bdd5"
        }
      ]
    },
    {
      "id": "simulation:accumulation-table",
      "kind": "simulation",
      "slug": "accumulation-table",
      "title": "Change and accumulation",
      "summary": "Move two points together on a parabola and watch the secant slope approach a tangent slope. Then accumulate rectangles under that slope curve and compare the total with the original change in position.",
      "pathway": "mathematics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0bd4dd30a874a12c10911cb8bf11f68930fe3e11da8a2607c08e8e349acbe4cb"
        }
      ]
    },
    {
      "id": "concept:probability-as-evidence",
      "kind": "concept",
      "slug": "probability-as-evidence",
      "title": "Probability as evidence",
      "summary": "Use distributions to reason about uncertainty without pretending it disappears.",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "83516769ee97fda1bac577ba5749a3248573a7c6c9e7bbb9cb219d21327196ba"
        }
      ]
    },
    {
      "id": "objective:probability-as-evidence",
      "kind": "learning_objective",
      "slug": "objective-probability-as-evidence",
      "title": "Distinguish variation in data, uncertainty in an estimate, and conditional probability.",
      "summary": "Distinguish variation in data, uncertainty in an estimate, and conditional probability.",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5bdec49b55bb25708d41071e26f250c8f599006a27fb6d28dda18fdfdb81dc32"
        }
      ]
    },
    {
      "id": "lesson:probability-as-evidence",
      "kind": "lesson",
      "slug": "lesson-probability-as-evidence",
      "title": "Probability as evidence",
      "summary": "Use distributions to reason about uncertainty without pretending it disappears.",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "587126644aca16d487b4bf4789bcfcdfac22e3f88e2901c42088501960735612"
        }
      ]
    },
    {
      "id": "assessment:probability-as-evidence",
      "kind": "assessment",
      "slug": "assessment-probability-as-evidence",
      "title": "Probability as evidence: retrieval check",
      "summary": "What does conditioning change?",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1c25289f1112fcb6b0923e388dc39ae81bdca17322569f76dfb6381c0610901d"
        }
      ]
    },
    {
      "id": "misconception:probability-as-evidence",
      "kind": "misconception",
      "slug": "misconception-probability-as-evidence",
      "title": "Common error: Probability as evidence",
      "summary": "A 70 percent probability means the event will occur exactly seven times in every ten trials.",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c93b6ebf6dac55be1d83323eb16466a13069a2b7af1ddde731984caa1a8895b6"
        }
      ]
    },
    {
      "id": "simulation:sampling-table",
      "kind": "simulation",
      "slug": "sampling-table",
      "title": "Probability as evidence",
      "summary": "Draw repeated samples from a skewed population. Compare the changing sample values with the steadier distribution of sample means as sample size grows.",
      "pathway": "mathematics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a86e3fab0818d95a74b734a3f153e056755e19f7def8794636f353e23fae2bee"
        }
      ]
    },
    {
      "id": "concept:procedures-and-state",
      "kind": "concept",
      "slug": "procedures-and-state",
      "title": "Procedures and state",
      "summary": "Read programs as precise transformations of state, beginning with Python.",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d456cd1ae03a2ba4706ee632079c86d647ba42b2f19386a632ab39a858d3e8c8"
        }
      ]
    },
    {
      "id": "objective:procedures-and-state",
      "kind": "learning_objective",
      "slug": "objective-procedures-and-state",
      "title": "Trace a short Python procedure and explain each state change.",
      "summary": "Trace a short Python procedure and explain each state change.",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "f17ad4c4fc9820b98592083024a8221f322024b1fffe08c4e26163455914e92d"
        }
      ]
    },
    {
      "id": "lesson:procedures-and-state",
      "kind": "lesson",
      "slug": "lesson-procedures-and-state",
      "title": "Procedures and state",
      "summary": "Read programs as precise transformations of state, beginning with Python.",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "313b2fbb7d5b96bb92a5ce0a3af3377cac0f2d338faa62b8b35c270b0e75d25f"
        }
      ]
    },
    {
      "id": "assessment:procedures-and-state",
      "kind": "assessment",
      "slug": "assessment-procedures-and-state",
      "title": "Procedures and state: retrieval check",
      "summary": "What information must a state trace record to explain an assignment?",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0c57172629698116307a8e980f45d4a24b6ddf2ded91a1d8d5ffffc5565a7d0f"
        }
      ]
    },
    {
      "id": "misconception:procedures-and-state",
      "kind": "misconception",
      "slug": "misconception-procedures-and-state",
      "title": "Common error: Procedures and state",
      "summary": "A variable is a box whose identity and value are always the same thing.",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "431bcdf7821189432a6b9a478cdb4fd228d473b3c8e13096a06e556f925ba797"
        }
      ]
    },
    {
      "id": "simulation:python-trace",
      "kind": "simulation",
      "slug": "python-trace",
      "title": "Procedures and state",
      "summary": "Step through a small Python trace one expression at a time. Predict the next state before revealing it, then change the input list and identify which instructions remain invariant.",
      "pathway": "computing",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "7cc2754c182a207871c771bd0b5b7ea1fe550e5fe9e3cfd2f4dfd5e70e5651ab"
        }
      ]
    },
    {
      "id": "concept:data-and-invariants",
      "kind": "concept",
      "slug": "data-and-invariants",
      "title": "Data and invariants",
      "summary": "Choose representations by the promises your program must preserve.",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2e0409daab58c1fc411f4260a1a3a0e0f1b0dc40e48cec34014320107e5dbb97"
        }
      ]
    },
    {
      "id": "objective:data-and-invariants",
      "kind": "learning_objective",
      "slug": "objective-data-and-invariants",
      "title": "Select a data representation and state the invariant that makes operations trustworthy.",
      "summary": "Select a data representation and state the invariant that makes operations trustworthy.",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c02af79f0f50fa5e151b274f5e8601dadb4578a405c1898ce273e9940523a16d"
        }
      ]
    },
    {
      "id": "lesson:data-and-invariants",
      "kind": "lesson",
      "slug": "lesson-data-and-invariants",
      "title": "Data and invariants",
      "summary": "Choose representations by the promises your program must preserve.",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "05a484301a9c281fee48d354e9d4f68fc0cb28b7c92aca838a2d623c511c617c"
        }
      ]
    },
    {
      "id": "assessment:data-and-invariants",
      "kind": "assessment",
      "slug": "assessment-data-and-invariants",
      "title": "Data and invariants: retrieval check",
      "summary": "What is a representation invariant?",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c7cfb510da0e0808fe0d30cb9a8b159b47503dfcb10394bf7c125cc1a5b9e639"
        }
      ]
    },
    {
      "id": "misconception:data-and-invariants",
      "kind": "misconception",
      "slug": "misconception-data-and-invariants",
      "title": "Common error: Data and invariants",
      "summary": "Data structures are interchangeable containers with different syntax.",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c797c90a512214ec1d6547e97e42a0117c0c58971ee5c9f040303ea135d64ca7"
        }
      ]
    },
    {
      "id": "simulation:structure-bench",
      "kind": "simulation",
      "slug": "structure-bench",
      "title": "Data and invariants",
      "summary": "Compare list, stack, queue, and set traces for the same arriving items. Attempt an invalid update and identify which interface makes the mistake unrepresentable.",
      "pathway": "computing",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "eb92f940543f675b42864d2007bf5aba2a8eb082593b8acb7b01dbdec7c1fefe"
        }
      ]
    },
    {
      "id": "concept:algorithms-and-cost",
      "kind": "concept",
      "slug": "algorithms-and-cost",
      "title": "Algorithms and cost",
      "summary": "Compare procedures by how their required work grows, not by one stopwatch reading.",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3f614fb2dd5f35142f459936168cc0fec7fd0853e9cfabd87b54dec63aeb4c68"
        }
      ]
    },
    {
      "id": "objective:algorithms-and-cost",
      "kind": "learning_objective",
      "slug": "objective-algorithms-and-cost",
      "title": "Trace an algorithm and justify its time and space growth using input size.",
      "summary": "Trace an algorithm and justify its time and space growth using input size.",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9e39afe2ca167c0dbc8dc39f451bcd901472f185cd8ebe744bc65d90758aa155"
        }
      ]
    },
    {
      "id": "lesson:algorithms-and-cost",
      "kind": "lesson",
      "slug": "lesson-algorithms-and-cost",
      "title": "Algorithms and cost",
      "summary": "Compare procedures by how their required work grows, not by one stopwatch reading.",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e3e8a851cc7d148245e20e5613e1c682e7477f18278c77f0fc9f2d1774156b36"
        }
      ]
    },
    {
      "id": "assessment:algorithms-and-cost",
      "kind": "assessment",
      "slug": "assessment-algorithms-and-cost",
      "title": "Algorithms and cost: retrieval check",
      "summary": "Why can binary search not be applied directly to an unsorted list?",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a0d3b2af6fb2b6a0c6e3bf9c59a2b66a7a97dc85959ed8bf35b740f9ae95e7ab"
        }
      ]
    },
    {
      "id": "misconception:algorithms-and-cost",
      "kind": "misconception",
      "slug": "misconception-algorithms-and-cost",
      "title": "Common error: Algorithms and cost",
      "summary": "Big-O notation tells the exact runtime in seconds.",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a54759ea1ab4b31dac2f280f44c82688d0d65561ad2bec3d223d5d47cdc70cbc"
        }
      ]
    },
    {
      "id": "simulation:complexity-trace",
      "kind": "simulation",
      "slug": "complexity-trace",
      "title": "Algorithms and cost",
      "summary": "Trace linear and binary search over increasingly large collections. Count comparisons rather than milliseconds, then plot how those counts change when input size doubles.",
      "pathway": "computing",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "438254a5ea947e30831e10e54ed28c6ead92a59035381cb165e7ef25a9e65c82"
        }
      ]
    },
    {
      "id": "concept:ownership-and-systems",
      "kind": "concept",
      "slug": "ownership-and-systems",
      "title": "Ownership and systems",
      "summary": "Use Rust ownership to make resource lifetime and aliasing part of the program's structure.",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6f54b9297e6e81bd89ab7278e33e2f6873b17219aa6665ae24ff03d848d03269"
        }
      ]
    },
    {
      "id": "objective:ownership-and-systems",
      "kind": "learning_objective",
      "slug": "objective-ownership-and-systems",
      "title": "Explain a move, immutable borrow, and mutable borrow in terms of resource safety.",
      "summary": "Explain a move, immutable borrow, and mutable borrow in terms of resource safety.",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fa48533e207dcfab0fd957e7bcca72e84650a52aa5d6eec7323b734a8e3c07f8"
        }
      ]
    },
    {
      "id": "lesson:ownership-and-systems",
      "kind": "lesson",
      "slug": "lesson-ownership-and-systems",
      "title": "Ownership and systems",
      "summary": "Use Rust ownership to make resource lifetime and aliasing part of the program's structure.",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ea2968f76e528cb822f6aada0e72f92e631fe19ce783de8181d6dc11d575cee3"
        }
      ]
    },
    {
      "id": "assessment:ownership-and-systems",
      "kind": "assessment",
      "slug": "assessment-ownership-and-systems",
      "title": "Ownership and systems: retrieval check",
      "summary": "Why are one mutable reference and an immutable reference disallowed at the same time?",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "55612ecba42919d51dbc99453bcc4e99c49c5b6fc226874596b411506b0b30c5"
        }
      ]
    },
    {
      "id": "misconception:ownership-and-systems",
      "kind": "misconception",
      "slug": "misconception-ownership-and-systems",
      "title": "Common error: Ownership and systems",
      "summary": "The borrow checker is an arbitrary restriction layered onto otherwise correct code.",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "016a3ebf49b246afcdd05d6f1166baab88c9f5084ce89df078cd39ae47181f55"
        }
      ]
    },
    {
      "id": "simulation:ownership-trace",
      "kind": "simulation",
      "slug": "ownership-trace",
      "title": "Ownership and systems",
      "summary": "Trace ownership through a sequence of moves and borrows. Mark the exact last use of each reference, then test whether a proposed mutation overlaps an active immutable borrow.",
      "pathway": "computing",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4c7c196d747072f2b1610a3ac85b36dfc490956cd2e0ec6010d55ef091aa95dd"
        }
      ]
    },
    {
      "id": "concept:learning-systems-and-evaluation",
      "kind": "concept",
      "slug": "learning-systems-and-evaluation",
      "title": "Learning systems and evaluation",
      "summary": "Treat a trained model as one component in an evidence-producing system.",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "7e1f047e02382828c57ae672ee86ef42a55515a2a2388a1abc39ca427333f97d"
        }
      ]
    },
    {
      "id": "objective:learning-systems-and-evaluation",
      "kind": "learning_objective",
      "slug": "objective-learning-systems-and-evaluation",
      "title": "Design a train-validation-test evaluation that matches a stated deployment question.",
      "summary": "Design a train-validation-test evaluation that matches a stated deployment question.",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1c491fd492330a74ca1d51c6ac525761487d3133841bd7c2dfd0d9f905819b76"
        }
      ]
    },
    {
      "id": "lesson:learning-systems-and-evaluation",
      "kind": "lesson",
      "slug": "lesson-learning-systems-and-evaluation",
      "title": "Learning systems and evaluation",
      "summary": "Treat a trained model as one component in an evidence-producing system.",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8622bfccc1cafcedad9855a4490f3c7ecdcb5934419517a87125f36194de56ba"
        }
      ]
    },
    {
      "id": "assessment:learning-systems-and-evaluation",
      "kind": "assessment",
      "slug": "assessment-learning-systems-and-evaluation",
      "title": "Learning systems and evaluation: retrieval check",
      "summary": "Why should the test set not guide model selection?",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2e7256a47811a2d1b6360e85d1425c41cd20bac859454161335f9428ab4ae00c"
        }
      ]
    },
    {
      "id": "misconception:learning-systems-and-evaluation",
      "kind": "misconception",
      "slug": "misconception-learning-systems-and-evaluation",
      "title": "Common error: Learning systems and evaluation",
      "summary": "A higher aggregate benchmark score proves a model is better for every environment.",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4f50b21091a9b11917df1c5b89aa1e919cb79e33dd3e124c7a878fa637b9115c"
        }
      ]
    },
    {
      "id": "simulation:threshold-bench",
      "kind": "simulation",
      "slug": "threshold-bench",
      "title": "Learning systems and evaluation",
      "summary": "Move a classification threshold and watch false positives and false negatives trade places. Then change class prevalence and observe why precision changes even when sensitivity and specificity stay fixed.",
      "pathway": "computing",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1ece0e1030e32a3cc420cf4a23d598e556029ad4e8b80d5c52fef7b11afa3a10"
        }
      ]
    },
    {
      "id": "concept:measurement-and-uncertainty",
      "kind": "concept",
      "slug": "measurement-and-uncertainty",
      "title": "Measurement and uncertainty",
      "summary": "Build physical claims from operational measurements and honest uncertainty.",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2399af792c2255107bf5ccb350f7b2d28beef1f675ffdfd5b28e752a844656db"
        }
      ]
    },
    {
      "id": "objective:measurement-and-uncertainty",
      "kind": "learning_objective",
      "slug": "objective-measurement-and-uncertainty",
      "title": "Report a measurement with units, uncertainty, and a reproducible procedure.",
      "summary": "Report a measurement with units, uncertainty, and a reproducible procedure.",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "99e26a226a34a1de42529d97b929c5edae6286a5c2745e39428f7487f7c014b5"
        }
      ]
    },
    {
      "id": "lesson:measurement-and-uncertainty",
      "kind": "lesson",
      "slug": "lesson-measurement-and-uncertainty",
      "title": "Measurement and uncertainty",
      "summary": "Build physical claims from operational measurements and honest uncertainty.",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6f7b0ee93252916a4b678a2002639a4a9a3b1cbea57a4adeaa500659b84d5181"
        }
      ]
    },
    {
      "id": "assessment:measurement-and-uncertainty",
      "kind": "assessment",
      "slug": "assessment-measurement-and-uncertainty",
      "title": "Measurement and uncertainty: retrieval check",
      "summary": "Why can repeated measurements fail to reveal a systematic error?",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b81b4587137f4d2bd3ed510882b4d962161a254231e6803ce8231987b1181202"
        }
      ]
    },
    {
      "id": "misconception:measurement-and-uncertainty",
      "kind": "misconception",
      "slug": "misconception-measurement-and-uncertainty",
      "title": "Common error: Measurement and uncertainty",
      "summary": "More decimal places automatically make a measurement more accurate.",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "62517783e15e11668704b182967724f4702062665e66a9ce833f5c8504c39cc4"
        }
      ]
    },
    {
      "id": "simulation:measurement-bench",
      "kind": "simulation",
      "slug": "measurement-bench",
      "title": "Measurement and uncertainty",
      "summary": "Measure a repeated interval with a simulated instrument. Separate resolution, random scatter, and a hidden zero offset, then explain which uncertainty each diagnostic can reveal.",
      "pathway": "physics",
      "level": 1,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0bd0b98502e451a2552e06aac9bc5646a4b4a55ef6054a3dee372db9962adf8e"
        }
      ]
    },
    {
      "id": "concept:motion-and-interaction",
      "kind": "concept",
      "slug": "motion-and-interaction",
      "title": "Motion and interaction",
      "summary": "Describe motion first, then explain changes in motion through interactions.",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "7723b20c225119342eabcd0ff0eb8bb091513be12be6fe6f97782b16fa8f80b5"
        }
      ]
    },
    {
      "id": "objective:motion-and-interaction",
      "kind": "learning_objective",
      "slug": "objective-motion-and-interaction",
      "title": "Connect position, velocity, acceleration, and net force across diagrams and graphs.",
      "summary": "Connect position, velocity, acceleration, and net force across diagrams and graphs.",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9891ff736650c3ed029857abcb5a5de254efde575e11a43ba16343a5692e6195"
        }
      ]
    },
    {
      "id": "lesson:motion-and-interaction",
      "kind": "lesson",
      "slug": "lesson-motion-and-interaction",
      "title": "Motion and interaction",
      "summary": "Describe motion first, then explain changes in motion through interactions.",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "dfa613f38819b8cefccabe6443552113bd410f3fcbcf70d94805e2eb20d225f2"
        }
      ]
    },
    {
      "id": "assessment:motion-and-interaction",
      "kind": "assessment",
      "slug": "assessment-motion-and-interaction",
      "title": "Motion and interaction: retrieval check",
      "summary": "Can velocity point right while acceleration points left?",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "bfe1dc79f498f722ae3f292eeca74f29c24dfad198679f9ee5df508b78490116"
        }
      ]
    },
    {
      "id": "misconception:motion-and-interaction",
      "kind": "misconception",
      "slug": "misconception-motion-and-interaction",
      "title": "Common error: Motion and interaction",
      "summary": "A moving object needs a continuing net force in the direction of motion.",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b9621e21e28d024ec6d9ae7c161eea2a1bc0551dec008007f38daf0114f99825"
        }
      ]
    },
    {
      "id": "simulation:motion-tape",
      "kind": "simulation",
      "slug": "motion-tape",
      "title": "Motion and interaction",
      "summary": "Adjust force and mass for a cart. Predict the acceleration vector before running each case, then compare position, velocity, and acceleration graphs over time.",
      "pathway": "physics",
      "level": 2,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "f9f87a3ec32354aa313f94bac785cf8517d08d1022da5bcf0cd2ad46efeb68d3"
        }
      ]
    },
    {
      "id": "concept:energy-and-conservation",
      "kind": "concept",
      "slug": "energy-and-conservation",
      "title": "Energy and conservation",
      "summary": "Track change with a ledger that remains stable across different mechanisms.",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8a14e4d032d74342b4ecfa0d359eedf8fb06980fa67ef11dea983b7691312094"
        }
      ]
    },
    {
      "id": "objective:energy-and-conservation",
      "kind": "learning_objective",
      "slug": "objective-energy-and-conservation",
      "title": "Define a system boundary and account for energy storage and transfer.",
      "summary": "Define a system boundary and account for energy storage and transfer.",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "192792938f0447580bfc6871e6338946e21dbcb39af19d96a8c4e455ab7b7564"
        }
      ]
    },
    {
      "id": "lesson:energy-and-conservation",
      "kind": "lesson",
      "slug": "lesson-energy-and-conservation",
      "title": "Energy and conservation",
      "summary": "Track change with a ledger that remains stable across different mechanisms.",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "f5797f6a4f9aae0c15695b3af4af84e81a8628f990ffcbe648ca7096e51c10b3"
        }
      ]
    },
    {
      "id": "assessment:energy-and-conservation",
      "kind": "assessment",
      "slug": "assessment-energy-and-conservation",
      "title": "Energy and conservation: retrieval check",
      "summary": "Why must an energy argument state the system boundary?",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5420ef6d2b16bce8f9fae286521e0e9471e8522c9358ddffd21af01b9cd15509"
        }
      ]
    },
    {
      "id": "misconception:energy-and-conservation",
      "kind": "misconception",
      "slug": "misconception-energy-and-conservation",
      "title": "Common error: Energy and conservation",
      "summary": "Energy is a material substance that objects use up.",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fb1c6ea9902594513161552a3723d4e0047cde61a07b4415795d1e0ba37e5209"
        }
      ]
    },
    {
      "id": "simulation:energy-ledger",
      "kind": "simulation",
      "slug": "energy-ledger",
      "title": "Energy and conservation",
      "summary": "Move a system boundary around a block and ramp. Watch which terms count as internal storage and which appear as transfers across the boundary.",
      "pathway": "physics",
      "level": 3,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "453364e5e1fa2a2c56117621ea5da82f1abd59666d524965e87f4ac1658f5b4b"
        }
      ]
    },
    {
      "id": "concept:waves-and-information",
      "kind": "concept",
      "slug": "waves-and-information",
      "title": "Waves and information",
      "summary": "Understand waves as propagating patterns that carry energy and information.",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3f4260c4ee17ec9f42a62d00c01b15061184f9803d21e2c7afa661f81f68ca02"
        }
      ]
    },
    {
      "id": "objective:waves-and-information",
      "kind": "learning_objective",
      "slug": "objective-waves-and-information",
      "title": "Relate wave speed, frequency, wavelength, phase, and superposition.",
      "summary": "Relate wave speed, frequency, wavelength, phase, and superposition.",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "80a46c118b39b93ac5d827ebc0960d6496444046626387740ae98a75775a62c2"
        }
      ]
    },
    {
      "id": "lesson:waves-and-information",
      "kind": "lesson",
      "slug": "lesson-waves-and-information",
      "title": "Waves and information",
      "summary": "Understand waves as propagating patterns that carry energy and information.",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d99396d1e3eda727845c42337edfda7bfb3d87ae790ce405727924dbd50483d6"
        }
      ]
    },
    {
      "id": "assessment:waves-and-information",
      "kind": "assessment",
      "slug": "assessment-waves-and-information",
      "title": "Waves and information: retrieval check",
      "summary": "What changes when wave frequency doubles but speed stays fixed?",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "66a0bfd8aca76378abf1a5b5cf2f98ed78b80530b88ab3549faa55f4dd6c45ee"
        }
      ]
    },
    {
      "id": "misconception:waves-and-information",
      "kind": "misconception",
      "slug": "misconception-waves-and-information",
      "title": "Common error: Waves and information",
      "summary": "Matter travels from a wave source to the observer with the wave pattern.",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9f1a7c068dd9ac5bd053867707953b50ded329a1896dc3bdb0cb79280bd6476e"
        }
      ]
    },
    {
      "id": "simulation:wave-table",
      "kind": "simulation",
      "slug": "wave-table",
      "title": "Waves and information",
      "summary": "Combine two sinusoidal waves. Adjust frequency and phase, then identify beats, standing patterns, and points of destructive interference from the actual summed displacement.",
      "pathway": "physics",
      "level": 4,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e4a072de9211de7eac27adb61672b36143e362fea08c551eddee54c9fc9de519"
        }
      ]
    },
    {
      "id": "concept:fields-models-and-limits",
      "kind": "concept",
      "slug": "fields-models-and-limits",
      "title": "Fields, models, and limits",
      "summary": "Use fields to describe local influence and treat every physical model as a scoped approximation.",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "805de29dc94368a61fcfd18c778d09a8123bb5691c97241b0d417f80a76698fa"
        }
      ]
    },
    {
      "id": "objective:fields-models-and-limits",
      "kind": "learning_objective",
      "slug": "objective-fields-models-and-limits",
      "title": "Interpret a field as a value assigned throughout space and state a model's domain of validity.",
      "summary": "Interpret a field as a value assigned throughout space and state a model's domain of validity.",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ce46f8b4b0ffd1756d5cb4eb33bd0a740f6bfdac475768b78be8e55284408489"
        }
      ]
    },
    {
      "id": "lesson:fields-models-and-limits",
      "kind": "lesson",
      "slug": "lesson-fields-models-and-limits",
      "title": "Fields, models, and limits",
      "summary": "Use fields to describe local influence and treat every physical model as a scoped approximation.",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "49cdbec7d3a6507ebf1f38bc31b57a85e98cbefefb9e439512ce61708cd87e38"
        }
      ]
    },
    {
      "id": "assessment:fields-models-and-limits",
      "kind": "assessment",
      "slug": "assessment-fields-models-and-limits",
      "title": "Fields, models, and limits: retrieval check",
      "summary": "Are field lines physical objects?",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "331e778bd0f1d3efc847bab34f8e81c5c67e4d52e8e449a63b9b9e7fac38063a"
        }
      ]
    },
    {
      "id": "misconception:fields-models-and-limits",
      "kind": "misconception",
      "slug": "misconception-fields-models-and-limits",
      "title": "Common error: Fields, models, and limits",
      "summary": "A successful model is a literal picture that must remain true at every scale.",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "31542736504fbc6f09c64351e51477b761af0236c9edf920805a1edc1f746862"
        }
      ]
    },
    {
      "id": "simulation:field-sampler",
      "kind": "simulation",
      "slug": "field-sampler",
      "title": "Fields, models, and limits",
      "summary": "Place positive and negative sources on a plane and sample the resulting vector field. Compare individual contributions with their vector sum and inspect where cancellation occurs.",
      "pathway": "physics",
      "level": 5,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a7387554a269ee5b86c373a9af11ad782c33a1a18d024823bea718c69662b170"
        }
      ]
    },
    {
      "id": "project:climate-signal-ledger",
      "kind": "project",
      "slug": "climate-signal-ledger",
      "title": "Climate signal ledger",
      "summary": "Build a sourced notebook that separates trend, variation, sampling, and uncertainty in a public temperature series.",
      "pathway": "mathematics",
      "level": 6,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0b7ccc7a7a66e987b9e0fbd6f9718308ddeed42f288579d7c96f26f59d672eb1"
        }
      ]
    },
    {
      "id": "project:small-search-engine",
      "kind": "project",
      "slug": "small-search-engine",
      "title": "A small search engine",
      "summary": "Design, test, and document an index over a local text collection, including invariants and complexity tradeoffs.",
      "pathway": "computing",
      "level": 6,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "17b0ed25cdaeb0658ffe240591019020b5528660bfd4fbb004e6f871580af816"
        }
      ]
    },
    {
      "id": "project:orbital-model-audit",
      "kind": "project",
      "slug": "orbital-model-audit",
      "title": "Orbital model audit",
      "summary": "Construct a computational orbit model and write an evidence record for timestep error, conservation, and validity limits.",
      "pathway": "physics",
      "level": 6,
      "status": "draft",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "9b2e0a3e379859b4239d18cd7cc0145ab1f38a8cdb94208f8226826105ae2e43"
        }
      ]
    },
    {
      "id": "source:atlas-method",
      "kind": "source",
      "slug": "source-atlas-method",
      "title": "Ephemerent Atlas curriculum method",
      "summary": "Ephemerent Education; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "cad7f4ca37d2fd30f99e6409eeb927090531740bdcb83d19a028f677c52a32df"
        }
      ]
    },
    {
      "id": "source:openstax-prealgebra",
      "kind": "source",
      "slug": "source-openstax-prealgebra",
      "title": "Prealgebra 2e",
      "summary": "OpenStax; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a42419dd1091b929ba205e1d6b5861b3f39d5be8e6877e223d674e567fe7c567"
        }
      ]
    },
    {
      "id": "source:openstax-algebra",
      "kind": "source",
      "slug": "source-openstax-algebra",
      "title": "Algebra and Trigonometry 2e",
      "summary": "OpenStax; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fd5a3286ce19e3febcba6f2a1944d85bcf82dc3fbacd8eaaabe46d0a4f2b9690"
        }
      ]
    },
    {
      "id": "source:openstax-calculus",
      "kind": "source",
      "slug": "source-openstax-calculus",
      "title": "Calculus, Volume 1",
      "summary": "OpenStax; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3f8789f0d6f93b2249c34e9a6bc623366c1149dc889fbb874105b86a6524239f"
        }
      ]
    },
    {
      "id": "source:openstax-statistics",
      "kind": "source",
      "slug": "source-openstax-statistics",
      "title": "Introductory Statistics 2e",
      "summary": "OpenStax; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "7c47830ba82a3823b4ae9782dd38e8d1e50f1b73cbdcb70a1d55fefb029f3e63"
        }
      ]
    },
    {
      "id": "source:python-tutorial",
      "kind": "source",
      "slug": "source-python-tutorial",
      "title": "The Python Tutorial",
      "summary": "Python Software Foundation; PSF License Version 2.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "834422ec1870554e775b453c7f6fcdd83e754005f4390a61f5a3c69e7f4e48ae"
        }
      ]
    },
    {
      "id": "source:open-data-structures",
      "kind": "source",
      "slug": "source-open-data-structures",
      "title": "Open Data Structures",
      "summary": "Pat Morin; CC BY 2.5 CA.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2fcef050a40b79fd465450b03f5b468aacc4487abc106a9d415f1d24bbead14b"
        }
      ]
    },
    {
      "id": "source:rust-book",
      "kind": "source",
      "slug": "source-rust-book",
      "title": "The Rust Programming Language",
      "summary": "The Rust Project Developers; MIT OR Apache-2.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "898327d8d7e7a4ce46c85b9f84f1f335d50352f8bbc563888067ce28c68c6772"
        }
      ]
    },
    {
      "id": "source:google-ml",
      "kind": "source",
      "slug": "source-google-ml",
      "title": "Machine Learning Crash Course",
      "summary": "Google for Developers; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "19f076d8f96b6e69f8ffa8f1155a4b6bae00a6e2512cbdfba3d21783bd3b565d"
        }
      ]
    },
    {
      "id": "source:openstax-physics",
      "kind": "source",
      "slug": "source-openstax-physics",
      "title": "University Physics",
      "summary": "OpenStax; CC BY 4.0.",
      "pathway": null,
      "level": 0,
      "status": "published",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "df232fb325d255a7dcae103e501572887b20673bede5ffb74ac4f826aac90fd8"
        }
      ]
    }
  ],
  "edges": [
    {
      "id": "edge:contains:discipline:mathematics:pathway:mathematics",
      "from": "discipline:mathematics",
      "to": "pathway:mathematics",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fecf4d19973d697569f2e9729640319c9d1ef540f5dfb44ef74025ad6041edb4"
        }
      ]
    },
    {
      "id": "edge:contains:discipline:computing:pathway:computing",
      "from": "discipline:computing",
      "to": "pathway:computing",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4b621267a6ce6a3123d553cf9ebb5d00dbb00c49debaea868de72e37afadf382"
        }
      ]
    },
    {
      "id": "edge:contains:discipline:physics:pathway:physics",
      "from": "discipline:physics",
      "to": "pathway:physics",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "15588d6a4e152013190169837244f4ba3032b547d9ce7f7458f0b5ee687960f0"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:concept:quantities-ratios-and-scale",
      "from": "pathway:mathematics",
      "to": "concept:quantities-ratios-and-scale",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5e8a5832165e95c814dceb4d0322cce40a9d4b7601cb35c4ed3b426950e30b12"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:lesson:quantities-ratios-and-scale",
      "from": "pathway:mathematics",
      "to": "lesson:quantities-ratios-and-scale",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "74f826a104b774afd4664c2d143e5df0b96a2be5b82c37feb52438d65ebf2662"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:quantities-ratios-and-scale:objective:quantities-ratios-and-scale",
      "from": "lesson:quantities-ratios-and-scale",
      "to": "objective:quantities-ratios-and-scale",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "051a5af1f2ef00a1caae911621217be482b230aba2b4d15313e87dcfa0a02517"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:quantities-ratios-and-scale:objective:quantities-ratios-and-scale",
      "from": "assessment:quantities-ratios-and-scale",
      "to": "objective:quantities-ratios-and-scale",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "757423c6678f6a85e62900a8036ffcf31bce716de0e2dcee8003c0ab7797f67e"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:quantities-ratios-and-scale:misconception:quantities-ratios-and-scale",
      "from": "lesson:quantities-ratios-and-scale",
      "to": "misconception:quantities-ratios-and-scale",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ddf4b0a8f10f1b238542f0302494893c1e8c84a4de30b7997ed637a8ba694fb7"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:scale-bench:concept:quantities-ratios-and-scale",
      "from": "simulation:scale-bench",
      "to": "concept:quantities-ratios-and-scale",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8b38af2aaf6fbe59b1c2ebe1a05011c035b385845843716c00bee2baa0822427"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:quantities-ratios-and-scale:source:openstax-prealgebra",
      "from": "lesson:quantities-ratios-and-scale",
      "to": "source:openstax-prealgebra",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-prealgebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "061fb4a1f337a062e571ad3f3bbc0c795ab23cd46d9eaf030a4543e306f53a1e"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:concept:functions-as-dependence",
      "from": "pathway:mathematics",
      "to": "concept:functions-as-dependence",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "81638001378de0d5e8bb22dc23e5d3bb798fe96457838e951722fa68158b9a50"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:lesson:functions-as-dependence",
      "from": "pathway:mathematics",
      "to": "lesson:functions-as-dependence",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "239cf19a8a4e7105917e8a8dcb1251d02855ef12d45f72a2c862396d7910a287"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:functions-as-dependence:objective:functions-as-dependence",
      "from": "lesson:functions-as-dependence",
      "to": "objective:functions-as-dependence",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a5330cda99bcd2eb7a24f5096cf6367de22b2deaa2fd8532563e71275ad664f9"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:functions-as-dependence:objective:functions-as-dependence",
      "from": "assessment:functions-as-dependence",
      "to": "objective:functions-as-dependence",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "36e5b04adc17b37bdd627a3919f0c0783cb1b89b65fc125a68e8219395211b0f"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:functions-as-dependence:misconception:functions-as-dependence",
      "from": "lesson:functions-as-dependence",
      "to": "misconception:functions-as-dependence",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4ad40dc03e59dded9af399c22337b16cc711f6b4e2d9a7f4d065043832835ec4"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:function-bench:concept:functions-as-dependence",
      "from": "simulation:function-bench",
      "to": "concept:functions-as-dependence",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ae5dc14360e081ab889f71c3ee3c3175889aec6a4b76a57be3f72d7af7dc019f"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:functions-as-dependence:source:openstax-algebra",
      "from": "lesson:functions-as-dependence",
      "to": "source:openstax-algebra",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8d64fee94934c12719b011a34e4c1a558acd5b9109e349036da5bdb27cfd797f"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:quantities-ratios-and-scale:concept:functions-as-dependence",
      "from": "concept:quantities-ratios-and-scale",
      "to": "concept:functions-as-dependence",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "497451138399f654a570633ab1994aec26083784bfd44a8c1c5f3f21460f70dd"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:concept:vectors-and-coordinate-change",
      "from": "pathway:mathematics",
      "to": "concept:vectors-and-coordinate-change",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fe9d4f87e7655e5554613d88f29a5ec40f2fc7f2b1e809972f851801f5d714df"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:lesson:vectors-and-coordinate-change",
      "from": "pathway:mathematics",
      "to": "lesson:vectors-and-coordinate-change",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6ddd48ccb16bd8f85064cf5b249625c3dbfb748bdb228b306df26e9ec8ef3b82"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:vectors-and-coordinate-change:objective:vectors-and-coordinate-change",
      "from": "lesson:vectors-and-coordinate-change",
      "to": "objective:vectors-and-coordinate-change",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c6d147efb0d9394934b332df17eba9fe8f5a37d50cf35ac725655d7e1932771e"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:vectors-and-coordinate-change:objective:vectors-and-coordinate-change",
      "from": "assessment:vectors-and-coordinate-change",
      "to": "objective:vectors-and-coordinate-change",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fa493ad22172d4ebc6a5448fa0d73abc5b95e97a35dd37b4da477dbee42960a6"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:vectors-and-coordinate-change:misconception:vectors-and-coordinate-change",
      "from": "lesson:vectors-and-coordinate-change",
      "to": "misconception:vectors-and-coordinate-change",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d79da7744f5239ede3efee7fb38f1dd0acae12d0f5bba9d6fa1813461fd31969"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:vector-composer:concept:vectors-and-coordinate-change",
      "from": "simulation:vector-composer",
      "to": "concept:vectors-and-coordinate-change",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2c53924d5849efb38948e219a43532104fba527a9435f7c58010c5e59f5afd34"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:vectors-and-coordinate-change:source:openstax-algebra",
      "from": "lesson:vectors-and-coordinate-change",
      "to": "source:openstax-algebra",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-algebra",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d74102ebe48f3825b09de489639c9911e59d3943914b732baba85554097fe2fb"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:functions-as-dependence:concept:vectors-and-coordinate-change",
      "from": "concept:functions-as-dependence",
      "to": "concept:vectors-and-coordinate-change",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8243d023a36bd94468aeaeb3405172941edca87df05deaa16e3fcebb436bf5b1"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:concept:change-and-accumulation",
      "from": "pathway:mathematics",
      "to": "concept:change-and-accumulation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4dd5d309fb243878bef933f2c90d9f55fca72d432ae7b59c38192314041df828"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:lesson:change-and-accumulation",
      "from": "pathway:mathematics",
      "to": "lesson:change-and-accumulation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fb54d51760d3509b43ae5fd16a5c89d7a05399bb7ed43b0ef45e15699b725390"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:change-and-accumulation:objective:change-and-accumulation",
      "from": "lesson:change-and-accumulation",
      "to": "objective:change-and-accumulation",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c055b683f9e1a42c328523b2f6abcb8ee0e4d8f5c6a5326c2d312142b2573c1a"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:change-and-accumulation:objective:change-and-accumulation",
      "from": "assessment:change-and-accumulation",
      "to": "objective:change-and-accumulation",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4b3738c87f6231c27e97608de85236da0bb9c2dcdd81bcebafc8a4b4a58ffdbd"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:change-and-accumulation:misconception:change-and-accumulation",
      "from": "lesson:change-and-accumulation",
      "to": "misconception:change-and-accumulation",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "97c4fe21e84970bc433e6a812ff4f2bcd6703322f905308b66fe4661bac56ed1"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:accumulation-table:concept:change-and-accumulation",
      "from": "simulation:accumulation-table",
      "to": "concept:change-and-accumulation",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0fc72c10a051c0d192f9aa2b1d9ecd58dbf5ccc90a9720fe2ac3738f52d1d7f0"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:change-and-accumulation:source:openstax-calculus",
      "from": "lesson:change-and-accumulation",
      "to": "source:openstax-calculus",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-calculus",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "41fa2d2cae9a2e3fa3b393c6acabd588d45f6a9a4ccb3283e9c420e1b884b203"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:vectors-and-coordinate-change:concept:change-and-accumulation",
      "from": "concept:vectors-and-coordinate-change",
      "to": "concept:change-and-accumulation",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "66f2a2cec5651d3c4a1cd9e5ac5c4f07bb078ff8f43080a23e79e18a66fe01b2"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:concept:probability-as-evidence",
      "from": "pathway:mathematics",
      "to": "concept:probability-as-evidence",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1f5ce2d0da8b3bc59ff8e797302b1d5502483467c5427ea008656c4740c575ed"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:lesson:probability-as-evidence",
      "from": "pathway:mathematics",
      "to": "lesson:probability-as-evidence",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "afcb4cfdf3c45abe974ecef4bf9bb918bde154573a351623c359a358904aad6f"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:probability-as-evidence:objective:probability-as-evidence",
      "from": "lesson:probability-as-evidence",
      "to": "objective:probability-as-evidence",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b801ebc9419aa9e6a6f50f74f000a13684aeddfc0d7981225d96b223d4fae698"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:probability-as-evidence:objective:probability-as-evidence",
      "from": "assessment:probability-as-evidence",
      "to": "objective:probability-as-evidence",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "cc74877ff6027750b17df4635917e31ccb509c4ed48283a9409351adf82ebf1f"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:probability-as-evidence:misconception:probability-as-evidence",
      "from": "lesson:probability-as-evidence",
      "to": "misconception:probability-as-evidence",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e62aaccccabd83f78c2fe2b468a0b6477368bb6212d3a0b402f79b56a3166c5e"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:sampling-table:concept:probability-as-evidence",
      "from": "simulation:sampling-table",
      "to": "concept:probability-as-evidence",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e1cbcfe59110999721b0d3258f7999a03d041f2e0da0718c36895e6be5c12136"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:probability-as-evidence:source:openstax-statistics",
      "from": "lesson:probability-as-evidence",
      "to": "source:openstax-statistics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-statistics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c6d039bafd8fb5cf746265e826b54b0d53979b078b09329126d1b361d4883c90"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:change-and-accumulation:concept:probability-as-evidence",
      "from": "concept:change-and-accumulation",
      "to": "concept:probability-as-evidence",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "538a1ccd5dce39b77c69a3f130dd141e7f5785c72501391edf9095a5e4e0eebc"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:concept:procedures-and-state",
      "from": "pathway:computing",
      "to": "concept:procedures-and-state",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2d66ac3e350e4fe4817709e76ad84472f31b6af26190286a7d7ac6be526ec671"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:lesson:procedures-and-state",
      "from": "pathway:computing",
      "to": "lesson:procedures-and-state",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3a95b02a7953ff3dca64829f85f0f8ffb14c6527428db2be6edf0e8e4e761367"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:procedures-and-state:objective:procedures-and-state",
      "from": "lesson:procedures-and-state",
      "to": "objective:procedures-and-state",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "f124c65f37729b1b9e979ba974a8d34151e749e14ed330f31f3df9f412790c11"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:procedures-and-state:objective:procedures-and-state",
      "from": "assessment:procedures-and-state",
      "to": "objective:procedures-and-state",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ece072263443380ef2da2727b5fb56e7b62dc1b084dfc879209aaae2bbd6ea9a"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:procedures-and-state:misconception:procedures-and-state",
      "from": "lesson:procedures-and-state",
      "to": "misconception:procedures-and-state",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6ab26c7fde1078cebe726f78c16e1de9778fd826dd90180d1db64851c52e7349"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:python-trace:concept:procedures-and-state",
      "from": "simulation:python-trace",
      "to": "concept:procedures-and-state",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4b9a6cb93e34ab1d0468ffaa592335b0500f8d209efe196f1ba71fc5e5c6ad5c"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:procedures-and-state:source:python-tutorial",
      "from": "lesson:procedures-and-state",
      "to": "source:python-tutorial",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:python-tutorial",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "450f178bfd9a64df14ad39b8cd0d25df8443b82121eb5e13ea456d9ce6b5eeda"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:concept:data-and-invariants",
      "from": "pathway:computing",
      "to": "concept:data-and-invariants",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "abb4135db52b811a515518eb3b3be53ed9ad82ed19864063d8f16fdf36b2e533"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:lesson:data-and-invariants",
      "from": "pathway:computing",
      "to": "lesson:data-and-invariants",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a3ded38265e5e6000a61790d5cba6610b67d2fc7590ee312a3565d1c0f58224e"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:data-and-invariants:objective:data-and-invariants",
      "from": "lesson:data-and-invariants",
      "to": "objective:data-and-invariants",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e1ec6ffab1eed62a39df7aca3e0a6fc282aae287b03b6c591e2088c5ab779022"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:data-and-invariants:objective:data-and-invariants",
      "from": "assessment:data-and-invariants",
      "to": "objective:data-and-invariants",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8ad7973247eed806f3b4a4c55d4c2070496c0535156a8ab57234e6dbffff7a52"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:data-and-invariants:misconception:data-and-invariants",
      "from": "lesson:data-and-invariants",
      "to": "misconception:data-and-invariants",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3c95bb11387bae633d663fc591045356cb6888dbeaac77ed7c57cecd8b713c82"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:structure-bench:concept:data-and-invariants",
      "from": "simulation:structure-bench",
      "to": "concept:data-and-invariants",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a2f40a373aa89ef86d06f5934b4b524e3ae27335ac62d95b0a48dda7d044cc3f"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:data-and-invariants:source:open-data-structures",
      "from": "lesson:data-and-invariants",
      "to": "source:open-data-structures",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "30c3a216d73f568eeca7c8a443f54440539b9653231b976e0da001d26870f2f2"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:procedures-and-state:concept:data-and-invariants",
      "from": "concept:procedures-and-state",
      "to": "concept:data-and-invariants",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4972416d8b87f7681db666347b16e598a547d75fa1cb649e811a2e25aaa1370a"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:concept:algorithms-and-cost",
      "from": "pathway:computing",
      "to": "concept:algorithms-and-cost",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5f62149c20e1adb3f01780ba0369c515be2158afebc4449ff9a6fab2e14a5a1c"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:lesson:algorithms-and-cost",
      "from": "pathway:computing",
      "to": "lesson:algorithms-and-cost",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5986eaf6a7c1c8fd7d69dac8d61efe3adf508e5a7ea2717c8f1b709bfaa2cb74"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:algorithms-and-cost:objective:algorithms-and-cost",
      "from": "lesson:algorithms-and-cost",
      "to": "objective:algorithms-and-cost",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b1ddd768cff8f9f0444d1b9fa98ba44d5e34b91d55ae23de122f553aed521aa8"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:algorithms-and-cost:objective:algorithms-and-cost",
      "from": "assessment:algorithms-and-cost",
      "to": "objective:algorithms-and-cost",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e36d006bc00abea534bff60c3d19290d52b2cc39db950f08edf173c7d1520d1e"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:algorithms-and-cost:misconception:algorithms-and-cost",
      "from": "lesson:algorithms-and-cost",
      "to": "misconception:algorithms-and-cost",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b7b2200c81a883563fb1f359911ffad71cf1111df330635ecd89603fe8c7de43"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:complexity-trace:concept:algorithms-and-cost",
      "from": "simulation:complexity-trace",
      "to": "concept:algorithms-and-cost",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "eb2aa672c3003afab4ccd86f6a132ad39c2136adf360d8c0f622a5a6f731743c"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:algorithms-and-cost:source:open-data-structures",
      "from": "lesson:algorithms-and-cost",
      "to": "source:open-data-structures",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:open-data-structures",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "546dcf3042ecb486a8df6751dd865afe2916a8a821c27186200564fa8febba41"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:data-and-invariants:concept:algorithms-and-cost",
      "from": "concept:data-and-invariants",
      "to": "concept:algorithms-and-cost",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8fa8e30df0a71746eccbe734f7ede541636104f2f86284751e75d9180e445a0c"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:concept:ownership-and-systems",
      "from": "pathway:computing",
      "to": "concept:ownership-and-systems",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "48396165da760d76f4a0fad114fc33fde0260778dbe8ad1647e32278785caaf2"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:lesson:ownership-and-systems",
      "from": "pathway:computing",
      "to": "lesson:ownership-and-systems",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d11d4d56ac1e5483defcbb3d9a6452446bd06d16b1f1d2c8e83dd8c08f1c6689"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:ownership-and-systems:objective:ownership-and-systems",
      "from": "lesson:ownership-and-systems",
      "to": "objective:ownership-and-systems",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "e1fb087b859e34b1d501f3f1e8515be775f9039405219be46b95bb2c30238c8d"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:ownership-and-systems:objective:ownership-and-systems",
      "from": "assessment:ownership-and-systems",
      "to": "objective:ownership-and-systems",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "67b098ee826eabd2b0354b9acb37fa5998e9119c79f82a17ca9ef0826f963165"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:ownership-and-systems:misconception:ownership-and-systems",
      "from": "lesson:ownership-and-systems",
      "to": "misconception:ownership-and-systems",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "0610d14f515b5e1475e3ab24599f32dfc76fc229554613e6e6947cec2c4f3238"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:ownership-trace:concept:ownership-and-systems",
      "from": "simulation:ownership-trace",
      "to": "concept:ownership-and-systems",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "85b4127db953366b5b183e72456d3d2acc216c2cdbad6663f9d6fefb58ebd5b7"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:ownership-and-systems:source:rust-book",
      "from": "lesson:ownership-and-systems",
      "to": "source:rust-book",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:rust-book",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "b9ff0fb89cc0e4f5d4061fc1a795dc2d5251782c85554ba92ac24ffa7b466e3d"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:algorithms-and-cost:concept:ownership-and-systems",
      "from": "concept:algorithms-and-cost",
      "to": "concept:ownership-and-systems",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3e83a6562105ff5d57266009ad988fbf793a90baf43690e5bffb8925c992a559"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:concept:learning-systems-and-evaluation",
      "from": "pathway:computing",
      "to": "concept:learning-systems-and-evaluation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1b40607103f016699b5167bc2c2bd86695a0195f970b705617f036555979071b"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:lesson:learning-systems-and-evaluation",
      "from": "pathway:computing",
      "to": "lesson:learning-systems-and-evaluation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "448fd7d8128a159e035c3f2d48a06c0bbb5c8aa46016867046bab71c5b604f36"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:learning-systems-and-evaluation:objective:learning-systems-and-evaluation",
      "from": "lesson:learning-systems-and-evaluation",
      "to": "objective:learning-systems-and-evaluation",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2e2c4b97bc3fab52220a632b4e1e0bbcab08307c5a8e0c4d991c0ea16e192572"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:learning-systems-and-evaluation:objective:learning-systems-and-evaluation",
      "from": "assessment:learning-systems-and-evaluation",
      "to": "objective:learning-systems-and-evaluation",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4c49118f9b32d9fd9af45d16bba786b78dc9f6696cfc2bad8bf41c7de4bfaa57"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:learning-systems-and-evaluation:misconception:learning-systems-and-evaluation",
      "from": "lesson:learning-systems-and-evaluation",
      "to": "misconception:learning-systems-and-evaluation",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "99a5c22c5d9a84a635f1f5b6150de34fd0389435ab68dde3aaab4f66c2a64c18"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:threshold-bench:concept:learning-systems-and-evaluation",
      "from": "simulation:threshold-bench",
      "to": "concept:learning-systems-and-evaluation",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "001b0a6faae0312f87b2fc7ec58a7cec2a35ad8b85b773d0b53e3579553f7d9d"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:learning-systems-and-evaluation:source:google-ml",
      "from": "lesson:learning-systems-and-evaluation",
      "to": "source:google-ml",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:google-ml",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "aa9ecdffac0b44dfb31873c710fe9a20c9e16d525daa6b80624d52a909d99faf"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:ownership-and-systems:concept:learning-systems-and-evaluation",
      "from": "concept:ownership-and-systems",
      "to": "concept:learning-systems-and-evaluation",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "3fb1325cf491b340363486970a36c7b4db91add296b71cc259008c8333c784df"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:concept:measurement-and-uncertainty",
      "from": "pathway:physics",
      "to": "concept:measurement-and-uncertainty",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "fc099ca1d8aa186b24046995012e28f0386e1be68a1019300b763b8446dfacbd"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:lesson:measurement-and-uncertainty",
      "from": "pathway:physics",
      "to": "lesson:measurement-and-uncertainty",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2f032a6f7ceec2d1d79b9412c41feb03f411009a97ed8d125b871eee967a637f"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:measurement-and-uncertainty:objective:measurement-and-uncertainty",
      "from": "lesson:measurement-and-uncertainty",
      "to": "objective:measurement-and-uncertainty",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d3ce5dc0268513a2cc37cf0fadf6de3aa4661f6a7c1691d1be4af65dcee042da"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:measurement-and-uncertainty:objective:measurement-and-uncertainty",
      "from": "assessment:measurement-and-uncertainty",
      "to": "objective:measurement-and-uncertainty",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ce40c2d06b4c997a9e38be3ce0c1d4bcd752c2b78e13e782912c0c15d2f9e3e2"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:measurement-and-uncertainty:misconception:measurement-and-uncertainty",
      "from": "lesson:measurement-and-uncertainty",
      "to": "misconception:measurement-and-uncertainty",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "68842402824d843096ed3f8eca9dc529cf04f865bb2cf5e8d89e69993a0a4011"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:measurement-bench:concept:measurement-and-uncertainty",
      "from": "simulation:measurement-bench",
      "to": "concept:measurement-and-uncertainty",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4b95039b8ad3abe4be923086fd5813364085b868c74f93085d579368e9926fea"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:measurement-and-uncertainty:source:openstax-physics",
      "from": "lesson:measurement-and-uncertainty",
      "to": "source:openstax-physics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8078c5073ee496b923eb8a0def64cb9043b2b79ee7fc8e6644ab75b693cb49d9"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:concept:motion-and-interaction",
      "from": "pathway:physics",
      "to": "concept:motion-and-interaction",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ae662de1271e0a6ca99c6af040c14427495819c2f7dfc21317bdf97af3d5899b"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:lesson:motion-and-interaction",
      "from": "pathway:physics",
      "to": "lesson:motion-and-interaction",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "4c2cbae783d2cd3b8280229c7adcf5d8f82a2fe0fc5579cc3703b4b33295956e"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:motion-and-interaction:objective:motion-and-interaction",
      "from": "lesson:motion-and-interaction",
      "to": "objective:motion-and-interaction",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "040943b00f5866b8dae9c84ca592d6deed0ccf770ba5551ac20b37b973a802cc"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:motion-and-interaction:objective:motion-and-interaction",
      "from": "assessment:motion-and-interaction",
      "to": "objective:motion-and-interaction",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "1d0bfb74c023c97af2dd726675409002729e0dc9cc619d9c22470e5b73be88f7"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:motion-and-interaction:misconception:motion-and-interaction",
      "from": "lesson:motion-and-interaction",
      "to": "misconception:motion-and-interaction",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2fcd4349e9efefe9b99a967f333dbf31c9e168d631cfc5a12ba1a3355184b956"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:motion-tape:concept:motion-and-interaction",
      "from": "simulation:motion-tape",
      "to": "concept:motion-and-interaction",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "96e0f6a135876e544b4d0ba2dc760d18d1717589f73768b192fafa666c858035"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:motion-and-interaction:source:openstax-physics",
      "from": "lesson:motion-and-interaction",
      "to": "source:openstax-physics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ce6a29489c72d2d99f4a9f67a66e8bf0798c64043d1bc848f94c66cd0910e181"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:measurement-and-uncertainty:concept:motion-and-interaction",
      "from": "concept:measurement-and-uncertainty",
      "to": "concept:motion-and-interaction",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "513e4c20951aed833f705f88dc6ce8a16517f318e2115ad5fa690d5d90f9be66"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:concept:energy-and-conservation",
      "from": "pathway:physics",
      "to": "concept:energy-and-conservation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "095fba8ca4b8a980d147769204b09c04be0a28a677861fcdd2068b351ff00088"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:lesson:energy-and-conservation",
      "from": "pathway:physics",
      "to": "lesson:energy-and-conservation",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "2925f7d85c47ad4296743688dd8af369fc2074ddc9cb3d189ba8c46ea06b0cf9"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:energy-and-conservation:objective:energy-and-conservation",
      "from": "lesson:energy-and-conservation",
      "to": "objective:energy-and-conservation",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "631ca597c31284fbf5fb769fcfdee5bc9d286a87ffdefdfc8b825082e9d6e011"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:energy-and-conservation:objective:energy-and-conservation",
      "from": "assessment:energy-and-conservation",
      "to": "objective:energy-and-conservation",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d9ab8274084e3cf33d7c3fa181cafc22459a538d6de1003e4737f4d151e5da2b"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:energy-and-conservation:misconception:energy-and-conservation",
      "from": "lesson:energy-and-conservation",
      "to": "misconception:energy-and-conservation",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "427ad8bb75c859a0c64d6f7b1ebecd6d58f7a48b6f505636a2713850ee43d245"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:energy-ledger:concept:energy-and-conservation",
      "from": "simulation:energy-ledger",
      "to": "concept:energy-and-conservation",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d9f83423bf090b81e84e75526d394ea1fdbd9ae7d5861feccc5f07be65c85cbb"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:energy-and-conservation:source:openstax-physics",
      "from": "lesson:energy-and-conservation",
      "to": "source:openstax-physics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d556352412255faa93e2a20f3aa3db995a2bcda89f13b10c70ec51b0b3e38269"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:motion-and-interaction:concept:energy-and-conservation",
      "from": "concept:motion-and-interaction",
      "to": "concept:energy-and-conservation",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "a71c6d4f4d81a6a85330f9f62665180c98e6a8569f71d6aec26f7abb4367d331"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:concept:waves-and-information",
      "from": "pathway:physics",
      "to": "concept:waves-and-information",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d997b02c79ccc43094fedc3de4397f2a79a101a5bd30632ddcfc16d97da0ad1f"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:lesson:waves-and-information",
      "from": "pathway:physics",
      "to": "lesson:waves-and-information",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "425d513f2491113dab356e03eefbd0b8d8c26edb9addeafa17b766c41bab2378"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:waves-and-information:objective:waves-and-information",
      "from": "lesson:waves-and-information",
      "to": "objective:waves-and-information",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "114782550883688bbf5cc6729394e12fefb27a8d82ed79d117fb4901c4eb07e3"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:waves-and-information:objective:waves-and-information",
      "from": "assessment:waves-and-information",
      "to": "objective:waves-and-information",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "26e1cced9cebb694909f731ce722e78ba1f596b58c724c3a62df8b1383000fbd"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:waves-and-information:misconception:waves-and-information",
      "from": "lesson:waves-and-information",
      "to": "misconception:waves-and-information",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c442b6cd34641437a6e2e89b9369a9b2e3c30d924e18c81a4c108bf7061902cc"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:wave-table:concept:waves-and-information",
      "from": "simulation:wave-table",
      "to": "concept:waves-and-information",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6b134540f964a03c955264cc60d8af0e35af16016bd16ef295a826129aa4bc56"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:waves-and-information:source:openstax-physics",
      "from": "lesson:waves-and-information",
      "to": "source:openstax-physics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "278b3790166bd1d3e32eb1ed868d60a683cdb06c49138135339a4aa39521f5f4"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:energy-and-conservation:concept:waves-and-information",
      "from": "concept:energy-and-conservation",
      "to": "concept:waves-and-information",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c4cc30b3ebac2e12939c47007a7235c45b869ef3c39cfadeff94ed81e1eef873"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:concept:fields-models-and-limits",
      "from": "pathway:physics",
      "to": "concept:fields-models-and-limits",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c02b65b579283e55ef3c768f132d85252f4b58405737ecb4273edb199f673038"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:lesson:fields-models-and-limits",
      "from": "pathway:physics",
      "to": "lesson:fields-models-and-limits",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d09def8a72bb39b67b98b84a11fa09845ce255ec53c6893ea0f47834577587e0"
        }
      ]
    },
    {
      "id": "edge:teaches:lesson:fields-models-and-limits:objective:fields-models-and-limits",
      "from": "lesson:fields-models-and-limits",
      "to": "objective:fields-models-and-limits",
      "relation": "TEACHES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "630cff9d7b22cde09da67a507acb9a49624eaee71da0f0b4379335664dae33f3"
        }
      ]
    },
    {
      "id": "edge:assesses:assessment:fields-models-and-limits:objective:fields-models-and-limits",
      "from": "assessment:fields-models-and-limits",
      "to": "objective:fields-models-and-limits",
      "relation": "ASSESSES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "239d276688d89f361564b21bd1f66014ff7e772e536dcc07aae624231476afb3"
        }
      ]
    },
    {
      "id": "edge:addresses_misconception:lesson:fields-models-and-limits:misconception:fields-models-and-limits",
      "from": "lesson:fields-models-and-limits",
      "to": "misconception:fields-models-and-limits",
      "relation": "ADDRESSES_MISCONCEPTION",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "6b8c657fd49a34c37029a4590bec872ea0979fb74ceb2ed443b18e8d0b5a5e47"
        }
      ]
    },
    {
      "id": "edge:illustrates:simulation:field-sampler:concept:fields-models-and-limits",
      "from": "simulation:field-sampler",
      "to": "concept:fields-models-and-limits",
      "relation": "ILLUSTRATES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "5be446b2b61db4c894f8e40cb7bad59a21c597e8ae1c1646829c0bab58b8d8e8"
        }
      ]
    },
    {
      "id": "edge:cites:lesson:fields-models-and-limits:source:openstax-physics",
      "from": "lesson:fields-models-and-limits",
      "to": "source:openstax-physics",
      "relation": "CITES",
      "provenance": [
        {
          "source_id": "source:openstax-physics",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "98566fc008573d38ced6d164eba00f86d0a1173ba92bad73bed1167753e6b773"
        }
      ]
    },
    {
      "id": "edge:prerequisite_for:concept:waves-and-information:concept:fields-models-and-limits",
      "from": "concept:waves-and-information",
      "to": "concept:fields-models-and-limits",
      "relation": "PREREQUISITE_FOR",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ff801de1b7230c31c06d5d653175c8d474d68cefeb8bf5f753f498b74f1f0b3a"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:mathematics:project:climate-signal-ledger",
      "from": "pathway:mathematics",
      "to": "project:climate-signal-ledger",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "38acdaec7d9692a3470cf309472a838514c8404b0d4435dd2aafb7dd8b26fff4"
        }
      ]
    },
    {
      "id": "edge:applies:project:climate-signal-ledger:concept:change-and-accumulation",
      "from": "project:climate-signal-ledger",
      "to": "concept:change-and-accumulation",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "383b7a8bdb524a6adc4db07989b2f3b49d62e01a97d92cd644c51b805387ac3b"
        }
      ]
    },
    {
      "id": "edge:applies:project:climate-signal-ledger:concept:probability-as-evidence",
      "from": "project:climate-signal-ledger",
      "to": "concept:probability-as-evidence",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "53582202546f71fc1a47b8ea4c694c328392c5256c866169269fed0b022f213f"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:computing:project:small-search-engine",
      "from": "pathway:computing",
      "to": "project:small-search-engine",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "71dc16e5231c6e6d5a5c8b240cd72733b96521c0bde9faf535542ec60cbab939"
        }
      ]
    },
    {
      "id": "edge:applies:project:small-search-engine:concept:data-and-invariants",
      "from": "project:small-search-engine",
      "to": "concept:data-and-invariants",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "d9b00c4b2d4c2f07df08e61ebcc5786b18ef57e62f29a272915d5b08c03f02e0"
        }
      ]
    },
    {
      "id": "edge:applies:project:small-search-engine:concept:algorithms-and-cost",
      "from": "project:small-search-engine",
      "to": "concept:algorithms-and-cost",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "c92430f584cc02fc45c1e1c5c0a6611370953a3a5888f0caf7e7fcce80c207c2"
        }
      ]
    },
    {
      "id": "edge:contains:pathway:physics:project:orbital-model-audit",
      "from": "pathway:physics",
      "to": "project:orbital-model-audit",
      "relation": "CONTAINS",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "37424e1f9988fc263b203c8c3f274c0c3e4f65eac033dfad19a63c01ae598897"
        }
      ]
    },
    {
      "id": "edge:applies:project:orbital-model-audit:concept:motion-and-interaction",
      "from": "project:orbital-model-audit",
      "to": "concept:motion-and-interaction",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "8856da5b8cfb94c25f98094c42f196d2ac971d15eabefe06f23ed80f45fac394"
        }
      ]
    },
    {
      "id": "edge:applies:project:orbital-model-audit:concept:energy-and-conservation",
      "from": "project:orbital-model-audit",
      "to": "concept:energy-and-conservation",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "242a894cf47d28c989127b8f6926449dec831dedbbf90dcdd0c1cfe386d7c33a"
        }
      ]
    },
    {
      "id": "edge:applies:project:orbital-model-audit:concept:fields-models-and-limits",
      "from": "project:orbital-model-audit",
      "to": "concept:fields-models-and-limits",
      "relation": "APPLIES",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "04c1a50159bca55e6aa4e93cb52a92bd489fe5c0c2f5e1fd149d2c4633939818"
        }
      ]
    },
    {
      "id": "edge:bridges_to:concept:functions-as-dependence:concept:procedures-and-state",
      "from": "concept:functions-as-dependence",
      "to": "concept:procedures-and-state",
      "relation": "BRIDGES_TO",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "cf9f59f5ebfcdb9463ee336128d6c56d4e2bfddd13ce9f66d5efc98d1d8e9377"
        }
      ]
    },
    {
      "id": "edge:bridges_to:concept:vectors-and-coordinate-change:concept:motion-and-interaction",
      "from": "concept:vectors-and-coordinate-change",
      "to": "concept:motion-and-interaction",
      "relation": "BRIDGES_TO",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "272cb98e126c45a8e541e1d3cc3674da3963aa1867c2d816a8a8af41fb6e0404"
        }
      ]
    },
    {
      "id": "edge:bridges_to:concept:probability-as-evidence:concept:learning-systems-and-evaluation",
      "from": "concept:probability-as-evidence",
      "to": "concept:learning-systems-and-evaluation",
      "relation": "BRIDGES_TO",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "ed64ad0308b38c5d6112b0297155a0269441c2800f3bb7560313c5c9a896f4e4"
        }
      ]
    },
    {
      "id": "edge:bridges_to:concept:algorithms-and-cost:concept:fields-models-and-limits",
      "from": "concept:algorithms-and-cost",
      "to": "concept:fields-models-and-limits",
      "relation": "BRIDGES_TO",
      "provenance": [
        {
          "source_id": "source:atlas-method",
          "recorded_at": "2026-08-12T12:00:00Z",
          "reviewer": "editorial-draft:subject-review-pending",
          "confidence": 0.8,
          "content_hash": "49090888e15d9228ab6d2f13db766230075144569a6a65c42a94076d692885a8"
        }
      ]
    }
  ],
  "lessons": [
    {
      "id": "lesson:quantities-ratios-and-scale",
      "slug": "quantities-ratios-and-scale",
      "concept_id": "concept:quantities-ratios-and-scale",
      "title": "Quantities, ratios, and scale",
      "deck": "Treat numbers as measured relationships rather than marks on a page.",
      "minutes": 38,
      "objective_ids": [
        "objective:quantities-ratios-and-scale"
      ],
      "prerequisite_ids": [],
      "source_ids": [
        "source:openstax-prealgebra"
      ],
      "misconception_ids": [
        "misconception:quantities-ratios-and-scale"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Choose a familiar object and estimate it in centimeters, meters, and kilometers. Convert each estimate back to meters. The magnitude changes with the unit while the represented length stays fixed."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A quantity is a numerical magnitude paired with a unit. A ratio a:b can be written a/b when b is nonzero. Two ratios are equivalent when cross-products agree. Dimensional analysis checks whether both sides of a relation describe the same kind of quantity."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Imagine every quantity as an arrow from zero with a label attached. The length says how much; the label says what kind. Ratios compare two arrows. Scale tells you whether a change is additive, like two extra meters, or multiplicative, like twice as far."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "A recipe, a map, and a laboratory reading all ask the same first question: what does this number count or measure? Units are not decoration. They tell you which comparisons are meaningful and which arithmetic operations describe the world."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "When a result feels surprising, inspect the units before repeating the arithmetic. Many apparent calculation errors are really representation errors."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Design a scale drawing for a room and annotate one place where a unit error would produce an unsafe result."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "A model car is 18 cm long at 1:24 scale. The full length is 18 × 24 = 432 cm, or 4.32 m. Notice the decision: the scale factor multiplies the model length because one model unit stands for twenty-four real units."
        }
      },
      "retrieval": [
        {
          "prompt": "Why is 5 meters + 3 seconds not a meaningful physical sum?",
          "answer": "The terms describe different dimensions, so addition cannot combine them into one quantity.",
          "misconception_id": "misconception:quantities-ratios-and-scale"
        }
      ],
      "transfer": "Design a scale drawing for a room and annotate one place where a unit error would produce an unsafe result.",
      "reflection": "When a result feels surprising, inspect the units before repeating the arithmetic. Many apparent calculation errors are really representation errors.",
      "simulation_slug": "scale-bench",
      "reviewed_by": []
    },
    {
      "id": "lesson:functions-as-dependence",
      "slug": "functions-as-dependence",
      "concept_id": "concept:functions-as-dependence",
      "title": "Functions as dependence",
      "deck": "Read a function as a dependable relationship between changing quantities.",
      "minutes": 44,
      "objective_ids": [
        "objective:functions-as-dependence"
      ],
      "prerequisite_ids": [
        "concept:quantities-ratios-and-scale"
      ],
      "source_ids": [
        "source:openstax-algebra"
      ],
      "misconception_ids": [
        "misconception:functions-as-dependence"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Change the rate and initial value in a linear rule. Predict which visual feature moves before checking: steepness belongs to the rate; vertical placement belongs to the initial value."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A function f maps every element of a domain to exactly one element of a codomain. The value f(x) is the output assigned to x. Composition g(f(x)) connects instruments in sequence; an inverse reverses the mapping only when outputs identify inputs uniquely on the chosen domain."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Picture a well-built instrument with one input dial and one output needle. Each allowed dial position produces exactly one needle reading. The instrument may be smooth, jumpy, or impossible to reverse; it is still a function if the same input never gives two outputs at once."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "A function is useful whenever one choice determines another value: time determines position, an image coordinate determines color, and a model input determines a prediction. The notation matters less than the dependency it records."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "When translating representations, name the input, output, allowed domain, and invariant relationship. Symbols become easier once those choices are explicit."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Describe the function connecting image width to height for a photograph whose aspect ratio must stay 3:2, using words, a table, and a formula."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "For f(t)=3t+2, the 3 is a rate and 2 is an initial value. At t=4, calculate 3×4+2=14. On a graph, the same decision appears as moving three vertical units for every one horizontal unit from a starting height of two."
        }
      },
      "retrieval": [
        {
          "prompt": "Can two different inputs of a function produce the same output?",
          "answer": "Yes. A function requires one output per input; it does not require different inputs to have different outputs.",
          "misconception_id": "misconception:functions-as-dependence"
        }
      ],
      "transfer": "Describe the function connecting image width to height for a photograph whose aspect ratio must stay 3:2, using words, a table, and a formula.",
      "reflection": "When translating representations, name the input, output, allowed domain, and invariant relationship. Symbols become easier once those choices are explicit.",
      "simulation_slug": "function-bench",
      "reviewed_by": []
    },
    {
      "id": "lesson:vectors-and-coordinate-change",
      "slug": "vectors-and-coordinate-change",
      "concept_id": "concept:vectors-and-coordinate-change",
      "title": "Vectors and coordinate change",
      "deck": "Separate a geometric direction from the coordinates used to describe it.",
      "minutes": 52,
      "objective_ids": [
        "objective:vectors-and-coordinate-change"
      ],
      "prerequisite_ids": [
        "concept:functions-as-dependence"
      ],
      "source_ids": [
        "source:openstax-algebra"
      ],
      "misconception_ids": [
        "misconception:vectors-and-coordinate-change"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Compose two draggable arrows and compare component addition with the head-to-tail construction. Then rotate the coordinate axes and watch the coordinates move while the resultant arrow stays fixed."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A vector space supports addition and scalar multiplication. Relative to basis vectors e₁ and e₂, v=v₁e₁+v₂e₂. Its Euclidean magnitude is √(v₁²+v₂²). A change-of-basis matrix rewrites coordinates while preserving the represented vector."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Treat a vector as an instruction arrow. Coordinates are a receipt describing how much of each chosen basis arrow was used. Rotate the basis and the receipt changes, but the instruction arrow does not."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Directions survive changes of viewpoint. A displacement across a room is the same physical move whether the room is measured from the north wall or the doorway. Vectors let the move remain stable while coordinates change."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Whenever coordinates look mysterious, ask what basis they refer to and what underlying object should remain invariant."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Model a boat crossing a river by adding its velocity relative to the water to the water's velocity relative to the bank."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Add v=(3,1) and w=(-1,2) component by component to obtain (2,3). This is not a memorized trick: joining the arrows head-to-tail produces the same final displacement as combining each basis contribution."
        }
      },
      "retrieval": [
        {
          "prompt": "What remains unchanged when a vector is written in a new basis?",
          "answer": "The geometric vector remains unchanged; only its coordinate representation changes.",
          "misconception_id": "misconception:vectors-and-coordinate-change"
        }
      ],
      "transfer": "Model a boat crossing a river by adding its velocity relative to the water to the water's velocity relative to the bank.",
      "reflection": "Whenever coordinates look mysterious, ask what basis they refer to and what underlying object should remain invariant.",
      "simulation_slug": "vector-composer",
      "reviewed_by": []
    },
    {
      "id": "lesson:change-and-accumulation",
      "slug": "change-and-accumulation",
      "concept_id": "concept:change-and-accumulation",
      "title": "Change and accumulation",
      "deck": "See derivatives and integrals as two views of how local change builds a whole.",
      "minutes": 58,
      "objective_ids": [
        "objective:change-and-accumulation"
      ],
      "prerequisite_ids": [
        "concept:vectors-and-coordinate-change"
      ],
      "source_ids": [
        "source:openstax-calculus"
      ],
      "misconception_ids": [
        "misconception:change-and-accumulation"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Move two points together on a parabola and watch the secant slope approach a tangent slope. Then accumulate rectangles under that slope curve and compare the total with the original change in position."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "The derivative f′(x) is the limit of [f(x+h)-f(x)]/h as h approaches zero. The definite integral is the limit of weighted sums over finer partitions. The fundamental theorem connects them: accumulating a rate and then differentiating returns the rate under appropriate conditions."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Zoom into a smooth curve until a tiny piece looks straight. Its local tilt is the derivative. Tile the region under a rate curve with increasingly thin strips; their combined area approaches the integral."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "A speedometer reports change now; an odometer accumulates change across a trip. Calculus connects those two instruments. It gives precise language for local behavior and for the total built from many small contributions."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Keep units attached: derivatives divide output units by input units; integrals multiply a rate by its input unit."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Given a graph of electrical power over a day, explain what its slope and its area represent physically."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "For position s(t)=t², the average velocity from t to t+h is ((t+h)²-t²)/h=2t+h. Let h approach zero and the local velocity becomes 2t. The cancellation is the reasoning; the power rule is its reusable shortcut."
        }
      },
      "retrieval": [
        {
          "prompt": "Why does a derivative need a limiting process?",
          "answer": "A local rate concerns an interval of zero width, so we infer it from average rates over intervals that approach zero without dividing by zero.",
          "misconception_id": "misconception:change-and-accumulation"
        }
      ],
      "transfer": "Given a graph of electrical power over a day, explain what its slope and its area represent physically.",
      "reflection": "Keep units attached: derivatives divide output units by input units; integrals multiply a rate by its input unit.",
      "simulation_slug": "accumulation-table",
      "reviewed_by": []
    },
    {
      "id": "lesson:probability-as-evidence",
      "slug": "probability-as-evidence",
      "concept_id": "concept:probability-as-evidence",
      "title": "Probability as evidence",
      "deck": "Use distributions to reason about uncertainty without pretending it disappears.",
      "minutes": 54,
      "objective_ids": [
        "objective:probability-as-evidence"
      ],
      "prerequisite_ids": [
        "concept:change-and-accumulation"
      ],
      "source_ids": [
        "source:openstax-statistics"
      ],
      "misconception_ids": [
        "misconception:probability-as-evidence"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Draw repeated samples from a skewed population. Compare the changing sample values with the steadier distribution of sample means as sample size grows."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "For events A and B with P(B)>0, P(A|B)=P(A∩B)/P(B). An expected value is a probability-weighted average. A sample statistic varies across possible samples; its sampling distribution describes that variation."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "A distribution is a landscape of plausible outcomes, not one promised answer. Sampling explores the landscape. Conditioning reshapes it after new information rules out or favors some regions."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Measurements vary, samples omit information, and predictions concern futures we cannot inspect. Probability gives a coherent ledger for uncertainty; statistics connects that ledger to observed evidence."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Separate what was observed, what process may have produced it, and what remains uncertain. Confidence should follow evidence, not replace it."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Write a short evidence note explaining why model accuracy alone can be misleading when one class is rare."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Suppose 1 percent of devices fail and a test catches 95 percent of failures but falsely flags 5 percent of working devices. Out of 10,000 devices, about 95 true failures and 495 working devices are flagged. A flag therefore implies about 95/590, not 95 percent, chance of failure."
        }
      },
      "retrieval": [
        {
          "prompt": "What does conditioning change?",
          "answer": "It changes the reference set of possible outcomes by incorporating the information that the conditioning event occurred.",
          "misconception_id": "misconception:probability-as-evidence"
        }
      ],
      "transfer": "Write a short evidence note explaining why model accuracy alone can be misleading when one class is rare.",
      "reflection": "Separate what was observed, what process may have produced it, and what remains uncertain. Confidence should follow evidence, not replace it.",
      "simulation_slug": "sampling-table",
      "reviewed_by": []
    },
    {
      "id": "lesson:procedures-and-state",
      "slug": "procedures-and-state",
      "concept_id": "concept:procedures-and-state",
      "title": "Procedures and state",
      "deck": "Read programs as precise transformations of state, beginning with Python.",
      "minutes": 42,
      "objective_ids": [
        "objective:procedures-and-state"
      ],
      "prerequisite_ids": [],
      "source_ids": [
        "source:python-tutorial"
      ],
      "misconception_ids": [
        "misconception:procedures-and-state"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Step through a small Python trace one expression at a time. Predict the next state before revealing it, then change the input list and identify which instructions remain invariant."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A program state maps names and locations to values. Assignment updates the state; expressions evaluate within it. Control flow selects the next instruction. A function defines a parameterized state transition and may return a value without exposing its local names."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Imagine a workbench with labeled cards. An assignment changes which value a label refers to. A function creates a temporary bench with inputs, performs a transformation, and returns a result. A loop repeats a controlled change until its rule says stop."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Programming begins when an intention becomes a sequence another machine can execute without guessing. Tracing state makes that sequence inspectable and turns debugging into explanation rather than trial and error."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "When code surprises you, slow time down. Write the state before and after the smallest instruction that changes it."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Write and trace a function that converts a sequence of temperatures from Celsius to Fahrenheit without mutating the input list."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Trace total=0 followed by a loop over [2,4,6] that adds each value. The states are 0→2→6→12. The crucial step is recording the old total and current item before applying the assignment."
        }
      },
      "retrieval": [
        {
          "prompt": "What information must a state trace record to explain an assignment?",
          "answer": "It must record the relevant values before evaluation, the expression result, and the updated binding or location afterward.",
          "misconception_id": "misconception:procedures-and-state"
        }
      ],
      "transfer": "Write and trace a function that converts a sequence of temperatures from Celsius to Fahrenheit without mutating the input list.",
      "reflection": "When code surprises you, slow time down. Write the state before and after the smallest instruction that changes it.",
      "simulation_slug": "python-trace",
      "reviewed_by": []
    },
    {
      "id": "lesson:data-and-invariants",
      "slug": "data-and-invariants",
      "concept_id": "concept:data-and-invariants",
      "title": "Data and invariants",
      "deck": "Choose representations by the promises your program must preserve.",
      "minutes": 47,
      "objective_ids": [
        "objective:data-and-invariants"
      ],
      "prerequisite_ids": [
        "concept:procedures-and-state"
      ],
      "source_ids": [
        "source:open-data-structures"
      ],
      "misconception_ids": [
        "misconception:data-and-invariants"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Compare list, stack, queue, and set traces for the same arriving items. Attempt an invalid update and identify which interface makes the mistake unrepresentable."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "An abstract data type specifies values and operations independently of implementation. A representation invariant is a predicate that must hold for every valid internal state. Encapsulation protects the invariant by restricting updates to checked operations."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Think of a data structure as a workshop jig: it holds material in a shape that makes the next cut reliable. An invariant is the condition the jig promises to preserve, such as sorted order or unique keys."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "A program does not manipulate the world directly. It manipulates representations. Good representations make valid operations easy, invalid states difficult, and important assumptions visible."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Before choosing a structure, write the operations, expected scale, ordering needs, and invalid states you must prevent."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Design a representation for a browser history and explain which operations and invariants guided the choice."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "A set promises uniqueness. A list does not. If membership tests dominate, a hash set expresses the invariant and offers expected constant-time lookup, while a list requires a scan. The choice follows the operation and promise, not habit."
        }
      },
      "retrieval": [
        {
          "prompt": "What is a representation invariant?",
          "answer": "It is a condition that must remain true for every valid internal representation of an abstract value.",
          "misconception_id": "misconception:data-and-invariants"
        }
      ],
      "transfer": "Design a representation for a browser history and explain which operations and invariants guided the choice.",
      "reflection": "Before choosing a structure, write the operations, expected scale, ordering needs, and invalid states you must prevent.",
      "simulation_slug": "structure-bench",
      "reviewed_by": []
    },
    {
      "id": "lesson:algorithms-and-cost",
      "slug": "algorithms-and-cost",
      "concept_id": "concept:algorithms-and-cost",
      "title": "Algorithms and cost",
      "deck": "Compare procedures by how their required work grows, not by one stopwatch reading.",
      "minutes": 55,
      "objective_ids": [
        "objective:algorithms-and-cost"
      ],
      "prerequisite_ids": [
        "concept:data-and-invariants"
      ],
      "source_ids": [
        "source:open-data-structures"
      ],
      "misconception_ids": [
        "misconception:algorithms-and-cost"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Trace linear and binary search over increasingly large collections. Count comparisons rather than milliseconds, then plot how those counts change when input size doubles."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "T(n) is O(g(n)) when constants c and n₀ exist such that T(n)≤c·g(n) for n≥n₀. The notation provides an asymptotic upper bound. Space complexity tracks additional storage with the same discipline."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Imagine increasing the input dial. A constant-time operation barely moves its work meter; a linear scan tracks the dial; a quadratic pairwise comparison rises much faster. Growth class describes the shape of that response."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Two programs can return the same answer while behaving very differently as inputs grow. Algorithm analysis isolates the structure of that growth before hardware and implementation details enter the picture."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "State the input size, dominant operation, invariant, and worst relevant case. Complexity claims without those choices are incomplete."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Compare two ways to detect duplicate identifiers and explain the time-space tradeoff rather than naming only the fastest option."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Binary search halves a sorted search interval each step. After k steps, n/2ᵏ≤1, so k grows like log₂n. The speed comes from the sorted invariant and the decision that discards half the candidates."
        }
      },
      "retrieval": [
        {
          "prompt": "Why can binary search not be applied directly to an unsorted list?",
          "answer": "Its correctness depends on order: a comparison can discard half the list only when values on each side obey the sorted invariant.",
          "misconception_id": "misconception:algorithms-and-cost"
        }
      ],
      "transfer": "Compare two ways to detect duplicate identifiers and explain the time-space tradeoff rather than naming only the fastest option.",
      "reflection": "State the input size, dominant operation, invariant, and worst relevant case. Complexity claims without those choices are incomplete.",
      "simulation_slug": "complexity-trace",
      "reviewed_by": []
    },
    {
      "id": "lesson:ownership-and-systems",
      "slug": "ownership-and-systems",
      "concept_id": "concept:ownership-and-systems",
      "title": "Ownership and systems",
      "deck": "Use Rust ownership to make resource lifetime and aliasing part of the program's structure.",
      "minutes": 61,
      "objective_ids": [
        "objective:ownership-and-systems"
      ],
      "prerequisite_ids": [
        "concept:algorithms-and-cost"
      ],
      "source_ids": [
        "source:rust-book"
      ],
      "misconception_ids": [
        "misconception:ownership-and-systems"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Trace ownership through a sequence of moves and borrows. Mark the exact last use of each reference, then test whether a proposed mutation overlaps an active immutable borrow."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "Each Rust value has one owner; dropping the owner ends the value's lifetime unless ownership moved. References borrow without taking ownership. At a given point, the program permits either any number of immutable references or one mutable reference, subject to lifetime analysis."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Treat a resource as a laboratory instrument with a checkout record. Ownership identifies the responsible holder. An immutable borrow permits observers. A mutable borrow grants one temporary operator exclusive access. The rules protect the instrument's valid state."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Systems programs coordinate memory, files, threads, and devices. Bugs occur when a resource is used after release or changed through incompatible aliases. Rust asks the type system to reject many of those histories before execution."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Read ownership errors as failed proofs about lifetime or aliasing. Name the conflicting promises before changing the code."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Sketch an API for updating a shared configuration while ensuring readers never observe a partially updated value."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Assigning one String to another variable moves ownership because String manages heap memory. Copying both owners would risk double release. Borrowing &value lets a function inspect the String and return while the original owner remains responsible."
        }
      },
      "retrieval": [
        {
          "prompt": "Why are one mutable reference and an immutable reference disallowed at the same time?",
          "answer": "The immutable observer is promised stable data; a simultaneous mutation could violate that promise and create a data race.",
          "misconception_id": "misconception:ownership-and-systems"
        }
      ],
      "transfer": "Sketch an API for updating a shared configuration while ensuring readers never observe a partially updated value.",
      "reflection": "Read ownership errors as failed proofs about lifetime or aliasing. Name the conflicting promises before changing the code.",
      "simulation_slug": "ownership-trace",
      "reviewed_by": []
    },
    {
      "id": "lesson:learning-systems-and-evaluation",
      "slug": "learning-systems-and-evaluation",
      "concept_id": "concept:learning-systems-and-evaluation",
      "title": "Learning systems and evaluation",
      "deck": "Treat a trained model as one component in an evidence-producing system.",
      "minutes": 64,
      "objective_ids": [
        "objective:learning-systems-and-evaluation"
      ],
      "prerequisite_ids": [
        "concept:ownership-and-systems"
      ],
      "source_ids": [
        "source:google-ml"
      ],
      "misconception_ids": [
        "misconception:learning-systems-and-evaluation"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Move a classification threshold and watch false positives and false negatives trade places. Then change class prevalence and observe why precision changes even when sensitivity and specificity stay fixed."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A learning algorithm selects parameters using training data. Hyperparameters and decisions use validation evidence. A held-out test estimates performance for a specified sampling process. Subgroup, shift, calibration, and error-cost analyses test assumptions hidden by one average metric."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Training is rehearsal, validation is direction, and testing is opening night. Reusing the audience's reactions to rewrite the play turns the test into more rehearsal. Separate data roles preserve the meaning of the final evidence."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Machine learning replaces hand-written rules with behavior fitted from examples. That flexibility makes evaluation central: a model can fit its training distribution while failing where deployment conditions differ."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "A score answers only the question encoded by its data, metric, and decision threshold. Write that question beside every result."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Write an evaluation plan for a model used across common, code-heavy, and dialogue-heavy environments, including one worst-environment measure."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "For a rare failure class, 99 percent accuracy can come from always predicting the common class. Build a confusion matrix, inspect recall and precision, and choose a threshold based on the real cost of misses and false alarms."
        }
      },
      "retrieval": [
        {
          "prompt": "Why should the test set not guide model selection?",
          "answer": "Using it to choose the model adapts decisions to that sample, so its score no longer estimates performance on untouched data.",
          "misconception_id": "misconception:learning-systems-and-evaluation"
        }
      ],
      "transfer": "Write an evaluation plan for a model used across common, code-heavy, and dialogue-heavy environments, including one worst-environment measure.",
      "reflection": "A score answers only the question encoded by its data, metric, and decision threshold. Write that question beside every result.",
      "simulation_slug": "threshold-bench",
      "reviewed_by": []
    },
    {
      "id": "lesson:measurement-and-uncertainty",
      "slug": "measurement-and-uncertainty",
      "concept_id": "concept:measurement-and-uncertainty",
      "title": "Measurement and uncertainty",
      "deck": "Build physical claims from operational measurements and honest uncertainty.",
      "minutes": 43,
      "objective_ids": [
        "objective:measurement-and-uncertainty"
      ],
      "prerequisite_ids": [],
      "source_ids": [
        "source:openstax-physics"
      ],
      "misconception_ids": [
        "misconception:measurement-and-uncertainty"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Measure a repeated interval with a simulated instrument. Separate resolution, random scatter, and a hidden zero offset, then explain which uncertainty each diagnostic can reveal."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "Write x=x̂±u with a stated unit and uncertainty convention. Independent random uncertainties often combine in quadrature, while systematic effects require explicit correction or bounds. Significant figures should reflect, not invent, resolution."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "A measurement is an interval of plausible values attached to a method. Repeating the method reveals scatter; checking against a reference reveals bias. Precision narrows the cluster, while accuracy places it near the target."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Physics begins not with formulas but with procedures that let different observers compare the same phenomenon. Every measurement is limited by resolution, calibration, environmental variation, and modeling choices."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "A physical number without a method, unit, and uncertainty is an incomplete claim."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Design a procedure for comparing two pendulum periods and identify one random and one systematic source of uncertainty."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Five timing trials scatter around 2.4 s. The mean estimates the center; the spread describes repeatability. If the timer starts 0.1 s late every trial, repetition will not expose that systematic offset—a separate calibration check is needed."
        }
      },
      "retrieval": [
        {
          "prompt": "Why can repeated measurements fail to reveal a systematic error?",
          "answer": "A shared bias can shift every trial in the same direction, producing a tight but inaccurate cluster.",
          "misconception_id": "misconception:measurement-and-uncertainty"
        }
      ],
      "transfer": "Design a procedure for comparing two pendulum periods and identify one random and one systematic source of uncertainty.",
      "reflection": "A physical number without a method, unit, and uncertainty is an incomplete claim.",
      "simulation_slug": "measurement-bench",
      "reviewed_by": []
    },
    {
      "id": "lesson:motion-and-interaction",
      "slug": "motion-and-interaction",
      "concept_id": "concept:motion-and-interaction",
      "title": "Motion and interaction",
      "deck": "Describe motion first, then explain changes in motion through interactions.",
      "minutes": 56,
      "objective_ids": [
        "objective:motion-and-interaction"
      ],
      "prerequisite_ids": [
        "concept:measurement-and-uncertainty"
      ],
      "source_ids": [
        "source:openstax-physics"
      ],
      "misconception_ids": [
        "misconception:motion-and-interaction"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Adjust force and mass for a cart. Predict the acceleration vector before running each case, then compare position, velocity, and acceleration graphs over time."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "Velocity is the time derivative of position and acceleration the derivative of velocity. Newton's second law states that net external force equals the time rate of change of momentum; for constant mass, F_net=ma."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Position is the frame on a film strip, velocity is how the frame-to-frame displacement changes, and acceleration is how that velocity itself changes. Net force points with acceleration, not necessarily with motion."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Kinematics describes how motion changes; dynamics asks why. Keeping those questions separate prevents a common confusion between velocity, acceleration, and force."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Draw separate arrows for velocity, acceleration, and each interaction. Do not let one arrow silently stand for all three."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Analyze the first second after a ball is thrown upward: state the directions of velocity, acceleration, and net force before and after the highest point."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "A puck sliding right at constant speed has rightward velocity but zero acceleration, so the net force is zero. If friction slows it, acceleration and net force point left even while the puck still moves right."
        }
      },
      "retrieval": [
        {
          "prompt": "Can velocity point right while acceleration points left?",
          "answer": "Yes. The object then moves right while its rightward velocity decreases.",
          "misconception_id": "misconception:motion-and-interaction"
        }
      ],
      "transfer": "Analyze the first second after a ball is thrown upward: state the directions of velocity, acceleration, and net force before and after the highest point.",
      "reflection": "Draw separate arrows for velocity, acceleration, and each interaction. Do not let one arrow silently stand for all three.",
      "simulation_slug": "motion-tape",
      "reviewed_by": []
    },
    {
      "id": "lesson:energy-and-conservation",
      "slug": "energy-and-conservation",
      "concept_id": "concept:energy-and-conservation",
      "title": "Energy and conservation",
      "deck": "Track change with a ledger that remains stable across different mechanisms.",
      "minutes": 54,
      "objective_ids": [
        "objective:energy-and-conservation"
      ],
      "prerequisite_ids": [
        "concept:motion-and-interaction"
      ],
      "source_ids": [
        "source:openstax-physics"
      ],
      "misconception_ids": [
        "misconception:energy-and-conservation"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Move a system boundary around a block and ramp. Watch which terms count as internal storage and which appear as transfers across the boundary."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "For a defined system, ΔE_system equals net energy transferred in. Kinetic energy is ½mv²; near Earth's surface gravitational potential differences are mgΔh. Mechanical energy is conserved only when transfers to thermal or other stores are negligible or included."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Choose a boundary around the system and keep a ledger. Energy can move between storage accounts inside or cross the boundary by work, heating, or radiation. A missing amount signals an omitted account or transfer—not vanished energy."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Forces explain local changes; conservation laws reveal what remains accountable across an entire process. Energy is powerful because one ledger can connect motion, height, deformation, heat, and radiation."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "When conservation seems broken, inspect the boundary, neglected stores, and transfer channels before questioning the law."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Construct an energy ledger for a battery-powered fan slowing after power is disconnected, including where energy ultimately goes."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "A descending block loses gravitational potential energy. With negligible friction, kinetic energy rises by the same amount. With friction, some energy enters thermal stores; writing only K+U would make the ledger appear to leak."
        }
      },
      "retrieval": [
        {
          "prompt": "Why must an energy argument state the system boundary?",
          "answer": "The boundary determines which energy changes are internal storage and which are transfers into or out of the system.",
          "misconception_id": "misconception:energy-and-conservation"
        }
      ],
      "transfer": "Construct an energy ledger for a battery-powered fan slowing after power is disconnected, including where energy ultimately goes.",
      "reflection": "When conservation seems broken, inspect the boundary, neglected stores, and transfer channels before questioning the law.",
      "simulation_slug": "energy-ledger",
      "reviewed_by": []
    },
    {
      "id": "lesson:waves-and-information",
      "slug": "waves-and-information",
      "concept_id": "concept:waves-and-information",
      "title": "Waves and information",
      "deck": "Understand waves as propagating patterns that carry energy and information.",
      "minutes": 57,
      "objective_ids": [
        "objective:waves-and-information"
      ],
      "prerequisite_ids": [
        "concept:energy-and-conservation"
      ],
      "source_ids": [
        "source:openstax-physics"
      ],
      "misconception_ids": [
        "misconception:waves-and-information"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Combine two sinusoidal waves. Adjust frequency and phase, then identify beats, standing patterns, and points of destructive interference from the actual summed displacement."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "For a periodic wave, v=fλ. Phase specifies position within a cycle. In a linear medium, superposition adds simultaneous displacements, producing constructive or destructive interference without permanently consuming either wave."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "A stadium wave travels around an arena although each person only moves locally. The pattern has a speed distinct from the motion of its participants. When patterns overlap, their displacements add before continuing onward."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "Sound, light, water ripples, and signals look different, yet share a mathematical structure: local oscillation produces a pattern that propagates through space or a field."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "Track the oscillating quantity, the propagation medium or field, and the distinction between particle motion and pattern motion."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Explain how noise-cancelling headphones can reduce a periodic sound without claiming that either sound wave ceases to exist everywhere."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "A 440 Hz sound travels at 343 m/s, so λ=v/f≈0.78 m. Doubling frequency in the same medium halves wavelength because the propagation speed is set primarily by the medium."
        }
      },
      "retrieval": [
        {
          "prompt": "What changes when wave frequency doubles but speed stays fixed?",
          "answer": "The wavelength halves so that the product of frequency and wavelength remains the same speed.",
          "misconception_id": "misconception:waves-and-information"
        }
      ],
      "transfer": "Explain how noise-cancelling headphones can reduce a periodic sound without claiming that either sound wave ceases to exist everywhere.",
      "reflection": "Track the oscillating quantity, the propagation medium or field, and the distinction between particle motion and pattern motion.",
      "simulation_slug": "wave-table",
      "reviewed_by": []
    },
    {
      "id": "lesson:fields-models-and-limits",
      "slug": "fields-models-and-limits",
      "concept_id": "concept:fields-models-and-limits",
      "title": "Fields, models, and limits",
      "deck": "Use fields to describe local influence and treat every physical model as a scoped approximation.",
      "minutes": 63,
      "objective_ids": [
        "objective:fields-models-and-limits"
      ],
      "prerequisite_ids": [
        "concept:waves-and-information"
      ],
      "source_ids": [
        "source:openstax-physics"
      ],
      "misconception_ids": [
        "misconception:fields-models-and-limits"
      ],
      "sections": {
        "experiment": {
          "heading": "Change one thing and watch the model answer",
          "body": "Place positive and negative sources on a plane and sample the resulting vector field. Compare individual contributions with their vector sum and inspect where cancellation occurs."
        },
        "formalize": {
          "heading": "Give the intuition a precise edge",
          "body": "A scalar field assigns a number to each point; a vector field assigns a vector. The electric field E is defined by force per unit positive test charge in the small-probe limit. Model validity depends on scale, speed, interaction strength, and tolerated error."
        },
        "intuition": {
          "heading": "Build a picture you can reason with",
          "body": "Imagine a weather atlas assigning wind arrows to every coordinate. A probe placed at one point reads the local arrow. Field lines summarize direction and density, but they are cartographic aids—not physical threads in space."
        },
        "orient": {
          "heading": "Why this idea had to exist",
          "body": "A field replaces action-at-a-distance language with local structure: each location has a value that says what a suitable probe would experience. Modern physics extends this idea while reminding us that models have domains, approximations, and evidence limits."
        },
        "reflect": {
          "heading": "Leave with a diagnostic habit",
          "body": "A model earns trust by making scoped, testable predictions. Naming its limits strengthens rather than weakens the explanation."
        },
        "retrieve": {
          "heading": "Close the page and reconstruct it",
          "body": "Answer before opening the explanation. Retrieval is evidence only when the answer is produced without a hint."
        },
        "transfer": {
          "heading": "Move the idea into a new setting",
          "body": "Choose one familiar model—ideal gas, point mass, or classical particle—and write a validity note naming a regime where it should be replaced."
        },
        "work_through": {
          "heading": "Follow the decisions, not just the symbols",
          "body": "Around a positive point charge, field vectors point radially outward and weaken with inverse square distance. Doubling distance reduces magnitude to one quarter. The pattern encodes a quantitative relation, not merely a drawing convention."
        }
      },
      "retrieval": [
        {
          "prompt": "Are field lines physical objects?",
          "answer": "No. They are a visualization of a continuously defined field; direction follows the tangent and density suggests magnitude.",
          "misconception_id": "misconception:fields-models-and-limits"
        }
      ],
      "transfer": "Choose one familiar model—ideal gas, point mass, or classical particle—and write a validity note naming a regime where it should be replaced.",
      "reflection": "A model earns trust by making scoped, testable predictions. Naming its limits strengthens rather than weakens the explanation.",
      "simulation_slug": "field-sampler",
      "reviewed_by": []
    }
  ],
  "sources": [
    {
      "id": "source:atlas-method",
      "title": "Ephemerent Atlas curriculum method",
      "publisher": "Ephemerent Education",
      "url": "https://atlas.ephemerent.com/policies/ai-use",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:openstax-prealgebra",
      "title": "Prealgebra 2e",
      "publisher": "OpenStax",
      "url": "https://openstax.org/details/books/prealgebra-2e",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:openstax-algebra",
      "title": "Algebra and Trigonometry 2e",
      "publisher": "OpenStax",
      "url": "https://openstax.org/details/books/algebra-and-trigonometry-2e",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:openstax-calculus",
      "title": "Calculus, Volume 1",
      "publisher": "OpenStax",
      "url": "https://openstax.org/details/books/calculus-volume-1",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:openstax-statistics",
      "title": "Introductory Statistics 2e",
      "publisher": "OpenStax",
      "url": "https://openstax.org/details/books/introductory-statistics-2e",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:python-tutorial",
      "title": "The Python Tutorial",
      "publisher": "Python Software Foundation",
      "url": "https://docs.python.org/3/tutorial/",
      "license": "PSF License Version 2",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:open-data-structures",
      "title": "Open Data Structures",
      "publisher": "Pat Morin",
      "url": "https://opendatastructures.org/",
      "license": "CC BY 2.5 CA",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:rust-book",
      "title": "The Rust Programming Language",
      "publisher": "The Rust Project Developers",
      "url": "https://doc.rust-lang.org/book/",
      "license": "MIT OR Apache-2.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:google-ml",
      "title": "Machine Learning Crash Course",
      "publisher": "Google for Developers",
      "url": "https://developers.google.com/machine-learning/crash-course",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    },
    {
      "id": "source:openstax-physics",
      "title": "University Physics",
      "publisher": "OpenStax",
      "url": "https://openstax.org/details/books/university-physics-volume-1",
      "license": "CC BY 4.0",
      "accessed_at": "2026-08-12"
    }
  ]
}
