{
  "format": "subfork.graph/1",
  "thumbnail": "data:image/jpeg;base64,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vu/umBH7zvu/uoICBFrRFf23fd/deh7Q0XZanwjBZcFxSsqq+WAuxGKWHK2CS4sGnS/Hidgb62XmgU7qLWWuSqUG2nnomRF77vu/uoWj9933f3SSUkWIlaP3nfd/dFme877v7qKExkrM9533f3RZnvO+7+6ihAErM953w/dFme877v7qKEATAj9533f3Wxh9LgMmA4lNWV9TFikZZ9DgZHdkov4sx4fEeqxE7qyuai+sgiZEevid9391GzPed9390klBgSsz3nfd/dFme877v7qKEgJWZ7zvh+6LM953w/dRQgCVme877v7pgR+877v7qCAgCwBnvO+7+62cJpcBmwrFJMRr6mCtjjaaKKOK7Zn31Djw4cvXZYYUrq2uai84yCJODPed9391GzPed9390klBiRK0fvO+7+6LM9533f3UUJDJWZ7zvu/uizPed9391FCQiVme877v7osz3nfd/dRQgCwCP3nfd/dbXZKmwCqx+jh7Q11TR4W557+eGPM5gsbW342F7FYYTBslJZWCE47otZwdmJxUEWIVMdDPLNSNleIZHx5XPYCcpIvoSLLjIj9533f3QTdRQlgcVhYHZnvO+7+6LR+877v7qKEyZK0fvO+7+6Vme877v7pIQBKzPed9390WZ7zvu/uooTAmAz3nfD91t9mKXs/VVFS3Hq+qo4W073ROhizF0v1WnfT+XCwQpAkK2qag84yCZNwj953w/dQsz3nfd/dBKioSeQHZnvO+7+6AI/ed9390klACQDPed9391ICP33fd/dVhMIEd+FxUEuIU0dfUTQ0jpWCeSOPM5kdxmIF9SBddfaqnwOlx6tiwCtqKzC2yWp55o8r3tsNxpxuNh5LHabIJuoY5yVbHv3Z/ICGe877v7pWZ7zvh+6SSmWjIF9CT5iySAhAxJpISGNCSaABCEIQg4IQhABdCEJgCEIQAIQhAAhCEACEIQAIQhAAhCEACAhCABNJCAGmkEwUxAiyEIASE0IGJNCEAJNCECGEJBMJACSaSYISEIQMEIQgAQhCAAJpBNAgSQhAwSTSSAEwkmEAMIKAhAhJJpIGCEIQAk0kJDBNJCAGhJNAAhCSAGhCExAhCEACEIQAIQhAAhCEACEIQAIQhAAhCEACaSEANNRCaYDQkhADQhAQABCEIAEICECAJhJNAAkhJADQhCAEhCaBiQhCABNIIQIEIQgYJJpJANASTQABCAhAhIQhAwQhCAP/Z",
  "definition": {
    "version": "0.1.0",
    "name": "Activity Topography",
    "description": "A public GitHub repository rendered as weekly SVG mountain ridges. Daily sampled commit counts, contributor filtering, palettes, relief and commit inspection. Bounded first page, not productivity or complete history.",
    "nodes": [
      {
        "node_instance_id": "repository",
        "node_id": "n_static_value",
        "node_version": "1.0.0",
        "title": "Repository / owner and name",
        "params": {
          "value": {
            "owner": "psf",
            "repo": "requests"
          }
        }
      },
      {
        "node_instance_id": "url",
        "node_id": "n_url_builder",
        "node_version": "1.0.0",
        "title": "GitHub commit page",
        "params": {
          "segments": [],
          "query": {
            "per_page": 100,
            "page": 1
          }
        }
      },
      {
        "node_instance_id": "fetch",
        "node_id": "n_fetch_url",
        "node_version": "1.0.0",
        "title": "Read public default-branch commits",
        "params": {
          "method": "GET",
          "headers": {
            "Accept": "application/vnd.github+json",
            "User-Agent": "Subfork-Activity-Topography"
          },
          "timeout_seconds": 30,
          "max_response_bytes": 2000000
        },
        "exposed_inputs": [
          "url"
        ],
        "inputs_visibility_configured": true,
        "exposed_outputs": [
          "body",
          "status",
          "headers"
        ],
        "outputs_visibility_configured": true
      },
      {
        "node_instance_id": "parse",
        "node_id": "n_json_parse",
        "node_version": "1.0.0",
        "title": "Parse GitHub response",
        "params": {}
      },
      {
        "node_instance_id": "project",
        "node_id": "n_map_fields",
        "node_version": "1.0.0",
        "title": "Commit facts / no emails or avatars",
        "params": {
          "mapping": {
            "sha": "sha",
            "date": "commit.committer.date",
            "login": "author.login",
            "message": "commit.message",
            "url": "html_url"
          }
        }
      },
      {
        "node_instance_id": "dataset",
        "node_id": "n_json_template",
        "node_version": "1.0.0",
        "title": "Bounded commit snapshot",
        "params": {
          "template": {
            "schema_version": "activity-topography/1",
            "repository": "{{ inputs.repository.owner }}/{{ inputs.repository.repo }}",
            "source_url": "{{ inputs.url }}",
            "status": "{{ inputs.status }}",
            "headers": "{{ inputs.headers }}",
            "commits": "{{ inputs.commits }}"
          }
        },
        "custom_inputs": {
          "repository": "json",
          "url": "url",
          "status": "int",
          "headers": "json",
          "commits": "json"
        },
        "exposed_inputs": [
          "repository",
          "url",
          "status",
          "headers",
          "commits"
        ],
        "inputs_visibility_configured": true
      },
      {
        "node_instance_id": "encode",
        "node_id": "n_json_stringify",
        "node_version": "1.0.0",
        "title": "HTML-safe commit data",
        "params": {
          "html_safe": true
        }
      },
      {
        "node_instance_id": "view",
        "node_id": "n_html_template",
        "node_version": "1.0.0",
        "title": "Activity Topography / weekly ridges",
        "params": {
          "template": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>Activity Topography</title>\n    <style>\n      :root {\n        color-scheme: dark;\n        --bg: #111724;\n        --panel: #192130;\n        --ink: #f3e8d8;\n        --muted: #b4b9c0;\n        --line: #394457;\n        --accent: #f0ac7f;\n      }\n      * {\n        box-sizing: border-box;\n      }\n      body {\n        margin: 0;\n        background:\n          radial-gradient(ellipse at 15% 20%, #28394a, transparent 65%),\n          var(--bg);\n        color: var(--ink);\n        font:\n          16px Georgia,\n          serif;\n      }\n      main {\n        max-width: 1600px;\n        margin: auto;\n        padding: 36px;\n      }\n      header {\n        display: flex;\n        justify-content: space-between;\n        align-items: end;\n        gap: 30px;\n        padding-bottom: 28px;\n      }\n      .eyebrow,\n      label,\n      button,\n      select,\n      input,\n      .meta,\n      .legend,\n      footer,\n      .stat,\n      #status,\n      #coverage,\n      #error {\n        font:\n          12px/1.6 \"Courier New\",\n          monospace;\n      }\n      .eyebrow {\n        color: var(--accent);\n        letter-spacing: 0.2em;\n        text-transform: uppercase;\n      }\n      h1 {\n        font-size: clamp(40px, 6vw, 82px);\n        font-weight: normal;\n        letter-spacing: -0.045em;\n        line-height: 0.95;\n        margin: 22px 0;\n      }\n      h1 em {\n        color: var(--accent);\n        font-weight: normal;\n      }\n      h2 {\n        font-size: 28px;\n        font-weight: normal;\n        margin: 0 0 15px;\n      }\n      p {\n        line-height: 1.55;\n      }\n      .subtitle {\n        color: var(--muted);\n        margin-bottom: 0;\n      }\n      .source {\n        max-width: 340px;\n        text-align: right;\n        overflow-wrap: anywhere;\n      }\n      .source strong {\n        display: block;\n        color: var(--accent);\n        font-size: 18px;\n      }\n      .meta {\n        color: var(--muted);\n      }\n      .controls {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: end;\n        gap: 22px;\n        border-block: 1px solid var(--line);\n        padding: 17px 0;\n      }\n      label {\n        display: grid;\n        gap: 6px;\n        color: var(--muted);\n      }\n      select,\n      button,\n      input {\n        color: var(--ink);\n        background: var(--panel);\n        border: 1px solid var(--line);\n        border-radius: 3px;\n        padding: 7px 10px;\n        max-width: 100%;\n      }\n      select {\n        min-width: 120px;\n      }\n      #author {\n        max-width: 240px;\n      }\n      input[type=\"range\"] {\n        width: 155px;\n        padding: 8px 0;\n        accent-color: var(--accent);\n      }\n      button {\n        cursor: pointer;\n      }\n      button:hover,\n      button[aria-pressed=\"true\"] {\n        border-color: var(--accent);\n        background: #314052;\n      }\n      :focus-visible {\n        outline: 2px solid var(--accent);\n        outline-offset: 3px;\n      }\n      .totals {\n        margin-left: auto;\n        display: flex;\n        gap: 28px;\n      }\n      .stat strong {\n        display: block;\n        font-size: 28px;\n        color: var(--accent);\n        line-height: 1.2;\n        font-weight: normal;\n      }\n      #coverage {\n        color: var(--muted);\n        max-width: 1100px;\n      }\n      .layout {\n        display: grid;\n        grid-template-columns: minmax(0, 2.2fr) minmax(260px, 1fr);\n        gap: 35px;\n        margin-top: 20px;\n      }\n      figure {\n        margin: 0;\n        min-width: 0;\n      }\n      svg {\n        display: block;\n        width: 100%;\n        height: auto;\n        overflow: visible;\n      }\n      svg text {\n        fill: var(--muted);\n        font:\n          10px \"Courier New\",\n          monospace;\n      }\n      svg .peak {\n        cursor: pointer;\n        stroke: var(--bg);\n        stroke-width: 1.5;\n      }\n      svg .peak:hover,\n      svg .peak:focus {\n        stroke: var(--ink);\n        stroke-width: 3;\n        outline: none;\n      }\n      .legend {\n        color: var(--muted);\n        border-top: 1px solid var(--line);\n        padding-top: 15px;\n      }\n      aside {\n        border-left: 1px solid var(--line);\n        padding-left: 24px;\n        min-width: 0;\n      }\n      .day-picker {\n        margin-bottom: 18px;\n      }\n      #day {\n        width: 100%;\n      }\n      #commits {\n        display: grid;\n        gap: 9px;\n        max-height: 350px;\n        overflow: auto;\n        padding: 3px;\n        margin: 16px 0;\n      }\n      #commits button {\n        text-align: left;\n        padding: 10px;\n        overflow-wrap: anywhere;\n      }\n      #commits button span {\n        display: block;\n        color: var(--muted);\n        font-size: 10px;\n        margin-top: 5px;\n      }\n      #detail {\n        background: var(--panel);\n        border-left: 2px solid var(--accent);\n        padding: 15px;\n        overflow-wrap: anywhere;\n      }\n      #detail p {\n        margin: 0 0 10px;\n      }\n      #detail input {\n        width: 100%;\n        font-size: 11px;\n      }\n      #error {\n        padding: 18px;\n        border: 1px solid #e5a080;\n        color: #ffd1b5;\n      }\n      #status {\n        color: var(--accent);\n      }\n      footer {\n        border-top: 1px solid var(--line);\n        margin-top: 35px;\n        padding-top: 18px;\n        color: var(--muted);\n      }\n      @media (max-width: 850px) {\n        main {\n          padding: 20px;\n        }\n        header {\n          display: block;\n        }\n        .source {\n          text-align: left;\n          margin-top: 20px;\n        }\n        .layout {\n          grid-template-columns: 1fr;\n        }\n        aside {\n          border-left: 0;\n          border-top: 1px solid var(--line);\n          padding: 24px 0 0;\n        }\n        .totals {\n          margin-left: 0;\n        }\n      }\n    </style>\n  </head>\n  <body>\n    <main>\n      <header>\n        <div>\n          <div class=\"eyebrow\">Subfork / field studies in open source / 06</div>\n          <h1>Activity<br /><em>Topography.</em></h1>\n          <p class=\"subtitle\">\n            A repository, seen as a landscape of recorded work.\n          </p>\n        </div>\n        <div class=\"source\">\n          <strong id=\"repository\"></strong>\n          <div class=\"meta\">GitHub / default-branch history sample</div>\n          <div id=\"snapshot\" class=\"meta\"></div>\n        </div>\n      </header>\n      <p id=\"error\" role=\"alert\" hidden></p>\n      <section class=\"controls\" aria-label=\"Landscape controls\">\n        <label\n          >Window<select id=\"weeks\">\n            <option value=\"12\">12 weeks</option>\n            <option value=\"24\" selected>24 weeks</option>\n            <option value=\"52\">52 weeks</option>\n          </select></label\n        >\n        <label\n          >Contributor<select id=\"author\">\n            <option value=\"all\">All contributors</option>\n          </select></label\n        >\n        <label\n          >Palette<select id=\"palette\">\n            <option value=\"copper\">Copper dusk</option>\n            <option value=\"glacier\">Glacier</option>\n            <option value=\"lichen\">Lichen</option>\n          </select></label\n        >\n        <label\n          >Relief<input\n            id=\"relief\"\n            type=\"range\"\n            min=\"0.4\"\n            max=\"1.8\"\n            step=\"0.1\"\n            value=\"1\"\n        /></label>\n        <div class=\"totals\">\n          <div class=\"stat\"><strong id=\"count\">0</strong>COMMITS IN VIEW</div>\n          <div class=\"stat\"><strong id=\"peak\">0</strong>PEAK / DAY</div>\n        </div>\n      </section>\n      <p id=\"coverage\"></p>\n      <div class=\"layout\">\n        <figure>\n          <svg\n            id=\"landscape\"\n            viewBox=\"0 0 960 650\"\n            role=\"group\"\n            aria-label=\"Weekly ridges of daily commit counts\"\n          >\n            <title>Activity Topography</title>\n            <desc>\n              Each ridge is a UTC week, Monday to Sunday. Select a peak to\n              inspect commits. An equivalent day selector follows the chart.\n            </desc>\n            <g id=\"ridges\"></g>\n            <g id=\"markers\"></g>\n            <g id=\"labels\"></g>\n          </svg>\n          <figcaption class=\"legend\">\n            Each ridge is one week. Each peak is one UTC day's commit count in\n            the fetched sample. Oldest week at the back; newest at the front.\n            Lines between days are decorative interpolation, not additional\n            measurements.\n          </figcaption>\n          <p id=\"status\" role=\"status\"></p>\n        </figure>\n        <aside>\n          <div class=\"eyebrow\">Field notes</div>\n          <h2 id=\"day-title\">Select a summit.</h2>\n          <label class=\"day-picker\"\n            >Inspect an active day<select\n              id=\"day\"\n              aria-label=\"Inspect an active day\"\n            ></select\n          ></label>\n          <div id=\"commits\" aria-label=\"Commits on selected day\"></div>\n          <div id=\"detail\">\n            <p>Select a commit to read its subject and copy its URL.</p>\n          </div>\n        </aside>\n      </div>\n      <footer>\n        Read-only snapshot. Rerun the graph to refresh. Counts are not lines\n        changed, effort, quality, or productivity. Merge commits and automated\n        contributions are included. No emails, avatars, external scripts, or\n        fonts are embedded in this page.\n      </footer>\n    </main>\n    <script id=\"dataset\" type=\"application/json\">\n      {{ inputs.dataset_json }}\n    </script>\n    <script>\n      (() => {\n        \"use strict\";\n        const $ = (id) => document.getElementById(id);\n        const DAY = 86400000;\n        const NS = \"http://www.w3.org/2000/svg\";\n        const palettes = {\n          copper: {\n            low: [42, 57, 72],\n            high: [208, 135, 101],\n            accent: \"#f0ac7f\",\n          },\n          glacier: {\n            low: [30, 49, 75],\n            high: [119, 182, 196],\n            accent: \"#9ce1e8\",\n          },\n          lichen: {\n            low: [39, 55, 58],\n            high: [151, 173, 112],\n            accent: \"#d3dea0\",\n          },\n        };\n        const iso = (time) => new Date(time).toISOString().slice(0, 10);\n        const midnight = (time) => Math.floor(time / DAY) * DAY;\n        const monday = (time) =>\n          midnight(time) - ((new Date(time).getUTCDay() + 6) % 7) * DAY;\n        function svg(tag, attrs, text) {\n          const el = document.createElementNS(NS, tag);\n          for (const [key, value] of Object.entries(attrs))\n            el.setAttribute(key, String(value));\n          if (text !== undefined) el.textContent = text;\n          return el;\n        }\n        function element(tag, text, className) {\n          const el = document.createElement(tag);\n          if (text !== undefined) el.textContent = text;\n          if (className) el.className = className;\n          return el;\n        }\n        function header(headers, key) {\n          return String(\n            Object.entries(headers || {}).find(\n              ([name]) => name.toLowerCase() === key,\n            )?.[1] ?? \"\",\n          );\n        }\n        function safeCommitUrl(raw) {\n          try {\n            const url = new URL(raw);\n            return url.protocol === \"https:\" &&\n              url.hostname === \"github.com\" &&\n              !url.username &&\n              !url.password &&\n              /\\/commit\\/[a-f0-9]{7,64}$/i.test(url.pathname)\n              ? url.href\n              : \"\";\n          } catch {\n            return \"\";\n          }\n        }\n        try {\n          const data = JSON.parse($(\"dataset\").textContent);\n          if (data.schema_version !== \"activity-topography/1\")\n            throw new Error(\"Unrecognized topography dataset.\");\n          $(\"repository\").textContent = String(\n            data.repository || \"Public repository\",\n          );\n          if (data.status !== 200)\n            throw new Error(\n              \"GitHub returned HTTP \" +\n                data.status +\n                \". Check the repository name or rate limit, then rerun. No sample landscape was substituted.\",\n            );\n          if (!Array.isArray(data.commits))\n            throw new Error(\"GitHub did not return a commit list.\");\n          const rawDate = header(data.headers, \"date\");\n          const responseTime = Date.parse(rawDate);\n          $(\"snapshot\").textContent = Number.isFinite(responseTime)\n            ? \"Retrieved: \" +\n              new Date(responseTime)\n                .toISOString()\n                .replace(\"T\", \" \")\n                .replace(\".000Z\", \" UTC\")\n            : \"Retrieval time not provided by source\";\n          const seen = new Set();\n          let invalid = 0,\n            duplicates = 0;\n          const records = [];\n          for (const row of data.commits.slice(0, 100)) {\n            if (\n              !row ||\n              typeof row.sha !== \"string\" ||\n              !/^[a-f0-9]{7,64}$/i.test(row.sha) ||\n              typeof row.date !== \"string\" ||\n              !/^\\d{4}-\\d{2}-\\d{2}T/.test(row.date) ||\n              !Number.isFinite(Date.parse(row.date))\n            ) {\n              invalid++;\n              continue;\n            }\n            if (seen.has(row.sha)) {\n              duplicates++;\n              continue;\n            }\n            seen.add(row.sha);\n            const login =\n              typeof row.login === \"string\" && row.login.trim()\n                ? row.login\n                : null;\n            records.push({\n              sha: row.sha,\n              time: Date.parse(row.date),\n              date: iso(Date.parse(row.date)),\n              author: login || \"Unlinked author\",\n              key: login ? \"login:\" + login : \"unlinked\",\n              subject: String(row.message || \"No commit subject\")\n                .split(/\\r?\\n/)[0]\n                .slice(0, 500),\n              url: safeCommitUrl(row.url),\n            });\n          }\n          records.sort((a, b) => a.time - b.time || a.sha.localeCompare(b.sha));\n          const authors = [\n            ...new Map(records.map((row) => [row.key, row.author])).entries(),\n          ].sort((a, b) => a[1].localeCompare(b[1]));\n          for (const [key, label] of authors) {\n            const option = element(\"option\", label);\n            option.value = key;\n            $(\"author\").append(option);\n          }\n          const hasMore = /rel=\"next\"/.test(header(data.headers, \"link\"));\n          $(\"coverage\").textContent =\n            \"Bounded snapshot: \" +\n            data.commits.length +\n            \" returned, \" +\n            records.length +\n            \" valid unique commits. \" +\n            (hasMore\n              ? \"GitHub reports older pages; they were not fetched. \"\n              : \"Only the first API page was requested. \") +\n            \"The window ends in the latest valid commit's week, not necessarily this week. Blank days mean no matching records in this sample, not proof of inactivity. \" +\n            invalid +\n            \" invalid, \" +\n            duplicates +\n            \" duplicate, \" +\n            Math.max(0, data.commits.length - 100) +\n            \" over-cap records excluded.\";\n          let selectedDay = \"\",\n            selectedSha = \"\",\n            visible = [],\n            buckets = new Map();\n          let peakElements = [];\n          function showCommit(row) {\n            selectedSha = row.sha;\n            $(\"detail\").replaceChildren(\n              element(\"p\", row.subject),\n              element(\n                \"p\",\n                row.author + \" / \" + new Date(row.time).toISOString(),\n                \"meta\",\n              ),\n              element(\"p\", row.sha, \"meta\"),\n            );\n            const label = element(\"label\", \"Commit URL (select to copy)\");\n            const input = element(\"input\");\n            input.readOnly = true;\n            input.value = row.url || \"No safe GitHub commit URL\";\n            input.addEventListener(\"focus\", () => input.select());\n            label.append(input);\n            $(\"detail\").append(label);\n            for (const button of $(\"commits\").children)\n              button.setAttribute(\n                \"aria-pressed\",\n                String(button.dataset.sha === selectedSha),\n              );\n          }\n          function selectDay(date) {\n            selectedDay = date;\n            $(\"day\").value = date;\n            $(\"day-title\").textContent = date\n              ? date + \" / UTC\"\n              : \"No matching commits.\";\n            $(\"commits\").replaceChildren();\n            $(\"detail\").replaceChildren(\n              element(\"p\", \"Select a commit to inspect its subject and URL.\"),\n            );\n            const rows = buckets.get(date) || [];\n            for (const row of [...rows].reverse()) {\n              const button = element(\"button\", row.subject);\n              button.type = \"button\";\n              button.dataset.sha = row.sha;\n              button.append(\n                element(\"span\", row.author + \" / \" + row.sha.slice(0, 7)),\n              );\n              button.addEventListener(\"click\", () => showCommit(row));\n              $(\"commits\").append(button);\n            }\n            for (const [el, day] of peakElements) {\n              el.setAttribute(\"r\", day === date ? \"6\" : \"3.5\");\n              el.setAttribute(\"aria-pressed\", String(day === date));\n            }\n            if (rows.length)\n              showCommit(\n                rows.find((row) => row.sha === selectedSha) ||\n                  rows[rows.length - 1],\n              );\n          }\n          function draw() {\n            const weeks = Number($(\"weeks\").value);\n            const palette = palettes[$(\"palette\").value];\n            document.documentElement.style.setProperty(\n              \"--accent\",\n              palette.accent,\n            );\n            const anchor = records.length\n              ? monday(records[records.length - 1].time)\n              : 0;\n            const start = anchor - (weeks - 1) * 7 * DAY;\n            const end = anchor + 7 * DAY;\n            visible = records.filter(\n              (row) =>\n                row.time >= start &&\n                row.time < end &&\n                ($(\"author\").value === \"all\" || row.key === $(\"author\").value),\n            );\n            buckets = new Map();\n            for (const row of visible) {\n              if (!buckets.has(row.date)) buckets.set(row.date, []);\n              buckets.get(row.date).push(row);\n            }\n            const maximum = Math.max(\n              1,\n              ...[...buckets.values()].map((rows) => rows.length),\n            );\n            $(\"count\").textContent = String(visible.length);\n            $(\"peak\").textContent = String(visible.length ? maximum : 0);\n            $(\"ridges\").replaceChildren();\n            $(\"markers\").replaceChildren();\n            $(\"labels\").replaceChildren();\n            peakElements = [];\n            $(\"day\").replaceChildren();\n            for (const date of [...buckets.keys()].reverse()) {\n              const option = element(\n                \"option\",\n                date + \" / \" + buckets.get(date).length + \" commits\",\n              );\n              option.value = date;\n              $(\"day\").append(option);\n            }\n            if (!records.length) {\n              $(\"status\").textContent =\n                \"No valid commits in the fetched sample. No landscape fabricated.\";\n              selectDay(\"\");\n              return;\n            }\n            for (let week = 0; week < weeks; week++) {\n              const ratio = week / Math.max(1, weeks - 1);\n              const base = 130 + ratio * 445;\n              const left = 175 - ratio * 48,\n                width = 650 + ratio * 110;\n              const fill =\n                \"rgb(\" +\n                palette.low\n                  .map((low, index) =>\n                    Math.round(\n                      low + (palette.high[index] - low) * ratio * 0.75,\n                    ),\n                  )\n                  .join(\",\") +\n                \")\";\n              const points = [];\n              for (let day = 0; day < 7; day++) {\n                const date = iso(start + (week * 7 + day) * DAY);\n                const count = (buckets.get(date) || []).length;\n                const x = left + (width * day) / 6;\n                const y =\n                  base - (count / maximum) * 60 * Number($(\"relief\").value);\n                points.push([x, y]);\n                if (count) {\n                  const peak = svg(\"circle\", {\n                    cx: x,\n                    cy: y,\n                    r: 3.5,\n                    fill: palette.accent,\n                    class: \"peak\",\n                    tabindex: 0,\n                    role: \"button\",\n                    \"aria-label\": date + \": \" + count + \" commits\",\n                  });\n                  peak.append(\n                    svg(\"title\", {}, date + \" / \" + count + \" commits\"),\n                  );\n                  peak.addEventListener(\"click\", () => selectDay(date));\n                  peak.addEventListener(\"keydown\", (event) => {\n                    if (event.key === \"Enter\" || event.key === \" \") {\n                      event.preventDefault();\n                      selectDay(date);\n                    }\n                  });\n                  peakElements.push([peak, date]);\n                }\n              }\n              const line =\n                \"M \" + points.map((point) => point.join(\" \")).join(\" L \");\n              $(\"ridges\").append(\n                svg(\"path\", {\n                  d:\n                    line +\n                    \" L \" +\n                    (left + width) +\n                    \" \" +\n                    (base + 12) +\n                    \" L \" +\n                    left +\n                    \" \" +\n                    (base + 12) +\n                    \" Z\",\n                  fill,\n                  \"fill-opacity\": 0.7,\n                }),\n              );\n              $(\"ridges\").append(\n                svg(\"path\", {\n                  d: line,\n                  fill: \"none\",\n                  stroke: palette.accent,\n                  \"stroke-opacity\": 0.6,\n                  \"stroke-width\": 1,\n                }),\n              );\n              if (weeks <= 24 || week % 2 === 0 || week === weeks - 1)\n                $(\"labels\").append(\n                  svg(\n                    \"text\",\n                    { x: left - 12, y: base + 3, \"text-anchor\": \"end\" },\n                    iso(start + week * 7 * DAY),\n                  ),\n                );\n            }\n            for (const [peak] of peakElements) $(\"markers\").append(peak);\n            for (const [index, name] of [\n              \"MON\",\n              \"TUE\",\n              \"WED\",\n              \"THU\",\n              \"FRI\",\n              \"SAT\",\n              \"SUN\",\n            ].entries())\n              $(\"labels\").append(\n                svg(\n                  \"text\",\n                  {\n                    x: 127 + (760 * index) / 6,\n                    y: 615,\n                    \"text-anchor\": \"middle\",\n                  },\n                  name,\n                ),\n              );\n            $(\"status\").textContent =\n              iso(start) +\n              \" to \" +\n              iso(end - DAY) +\n              \" / \" +\n              visible.length +\n              \" matching commits on \" +\n              buckets.size +\n              \" days. \" +\n              (records.length - visible.length) +\n              \" valid sample records outside these filters. \" +\n              (visible.length\n                ? \"Select a summit or choose a day.\"\n                : \"No matching commits in this window.\");\n            selectDay(\n              buckets.has(selectedDay)\n                ? selectedDay\n                : [...buckets.keys()].at(-1) || \"\",\n            );\n          }\n          for (const id of [\"weeks\", \"author\", \"palette\"])\n            $(id).addEventListener(\"change\", draw);\n          $(\"relief\").addEventListener(\"input\", draw);\n          $(\"day\").addEventListener(\"change\", () => selectDay($(\"day\").value));\n          draw();\n        } catch (error) {\n          $(\"error\").hidden = false;\n          $(\"error\").textContent =\n            error.message || \"Unable to render this snapshot.\";\n        }\n      })();\n    </script>\n  </body>\n</html>\n"
        },
        "custom_inputs": {
          "dataset_json": "str"
        },
        "exposed_inputs": [
          "dataset_json"
        ],
        "inputs_visibility_configured": true
      },
      {
        "node_instance_id": "response",
        "node_id": "n_html_response",
        "node_version": "1.0.0",
        "title": "Topography page",
        "params": {}
      },
      {
        "node_instance_id": "data_response",
        "node_id": "n_json_response",
        "node_version": "1.0.0",
        "title": "Commit dataset response",
        "params": {}
      },
      {
        "node_instance_id": "url_base",
        "node_id": "n_url_input",
        "node_version": "1.0.0",
        "title": "API base URL",
        "params": {
          "url": "https://api.github.com"
        }
      },
      {
        "node_instance_id": "url_segments",
        "node_id": "n_json_template",
        "node_version": "1.0.0",
        "title": "API path segments",
        "params": {
          "template": [
            "repos",
            "{{ inputs.repository.owner }}",
            "{{ inputs.repository.repo }}",
            "commits"
          ]
        },
        "custom_inputs": {
          "repository": "json"
        }
      }
    ],
    "edges": [
      {
        "source_node_id": "repository",
        "source_output": "value",
        "target_node_id": "url_segments",
        "target_input": "repository"
      },
      {
        "source_node_id": "url",
        "source_output": "url",
        "target_node_id": "fetch",
        "target_input": "url"
      },
      {
        "source_node_id": "fetch",
        "source_output": "body",
        "target_node_id": "parse",
        "target_input": "text"
      },
      {
        "source_node_id": "parse",
        "source_output": "value",
        "target_node_id": "project",
        "target_input": "value"
      },
      {
        "source_node_id": "repository",
        "source_output": "value",
        "target_node_id": "dataset",
        "target_input": "repository"
      },
      {
        "source_node_id": "url",
        "source_output": "url",
        "target_node_id": "dataset",
        "target_input": "url"
      },
      {
        "source_node_id": "fetch",
        "source_output": "status",
        "target_node_id": "dataset",
        "target_input": "status"
      },
      {
        "source_node_id": "fetch",
        "source_output": "headers",
        "target_node_id": "dataset",
        "target_input": "headers"
      },
      {
        "source_node_id": "project",
        "source_output": "value",
        "target_node_id": "dataset",
        "target_input": "commits"
      },
      {
        "source_node_id": "dataset",
        "source_output": "value",
        "target_node_id": "encode",
        "target_input": "value"
      },
      {
        "source_node_id": "encode",
        "source_output": "text",
        "target_node_id": "view",
        "target_input": "dataset_json"
      },
      {
        "source_node_id": "view",
        "source_output": "html",
        "target_node_id": "response",
        "target_input": "html"
      },
      {
        "source_node_id": "dataset",
        "source_output": "value",
        "target_node_id": "data_response",
        "target_input": "value"
      },
      {
        "source_node_id": "url_base",
        "source_output": "url",
        "target_node_id": "url",
        "target_input": "base"
      },
      {
        "source_node_id": "url_segments",
        "source_output": "value",
        "target_node_id": "url",
        "target_input": "segments"
      }
    ],
    "graph_outputs": {
      "html": {
        "node_instance_id": "view",
        "output_name": "html"
      },
      "response": {
        "node_instance_id": "response",
        "output_name": "response"
      },
      "dataset": {
        "node_instance_id": "dataset",
        "output_name": "value"
      },
      "data_response": {
        "node_instance_id": "data_response",
        "output_name": "response"
      }
    },
    "metadata": {
      "template": {
        "category": "html",
        "status": "provider-backed-probe",
        "summary": "Public GitHub commit facts become an inspectable weekly landscape.",
        "requires": {
          "nodes": [
            "n_static_value",
            "n_text_template",
            "n_fetch_url",
            "n_json_parse",
            "n_map_fields",
            "n_json_template",
            "n_json_stringify",
            "n_html_template",
            "n_html_response",
            "n_json_response",
            "n_url_input",
            "n_url_builder"
          ],
          "panels": [
            "html",
            "json"
          ],
          "capabilities": [
            "public-http"
          ],
          "secrets": []
        }
      },
      "canvas": {
        "positions": {
          "repository": {
            "x": 60,
            "y": 80
          },
          "url": {
            "x": 350,
            "y": 80
          },
          "fetch": {
            "x": 650,
            "y": 80
          },
          "parse": {
            "x": 950,
            "y": 80
          },
          "project": {
            "x": 1250,
            "y": 80
          },
          "dataset": {
            "x": 1550,
            "y": 170
          },
          "encode": {
            "x": 1850,
            "y": 170
          },
          "view": {
            "x": 2150,
            "y": 170
          },
          "response": {
            "x": 2450,
            "y": 170
          },
          "data_response": {
            "x": 1850,
            "y": 450
          }
        },
        "recommended_panels": [
          {
            "kind": "html",
            "binding": {
              "nodeInstanceId": "view",
              "outputName": "html"
            }
          },
          {
            "kind": "json",
            "binding": {
              "nodeInstanceId": "dataset",
              "outputName": "value"
            }
          }
        ]
      }
    }
  },
  "tags": [
    "html",
    "visualizations"
  ]
}
