Darkmatter · github-bot stage: prod
preview@internal.darkmatter
Events received
64284
Ignored
64249
Jobs dispatched
35

Event f80e1970…

← All events

Event

Delivery
f80e1970-6080-11f1-8072-9b349ef850bd
Event
pull_request_review_comment
Action
created
Received
2026-06-05T01:50:47.111Z
Signature
valid
Parsed
yes
Sender
scottmcmaster
Repo
darkmatter/nixmac-web
Status
ignored — missing_command

Headers

{
  "accept": "*/*",
  "accept-encoding": "gzip, br",
  "cf-connecting-ip": "140.82.115.152",
  "cf-ipcountry": "US",
  "cf-ray": "a06b87486a96d62d",
  "cf-visitor": "{\"scheme\":\"https\"}",
  "connection": "Keep-Alive",
  "content-length": "39658",
  "content-type": "application/json",
  "host": "github-bot.darkmatter.io",
  "user-agent": "GitHub-Hookshot/eec6cea",
  "x-forwarded-proto": "https",
  "x-github-delivery": "f80e1970-6080-11f1-8072-9b349ef850bd",
  "x-github-event": "pull_request_review_comment",
  "x-github-hook-id": "628737947",
  "x-github-hook-installation-target-id": "3663660",
  "x-github-hook-installation-target-type": "integration",
  "x-real-ip": "140.82.115.152"
}

Payload

{
  "action": "created",
  "comment": {
    "url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/comments/3359864342",
    "pull_request_review_id": 4432713757,
    "id": 3359864342,
    "node_id": "PRRC_kwDOQc69G87IQ3YW",
    "diff_hunk": "@@ -0,0 +1,311 @@\n+# `generate_report.py` — Design Doc\n+\n+**Status:** Draft, pending review\n+**Author:** Juan Pedro\n+**Goal:** Make eval output evaluable by a human in minutes, not hours.\n+\n+______________________________________________________________________\n+\n+## Problem\n+\n+Today, inspecting an eval run means:\n+\n+1. Eyeballing the terminal output of `calc_stats.py` (a fixed-width table).\n+1. Re-running `grade.py` and reading another terminal block.\n+1. Opening individual `case_*_result.json` files to see the prompt, the diff,\n+   the grading detail, the conversational reply.\n+1. Going to the `NIXMAC_LOGFILE` (`*.out`) to grep around for the chain of tool\n+   calls used in a given iteration.\n+\n+Every step is a context switch. There is no shareable artifact: a reviewer\n+who is not me cannot inspect the same run without rerunning everything.\n+\n+## What this tool does\n+\n+A single Python script, `apps/eval/generate_report.py`, that takes:\n+\n+- the results directory (default `data/results/`),\n+- optionally the eval log file (`NIXMAC_LOGFILE`, default auto-detected),\n+\n+and produces an HTML report under `data/report/` (configurable) that a human\n+can open locally to inspect the whole run.\n+\n+```\n+uv run python generate_report.py\n+uv run python generate_report.py -i data/results -o data/report\n+uv run python generate_report.py --log 2026-05-19-evals.out\n+uv run python generate_report.py --golden-only\n+```\n+\n+It does **not** re-run the eval and does **not** re-grade — it expects\n+`grade.py` to have run first (and warns if any case is missing `grade`).\n+\n+## User journey\n+\n+Two personas, one document.\n+\n+**Reviewer (PM, eng lead).** Opens `report/index.html`. Sees the headline\n+pass rate, the segmented breakdown, and a scannable table of all cases.\n+Clicks into the failed ones. Reads the prompt, sees the diff, reads\n+*why* the grader marked it failed, decides whether they agree.\n+\n+**Author of changes (model / prompt iteration).** Same entry point.\n+Filters to a single failure class or a single category. For one case,\n+expands the chain of tool calls to understand *what the model was trying\n+to do* before it went wrong.\n+\n+The report should be openable directly from disk (`file://`) — no server.\n+\n+## What the report looks like\n+\n+### Layout\n+\n+```\n+data/report/\n+├── index.html         ← summary + case table, links to detail pages\n+├── cases/\n+│   ├── case_1.html\n+│   ├── case_3.html\n+│   └── ...\n+└── assets/\n+    ├── style.css\n+    └── report.js      ← only for client-side filter/sort\n+```\n+\n+(Open question — see Q1 — whether multi-file or single-file is preferred.)\n+\n+### `index.html`\n+\n+**Section 1 — Headline.** One block, large:\n+\n+> **Pass rate: 23 / 28 (82%)** — golden set\n+> Model: `gpt-oss-120b` (vllm) · Summary: `gpt-4o` · 2026-05-19 · 28 cases\n+\n+If a previous report is supplied via `--compare path/to/prev`, the\n+delta vs. the previous run goes here too (`+2 cases`, `-1 case`).\n+\n+**Section 2 — Segmented summary.** Three cards side by side:\n+\n+- **Succeed** (N/M passed)\n+- **Fail gracefully** (N/M passed)\n+- **Refuse** (N/M passed)\n+\n+Each card shows pass rate, count, and the dominant failure class\n+for the failures in that bucket.\n+\n+**Section 3 — Aggregate stats.** The same numbers `calc_stats.py`\n+prints today, but rendered as a clean table with three columns:\n+Overall / Passing / Failing. Sourced by importing `calc_stats`\n+directly (no logic duplication).\n+\n+**Section 4 — Failure breakdown.** Bar chart or simple bar-row of\n+`failure_class` counts, with each bar linking to a filtered view of\n+the case table (e.g. clicking `reasoning_error` scrolls the table\n+and applies the filter).\n+\n+**Section 5 — Case table.** One row per case. Columns:\n+\n+| # | Status | Outcome | Category | Iters | Builds | Tokens | Duration | Failure class | Prompt (truncated) |\n+|---|--------|---------|----------|-------|--------|--------|----------|---------------|--------------------|\n+| 1 | ✓ | succeed | package | 5 | 1 | 41101 | 14s | — | Install ripgrep … |\n+\n+- Row links to `cases/case_N.html`.\n+- Header is sortable client-side. A tiny set of filter chips at the\n+  top: `All / Pass / Fail / succeed / fail_gracefully / refuse / golden-only / has-tool-trace`.\n+- Conversational cases get a 💬 glyph in the diff column.\n+\n+### `cases/case_N.html`\n+\n+A single page per case, top to bottom:\n+\n+1. **Header.** Case ID, status pill (PASS/FAIL), expected outcome,\n+   category/subcategory, priority. Links: ← previous / next →, back to index.\n+1. **Prompt.** Verbatim, in a quoted block. CSV `notes` column shown\n+   underneath if present.\n+1. **Verdict.** A table of grading checks (`completed_ok`, `has_diff`,\n+   `build_attempted`, …), each with a ✓/✗ and the grader's `detail`\n+   string. The failure class is highlighted if the case failed.\n+1. **Diff.** The unified diff from `result.gitStatus.diff`,\n+   syntax-highlighted (red/green per line, file headers bold). Empty\n+   diff renders as a placeholder. (Open question Q4 — diff library\n+   choice.)\n+1. **Conversational response.** Shown only if `result.conversationalResponse`\n+   is set, as a quoted block.\n+1. **Commit message / summary.** From `result.summary.commitMessage`\n+   / `result.summary.instructions` when present.\n+1. **Telemetry.** Compact table: iterations, build attempts, edits,\n+   tool-calls count, thinking entries, duration, tokens (in/out\n+   if available).\n+1. **Tool-call chain.** Collapsed by default. When expanded, shows the\n+   per-iteration trace parsed from the log (see \"Where the tool-call\n+   chain comes from\" below). If the log is unavailable, a friendly\n+   \"tool trace not captured for this run\" placeholder.\n+\n+Every section has an anchor link so a reviewer can deep-link to\n+e.g. `case_27.html#diff`.\n+\n+### Tool-call chain — what it looks like\n+\n+Per iteration:\n+\n+```\n+ITERATION 2  (active messages=4, build_attempts=0/5)\n+└── 🔧 list_files { pattern: \"**/*.nix\" }\n+    └── returned 365 bytes  (15 files)\n+\n+ITERATION 3\n+└── 🔧 read_file { path: \"modules/darwin/packages.nix\" }\n+    └── returned 1111 bytes\n+\n+ITERATION 5\n+└── 🔧 edit_nix_file { action: add, path: environment.systemPackages,\n+                       values: [\"ripgrep\",\"fd\"] }\n+    └── 📝 Semantic Edit applied\n+```\n+\n+Rendered as a vertical timeline. Tool name and args are the main signal;\n+the response size / summary is secondary. Long arg values are collapsible.\n+\n+## Where the tool-call chain comes from\n+\n+This is the most under-specified part of the existing pipeline and the\n+main reason for this doc.\n+\n+- The result JSON only stores `telemetry.toolCallsCount` — no actual\n+  trace.\n+- The full trace exists only in the `NIXMAC_LOGFILE` (`*.out`), as\n+  stderr-style tracing-subscriber lines.\n+- The logfile contains *all* cases concatenated in run order, delimited\n+  by the `EVOLUTION STARTING` / `EVOLUTION COMPLETE` banners and an\n+  `Evolution ID:` line. Mapping log section → case ID is not direct;\n+  it has to be done by ordering against the prompt (logged as\n+  `📝 Prompt: <text>`) and/or run order.\n+\n+The design assumes a best-effort log parser that:\n+\n+- Splits the log into per-evolution sections.\n+- Matches each section to a result JSON by prompt text (exact match\n+  on the first line) — falls back to \"section index N\" if no match.\n+- Extracts each `ITERATION N`, `🔧 Model requested …`, `→ <tool> | args:`,\n+  `Tool returned … bytes`, and the various per-tool result lines\n+  (`📝 Semantic Edit`, `🔍 Search Packages …`).\n+- Stores the parsed trace as JSON next to the case (`cases/case_N.trace.json`)\n+  so the HTML can be regenerated without re-parsing the log.\n+\n+If `--log` is omitted and no `*.out` is auto-detected, traces are simply\n+absent — the rest of the report still works.\n+\n+## Out of scope (v1)\n+\n+- Re-running the eval, or invoking `grade.py` automatically.\n+- Side-by-side diff of two runs (compare is text-only in v1).\n+- Anything LLM-as-judge (semantic grading is a separate workstream).\n+- Editing / annotating grades from the report (read-only).\n+- Hosting the report anywhere — purely local `file://`.\n+\n+## Implementation sketch (non-binding, here to make the doc honest)\n+\n+- Stdlib only where possible: `json`, `csv`, `html`, `pathlib`,\n+  `dataclasses`. Reuses `calc_stats.extract_metrics` and\n+  `grade.load_csv_lookup` / `grade.load_expectations`.\n+- Templating: Jinja2 if we're OK adding the dep; otherwise plain\n+  f-strings in a `templates.py` module. (Open question Q5.)\n+- Diff rendering: `difflib.HtmlDiff` is built-in but ugly; a small\n+  custom renderer that classes each line `add`/`del`/`hunk`/`ctx`\n+  is probably better. (Open question Q4.)\n+- Log parser: ~150 LOC, line-based state machine.\n+- No JS framework. A 50-line `report.js` for sort + filter on the\n+  case table. Page should be fully usable with JS disabled.\n+\n+______________________________________________________________________\n+\n+## Open questions / choices I'd like your input on\n+\n+**Q1. Single-file vs. multi-file report.**\n+Multi-file (proposed above) keeps each case page small and lets you\n+share a single deep link. Single-file is easier to email / archive,\n+but a 28-case run with full tool traces will be ~5–10 MB of HTML and\n+slow to load. Lean multi-file?\n+\n+ANSWER: multi-file\n+\n+**Q2. Tool-call chain — how hard do we try in v1?**\n+Three options, in increasing effort:\n+\n+1. **Skip it.** Ship without the tool-call timeline; add a \"trace\n+   not available — pass `--log`\" placeholder. Fastest, most honest.\n+1. **Best-effort log parse** (described above). Matches log sections\n+   to cases by prompt text. Works but is brittle when prompts repeat\n+   or get truncated in the log.\n+1. **Capture in the runtime.** Have `run_evals.py` (or nixmac itself)",
    "path": "apps/eval/wip/generate_report-design.md",
    "commit_id": "913b0c94c72e655237a22f344eb4030e3be13bb5",
    "original_commit_id": "913b0c94c72e655237a22f344eb4030e3be13bb5",
    "user": {
      "login": "scottmcmaster",
      "id": 3137688,
      "node_id": "MDQ6VXNlcjMxMzc2ODg=",
      "avatar_url": "https://avatars.githubusercontent.com/u/3137688?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/scottmcmaster",
      "html_url": "https://github.com/scottmcmaster",
      "followers_url": "https://api.github.com/users/scottmcmaster/followers",
      "following_url": "https://api.github.com/users/scottmcmaster/following{/other_user}",
      "gists_url": "https://api.github.com/users/scottmcmaster/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/scottmcmaster/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/scottmcmaster/subscriptions",
      "organizations_url": "https://api.github.com/users/scottmcmaster/orgs",
      "repos_url": "https://api.github.com/users/scottmcmaster/repos",
      "events_url": "https://api.github.com/users/scottmcmaster/events{/privacy}",
      "received_events_url": "https://api.github.com/users/scottmcmaster/received_events",
      "type": "User",
      "user_view_type": "public",
      "site_admin": false
    },
    "body": "I believe this would be pretty hard to pipe through the application. I vote for the first option, to me it's fine if you want to look at tool-call traces -- not something you do every day -- it's ok to have to go through the logs (and possibly preferable given they contain other useful info interleaved).",
    "created_at": "2026-06-05T01:50:44Z",
    "updated_at": "2026-06-05T01:50:44Z",
    "html_url": "https://github.com/darkmatter/nixmac-web/pull/266#discussion_r3359864342",
    "pull_request_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266",
    "_links": {
      "self": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/comments/3359864342"
      },
      "html": {
        "href": "https://github.com/darkmatter/nixmac-web/pull/266#discussion_r3359864342"
      },
      "pull_request": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266"
      }
    },
    "reactions": {
      "url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/comments/3359864342/reactions",
      "total_count": 0,
      "+1": 0,
      "-1": 0,
      "laugh": 0,
      "hooray": 0,
      "confused": 0,
      "heart": 0,
      "rocket": 0,
      "eyes": 0
    },
    "start_line": null,
    "original_start_line": null,
    "start_side": null,
    "line": 240,
    "original_line": 240,
    "side": "RIGHT",
    "author_association": "CONTRIBUTOR",
    "original_position": 240,
    "position": 240,
    "subject_type": "line"
  },
  "pull_request": {
    "url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266",
    "id": 3806174943,
    "node_id": "PR_kwDOQc69G87i3Z7f",
    "html_url": "https://github.com/darkmatter/nixmac-web/pull/266",
    "diff_url": "https://github.com/darkmatter/nixmac-web/pull/266.diff",
    "patch_url": "https://github.com/darkmatter/nixmac-web/pull/266.patch",
    "issue_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/266",
    "number": 266,
    "state": "open",
    "locked": false,
    "title": "feature: eval report generation (first iteration)",
    "user": {
      "login": "arximboldi",
      "id": 4521138,
      "node_id": "MDQ6VXNlcjQ1MjExMzg=",
      "avatar_url": "https://avatars.githubusercontent.com/u/4521138?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/arximboldi",
      "html_url": "https://github.com/arximboldi",
      "followers_url": "https://api.github.com/users/arximboldi/followers",
      "following_url": "https://api.github.com/users/arximboldi/following{/other_user}",
      "gists_url": "https://api.github.com/users/arximboldi/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/arximboldi/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/arximboldi/subscriptions",
      "organizations_url": "https://api.github.com/users/arximboldi/orgs",
      "repos_url": "https://api.github.com/users/arximboldi/repos",
      "events_url": "https://api.github.com/users/arximboldi/events{/privacy}",
      "received_events_url": "https://api.github.com/users/arximboldi/received_events",
      "type": "User",
      "user_view_type": "public",
      "site_admin": false
    },
    "body": "Introduces a `apps/eval/generate_report.py` script that generates an HTML report for a given report. You need to call it after `run_evals.py`, `grade.py` and `calc_stats.py`.\r\n\r\nFuture features include:\r\n- Improve the ergonomics of the whole workflow (perhaps merge scripts into a single command).\r\n- Support passing the initial Nix template (currently it seems to use the config.\r\n- Running and comparing multiple evaluations with different settings (different commits of Nixmac, different Nix templates, different LLM backends, etc.)",
    "created_at": "2026-06-04T21:42:30Z",
    "updated_at": "2026-06-05T01:50:44Z",
    "closed_at": null,
    "merged_at": null,
    "merge_commit_sha": "11b32c9a5eeb620ac88bf158e1b406aafc60ddbb",
    "assignees": [
      {
        "login": "arximboldi",
        "id": 4521138,
        "node_id": "MDQ6VXNlcjQ1MjExMzg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/4521138?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/arximboldi",
        "html_url": "https://github.com/arximboldi",
        "followers_url": "https://api.github.com/users/arximboldi/followers",
        "following_url": "https://api.github.com/users/arximboldi/following{/other_user}",
        "gists_url": "https://api.github.com/users/arximboldi/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/arximboldi/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/arximboldi/subscriptions",
        "organizations_url": "https://api.github.com/users/arximboldi/orgs",
        "repos_url": "https://api.github.com/users/arximboldi/repos",
        "events_url": "https://api.github.com/users/arximboldi/events{/privacy}",
        "received_events_url": "https://api.github.com/users/arximboldi/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      }
    ],
    "requested_reviewers": [
      {
        "login": "fkb032",
        "id": 249513614,
        "node_id": "U_kgDODt9Gjg",
        "avatar_url": "https://avatars.githubusercontent.com/u/249513614?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/fkb032",
        "html_url": "https://github.com/fkb032",
        "followers_url": "https://api.github.com/users/fkb032/followers",
        "following_url": "https://api.github.com/users/fkb032/following{/other_user}",
        "gists_url": "https://api.github.com/users/fkb032/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/fkb032/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/fkb032/subscriptions",
        "organizations_url": "https://api.github.com/users/fkb032/orgs",
        "repos_url": "https://api.github.com/users/fkb032/repos",
        "events_url": "https://api.github.com/users/fkb032/events{/privacy}",
        "received_events_url": "https://api.github.com/users/fkb032/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      }
    ],
    "requested_teams": [],
    "labels": [],
    "milestone": null,
    "draft": false,
    "commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266/commits",
    "review_comments_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266/comments",
    "review_comment_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/comments{/number}",
    "comments_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/266/comments",
    "statuses_url": "https://api.github.com/repos/darkmatter/nixmac-web/statuses/913b0c94c72e655237a22f344eb4030e3be13bb5",
    "head": {
      "label": "darkmatter:jp/eval-report",
      "ref": "jp/eval-report",
      "sha": "913b0c94c72e655237a22f344eb4030e3be13bb5",
      "user": {
        "login": "darkmatter",
        "id": 17834193,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
        "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/darkmatter",
        "html_url": "https://github.com/darkmatter",
        "followers_url": "https://api.github.com/users/darkmatter/followers",
        "following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
        "gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
        "organizations_url": "https://api.github.com/users/darkmatter/orgs",
        "repos_url": "https://api.github.com/users/darkmatter/repos",
        "events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
        "received_events_url": "https://api.github.com/users/darkmatter/received_events",
        "type": "Organization",
        "user_view_type": "public",
        "site_admin": false
      },
      "repo": {
        "id": 1104067867,
        "node_id": "R_kgDOQc69Gw",
        "name": "nixmac-web",
        "full_name": "darkmatter/nixmac-web",
        "private": true,
        "owner": {
          "login": "darkmatter",
          "id": 17834193,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
          "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/darkmatter",
          "html_url": "https://github.com/darkmatter",
          "followers_url": "https://api.github.com/users/darkmatter/followers",
          "following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
          "gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
          "organizations_url": "https://api.github.com/users/darkmatter/orgs",
          "repos_url": "https://api.github.com/users/darkmatter/repos",
          "events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
          "received_events_url": "https://api.github.com/users/darkmatter/received_events",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "html_url": "https://github.com/darkmatter/nixmac-web",
        "description": null,
        "fork": false,
        "url": "https://api.github.com/repos/darkmatter/nixmac-web",
        "forks_url": "https://api.github.com/repos/darkmatter/nixmac-web/forks",
        "keys_url": "https://api.github.com/repos/darkmatter/nixmac-web/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/darkmatter/nixmac-web/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/darkmatter/nixmac-web/teams",
        "hooks_url": "https://api.github.com/repos/darkmatter/nixmac-web/hooks",
        "issue_events_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/events{/number}",
        "events_url": "https://api.github.com/repos/darkmatter/nixmac-web/events",
        "assignees_url": "https://api.github.com/repos/darkmatter/nixmac-web/assignees{/user}",
        "branches_url": "https://api.github.com/repos/darkmatter/nixmac-web/branches{/branch}",
        "tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/tags",
        "blobs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/darkmatter/nixmac-web/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/darkmatter/nixmac-web/languages",
        "stargazers_url": "https://api.github.com/repos/darkmatter/nixmac-web/stargazers",
        "contributors_url": "https://api.github.com/repos/darkmatter/nixmac-web/contributors",
        "subscribers_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscribers",
        "subscription_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscription",
        "commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/darkmatter/nixmac-web/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/darkmatter/nixmac-web/contents/{+path}",
        "compare_url": "https://api.github.com/repos/darkmatter/nixmac-web/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/darkmatter/nixmac-web/merges",
        "archive_url": "https://api.github.com/repos/darkmatter/nixmac-web/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/darkmatter/nixmac-web/downloads",
        "issues_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues{/number}",
        "pulls_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/darkmatter/nixmac-web/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/darkmatter/nixmac-web/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/darkmatter/nixmac-web/labels{/name}",
        "releases_url": "https://api.github.com/repos/darkmatter/nixmac-web/releases{/id}",
        "deployments_url": "https://api.github.com/repos/darkmatter/nixmac-web/deployments",
        "created_at": "2025-11-25T17:53:44Z",
        "updated_at": "2026-06-02T22:19:34Z",
        "pushed_at": "2026-06-04T21:37:10Z",
        "git_url": "git://github.com/darkmatter/nixmac-web.git",
        "ssh_url": "git@github.com:darkmatter/nixmac-web.git",
        "clone_url": "https://github.com/darkmatter/nixmac-web.git",
        "svn_url": "https://github.com/darkmatter/nixmac-web",
        "homepage": null,
        "size": 72892,
        "stargazers_count": 1,
        "watchers_count": 1,
        "language": "TypeScript",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": true,
        "has_pages": false,
        "has_discussions": false,
        "forks_count": 0,
        "mirror_url": null,
        "archived": false,
        "disabled": false,
        "open_issues_count": 3,
        "license": null,
        "allow_forking": false,
        "is_template": false,
        "web_commit_signoff_required": false,
        "has_pull_requests": true,
        "pull_request_creation_policy": "all",
        "topics": [],
        "visibility": "internal",
        "forks": 0,
        "open_issues": 3,
        "watchers": 1,
        "default_branch": "main",
        "allow_squash_merge": true,
        "allow_merge_commit": true,
        "allow_rebase_merge": true,
        "allow_auto_merge": false,
        "delete_branch_on_merge": false,
        "allow_update_branch": false,
        "use_squash_pr_title_as_default": false,
        "squash_merge_commit_message": "COMMIT_MESSAGES",
        "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
        "merge_commit_message": "PR_TITLE",
        "merge_commit_title": "MERGE_MESSAGE"
      }
    },
    "base": {
      "label": "darkmatter:main",
      "ref": "main",
      "sha": "081ab8d87fdfc5e2c63780a77ec7a0b585eb880d",
      "user": {
        "login": "darkmatter",
        "id": 17834193,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
        "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/darkmatter",
        "html_url": "https://github.com/darkmatter",
        "followers_url": "https://api.github.com/users/darkmatter/followers",
        "following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
        "gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
        "organizations_url": "https://api.github.com/users/darkmatter/orgs",
        "repos_url": "https://api.github.com/users/darkmatter/repos",
        "events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
        "received_events_url": "https://api.github.com/users/darkmatter/received_events",
        "type": "Organization",
        "user_view_type": "public",
        "site_admin": false
      },
      "repo": {
        "id": 1104067867,
        "node_id": "R_kgDOQc69Gw",
        "name": "nixmac-web",
        "full_name": "darkmatter/nixmac-web",
        "private": true,
        "owner": {
          "login": "darkmatter",
          "id": 17834193,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
          "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/darkmatter",
          "html_url": "https://github.com/darkmatter",
          "followers_url": "https://api.github.com/users/darkmatter/followers",
          "following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
          "gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
          "organizations_url": "https://api.github.com/users/darkmatter/orgs",
          "repos_url": "https://api.github.com/users/darkmatter/repos",
          "events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
          "received_events_url": "https://api.github.com/users/darkmatter/received_events",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "html_url": "https://github.com/darkmatter/nixmac-web",
        "description": null,
        "fork": false,
        "url": "https://api.github.com/repos/darkmatter/nixmac-web",
        "forks_url": "https://api.github.com/repos/darkmatter/nixmac-web/forks",
        "keys_url": "https://api.github.com/repos/darkmatter/nixmac-web/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/darkmatter/nixmac-web/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/darkmatter/nixmac-web/teams",
        "hooks_url": "https://api.github.com/repos/darkmatter/nixmac-web/hooks",
        "issue_events_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/events{/number}",
        "events_url": "https://api.github.com/repos/darkmatter/nixmac-web/events",
        "assignees_url": "https://api.github.com/repos/darkmatter/nixmac-web/assignees{/user}",
        "branches_url": "https://api.github.com/repos/darkmatter/nixmac-web/branches{/branch}",
        "tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/tags",
        "blobs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/darkmatter/nixmac-web/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/darkmatter/nixmac-web/languages",
        "stargazers_url": "https://api.github.com/repos/darkmatter/nixmac-web/stargazers",
        "contributors_url": "https://api.github.com/repos/darkmatter/nixmac-web/contributors",
        "subscribers_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscribers",
        "subscription_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscription",
        "commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/darkmatter/nixmac-web/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/darkmatter/nixmac-web/contents/{+path}",
        "compare_url": "https://api.github.com/repos/darkmatter/nixmac-web/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/darkmatter/nixmac-web/merges",
        "archive_url": "https://api.github.com/repos/darkmatter/nixmac-web/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/darkmatter/nixmac-web/downloads",
        "issues_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues{/number}",
        "pulls_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/darkmatter/nixmac-web/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/darkmatter/nixmac-web/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/darkmatter/nixmac-web/labels{/name}",
        "releases_url": "https://api.github.com/repos/darkmatter/nixmac-web/releases{/id}",
        "deployments_url": "https://api.github.com/repos/darkmatter/nixmac-web/deployments",
        "created_at": "2025-11-25T17:53:44Z",
        "updated_at": "2026-06-02T22:19:34Z",
        "pushed_at": "2026-06-04T21:37:10Z",
        "git_url": "git://github.com/darkmatter/nixmac-web.git",
        "ssh_url": "git@github.com:darkmatter/nixmac-web.git",
        "clone_url": "https://github.com/darkmatter/nixmac-web.git",
        "svn_url": "https://github.com/darkmatter/nixmac-web",
        "homepage": null,
        "size": 72892,
        "stargazers_count": 1,
        "watchers_count": 1,
        "language": "TypeScript",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": true,
        "has_pages": false,
        "has_discussions": false,
        "forks_count": 0,
        "mirror_url": null,
        "archived": false,
        "disabled": false,
        "open_issues_count": 3,
        "license": null,
        "allow_forking": false,
        "is_template": false,
        "web_commit_signoff_required": false,
        "has_pull_requests": true,
        "pull_request_creation_policy": "all",
        "topics": [],
        "visibility": "internal",
        "forks": 0,
        "open_issues": 3,
        "watchers": 1,
        "default_branch": "main",
        "allow_squash_merge": true,
        "allow_merge_commit": true,
        "allow_rebase_merge": true,
        "allow_auto_merge": false,
        "delete_branch_on_merge": false,
        "allow_update_branch": false,
        "use_squash_pr_title_as_default": false,
        "squash_merge_commit_message": "COMMIT_MESSAGES",
        "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
        "merge_commit_message": "PR_TITLE",
        "merge_commit_title": "MERGE_MESSAGE"
      }
    },
    "_links": {
      "self": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266"
      },
      "html": {
        "href": "https://github.com/darkmatter/nixmac-web/pull/266"
      },
      "issue": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/issues/266"
      },
      "comments": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/issues/266/comments"
      },
      "review_comments": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266/comments"
      },
      "review_comment": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/comments{/number}"
      },
      "commits": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/pulls/266/commits"
      },
      "statuses": {
        "href": "https://api.github.com/repos/darkmatter/nixmac-web/statuses/913b0c94c72e655237a22f344eb4030e3be13bb5"
      }
    },
    "author_association": "CONTRIBUTOR",
    "auto_merge": null,
    "assignee": {
      "login": "arximboldi",
      "id": 4521138,
      "node_id": "MDQ6VXNlcjQ1MjExMzg=",
      "avatar_url": "https://avatars.githubusercontent.com/u/4521138?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/arximboldi",
      "html_url": "https://github.com/arximboldi",
      "followers_url": "https://api.github.com/users/arximboldi/followers",
      "following_url": "https://api.github.com/users/arximboldi/following{/other_user}",
      "gists_url": "https://api.github.com/users/arximboldi/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/arximboldi/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/arximboldi/subscriptions",
      "organizations_url": "https://api.github.com/users/arximboldi/orgs",
      "repos_url": "https://api.github.com/users/arximboldi/repos",
      "events_url": "https://api.github.com/users/arximboldi/events{/privacy}",
      "received_events_url": "https://api.github.com/users/arximboldi/received_events",
      "type": "User",
      "user_view_type": "public",
      "site_admin": false
    },
    "active_lock_reason": null
  },
  "repository": {
    "id": 1104067867,
    "node_id": "R_kgDOQc69Gw",
    "name": "nixmac-web",
    "full_name": "darkmatter/nixmac-web",
    "private": true,
    "owner": {
      "login": "darkmatter",
      "id": 17834193,
      "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
      "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/darkmatter",
      "html_url": "https://github.com/darkmatter",
      "followers_url": "https://api.github.com/users/darkmatter/followers",
      "following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
      "gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
      "organizations_url": "https://api.github.com/users/darkmatter/orgs",
      "repos_url": "https://api.github.com/users/darkmatter/repos",
      "events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
      "received_events_url": "https://api.github.com/users/darkmatter/received_events",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "html_url": "https://github.com/darkmatter/nixmac-web",
    "description": null,
    "fork": false,
    "url": "https://api.github.com/repos/darkmatter/nixmac-web",
    "forks_url": "https://api.github.com/repos/darkmatter/nixmac-web/forks",
    "keys_url": "https://api.github.com/repos/darkmatter/nixmac-web/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/darkmatter/nixmac-web/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/darkmatter/nixmac-web/teams",
    "hooks_url": "https://api.github.com/repos/darkmatter/nixmac-web/hooks",
    "issue_events_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/events{/number}",
    "events_url": "https://api.github.com/repos/darkmatter/nixmac-web/events",
    "assignees_url": "https://api.github.com/repos/darkmatter/nixmac-web/assignees{/user}",
    "branches_url": "https://api.github.com/repos/darkmatter/nixmac-web/branches{/branch}",
    "tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/tags",
    "blobs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/darkmatter/nixmac-web/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/darkmatter/nixmac-web/languages",
    "stargazers_url": "https://api.github.com/repos/darkmatter/nixmac-web/stargazers",
    "contributors_url": "https://api.github.com/repos/darkmatter/nixmac-web/contributors",
    "subscribers_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscribers",
    "subscription_url": "https://api.github.com/repos/darkmatter/nixmac-web/subscription",
    "commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/darkmatter/nixmac-web/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/darkmatter/nixmac-web/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/darkmatter/nixmac-web/contents/{+path}",
    "compare_url": "https://api.github.com/repos/darkmatter/nixmac-web/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/darkmatter/nixmac-web/merges",
    "archive_url": "https://api.github.com/repos/darkmatter/nixmac-web/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/darkmatter/nixmac-web/downloads",
    "issues_url": "https://api.github.com/repos/darkmatter/nixmac-web/issues{/number}",
    "pulls_url": "https://api.github.com/repos/darkmatter/nixmac-web/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/darkmatter/nixmac-web/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/darkmatter/nixmac-web/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/darkmatter/nixmac-web/labels{/name}",
    "releases_url": "https://api.github.com/repos/darkmatter/nixmac-web/releases{/id}",
    "deployments_url": "https://api.github.com/repos/darkmatter/nixmac-web/deployments",
    "created_at": "2025-11-25T17:53:44Z",
    "updated_at": "2026-06-02T22:19:34Z",
    "pushed_at": "2026-06-04T21:37:10Z",
    "git_url": "git://github.com/darkmatter/nixmac-web.git",
    "ssh_url": "git@github.com:darkmatter/nixmac-web.git",
    "clone_url": "https://github.com/darkmatter/nixmac-web.git",
    "svn_url": "https://github.com/darkmatter/nixmac-web",
    "homepage": null,
    "size": 72892,
    "stargazers_count": 1,
    "watchers_count": 1,
    "language": "TypeScript",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "has_discussions": false,
    "forks_count": 0,
    "mirror_url": null,
    "archived": false,
    "disabled": false,
    "open_issues_count": 3,
    "license": null,
    "allow_forking": false,
    "is_template": false,
    "web_commit_signoff_required": false,
    "has_pull_requests": true,
    "pull_request_creation_policy": "all",
    "topics": [],
    "visibility": "internal",
    "forks": 0,
    "open_issues": 3,
    "watchers": 1,
    "default_branch": "main",
    "custom_properties": {}
  },
  "organization": {
    "login": "darkmatter",
    "id": 17834193,
    "node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
    "url": "https://api.github.com/orgs/darkmatter",
    "repos_url": "https://api.github.com/orgs/darkmatter/repos",
    "events_url": "https://api.github.com/orgs/darkmatter/events",
    "hooks_url": "https://api.github.com/orgs/darkmatter/hooks",
    "issues_url": "https://api.github.com/orgs/darkmatter/issues",
    "members_url": "https://api.github.com/orgs/darkmatter/members{/member}",
    "public_members_url": "https://api.github.com/orgs/darkmatter/public_members{/member}",
    "avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
    "description": ""
  },
  "enterprise": {
    "id": 469843,
    "slug": "darkmatter",
    "name": "darkmatter",
    "node_id": "E_kgDOAAcrUw",
    "avatar_url": "https://avatars.githubusercontent.com/b/469843?v=4",
    "description": "",
    "website_url": "darkmatter.io",
    "html_url": "https://github.com/enterprises/darkmatter",
    "created_at": "2025-09-07T16:01:00Z",
    "updated_at": "2026-05-09T15:34:55Z"
  },
  "sender": {
    "login": "scottmcmaster",
    "id": 3137688,
    "node_id": "MDQ6VXNlcjMxMzc2ODg=",
    "avatar_url": "https://avatars.githubusercontent.com/u/3137688?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/scottmcmaster",
    "html_url": "https://github.com/scottmcmaster",
    "followers_url": "https://api.github.com/users/scottmcmaster/followers",
    "following_url": "https://api.github.com/users/scottmcmaster/following{/other_user}",
    "gists_url": "https://api.github.com/users/scottmcmaster/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/scottmcmaster/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/scottmcmaster/subscriptions",
    "organizations_url": "https://api.github.com/users/scottmcmaster/orgs",
    "repos_url": "https://api.github.com/users/scottmcmaster/repos",
    "events_url": "https://api.github.com/users/scottmcmaster/events{/privacy}",
    "received_events_url": "https://api.github.com/users/scottmcmaster/received_events",
    "type": "User",
    "user_view_type": "public",
    "site_admin": false
  },
  "installation": {
    "id": 131074261,
    "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
  }
}