Payload
{
"ref": "refs/heads/06-08-scott-use-whole-diff-summarize-in-lifecycle",
"before": "f09f61c04ecf7c730383b8fce58406b36db860e9",
"after": "7d120f95fc33571bb42dbffe756a9640654019de",
"repository": {
"id": 1209959628,
"node_id": "R_kgDOSB6EzA",
"name": "nixmac",
"full_name": "darkmatter/nixmac",
"private": false,
"owner": {
"name": "darkmatter",
"email": "hello@dm.sh",
"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",
"description": "Home manager and nix-darwin that understands plain English",
"fork": false,
"url": "https://api.github.com/repos/darkmatter/nixmac",
"forks_url": "https://api.github.com/repos/darkmatter/nixmac/forks",
"keys_url": "https://api.github.com/repos/darkmatter/nixmac/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/darkmatter/nixmac/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/darkmatter/nixmac/teams",
"hooks_url": "https://api.github.com/repos/darkmatter/nixmac/hooks",
"issue_events_url": "https://api.github.com/repos/darkmatter/nixmac/issues/events{/number}",
"events_url": "https://api.github.com/repos/darkmatter/nixmac/events",
"assignees_url": "https://api.github.com/repos/darkmatter/nixmac/assignees{/user}",
"branches_url": "https://api.github.com/repos/darkmatter/nixmac/branches{/branch}",
"tags_url": "https://api.github.com/repos/darkmatter/nixmac/tags",
"blobs_url": "https://api.github.com/repos/darkmatter/nixmac/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/darkmatter/nixmac/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/darkmatter/nixmac/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/darkmatter/nixmac/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/darkmatter/nixmac/statuses/{sha}",
"languages_url": "https://api.github.com/repos/darkmatter/nixmac/languages",
"stargazers_url": "https://api.github.com/repos/darkmatter/nixmac/stargazers",
"contributors_url": "https://api.github.com/repos/darkmatter/nixmac/contributors",
"subscribers_url": "https://api.github.com/repos/darkmatter/nixmac/subscribers",
"subscription_url": "https://api.github.com/repos/darkmatter/nixmac/subscription",
"commits_url": "https://api.github.com/repos/darkmatter/nixmac/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/darkmatter/nixmac/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/darkmatter/nixmac/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/darkmatter/nixmac/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/darkmatter/nixmac/contents/{+path}",
"compare_url": "https://api.github.com/repos/darkmatter/nixmac/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/darkmatter/nixmac/merges",
"archive_url": "https://api.github.com/repos/darkmatter/nixmac/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/darkmatter/nixmac/downloads",
"issues_url": "https://api.github.com/repos/darkmatter/nixmac/issues{/number}",
"pulls_url": "https://api.github.com/repos/darkmatter/nixmac/pulls{/number}",
"milestones_url": "https://api.github.com/repos/darkmatter/nixmac/milestones{/number}",
"notifications_url": "https://api.github.com/repos/darkmatter/nixmac/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/darkmatter/nixmac/labels{/name}",
"releases_url": "https://api.github.com/repos/darkmatter/nixmac/releases{/id}",
"deployments_url": "https://api.github.com/repos/darkmatter/nixmac/deployments",
"created_at": 1776127033,
"updated_at": "2026-06-08T11:53:43Z",
"pushed_at": 1780919624,
"git_url": "git://github.com/darkmatter/nixmac.git",
"ssh_url": "git@github.com:darkmatter/nixmac.git",
"clone_url": "https://github.com/darkmatter/nixmac.git",
"svn_url": "https://github.com/darkmatter/nixmac",
"homepage": "https://nixmac.com",
"size": 680830,
"stargazers_count": 5,
"watchers_count": 5,
"language": "Rust",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"has_discussions": false,
"forks_count": 1,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 81,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"has_pull_requests": true,
"pull_request_creation_policy": "all",
"topics": [
"home-manager",
"nix",
"nix-darwin",
"nix-flake",
"opencode"
],
"visibility": "public",
"forks": 1,
"open_issues": 81,
"watchers": 5,
"default_branch": "develop",
"stargazers": 5,
"master_branch": "develop",
"organization": "darkmatter",
"custom_properties": {}
},
"pusher": {
"name": "darkmatter[bot]",
"email": null
},
"forced": false,
"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-06-07T16:53:26Z"
},
"sender": {
"login": "darkmatter[bot]",
"id": 283346107,
"node_id": "BOT_kgDOEOOEuw",
"avatar_url": "https://avatars.githubusercontent.com/in/3663660?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/darkmatter%5Bbot%5D",
"html_url": "https://github.com/apps/darkmatter",
"followers_url": "https://api.github.com/users/darkmatter%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/darkmatter%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/darkmatter%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/darkmatter%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/darkmatter%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/darkmatter%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/darkmatter%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/darkmatter%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/darkmatter%5Bbot%5D/received_events",
"type": "Bot",
"user_view_type": "public",
"site_admin": false
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
},
"created": false,
"deleted": false,
"base_ref": null,
"compare": "https://github.com/darkmatter/nixmac/compare/f09f61c04ecf...7d120f95fc33",
"commits": [
{
"id": "92786de3f7c5e0d018b0fc0802426e3326a10557",
"tree_id": "afb564a2dc50f6f6c5c97e38f720f4c74b2ce7d4",
"distinct": false,
"message": "fix(evolve): four correctness fixes in the evolve loop (#336)\n\n* fix(evolve): make truncate_for_log UTF-8 safe\n\ntruncate_for_log sliced the string with `&s[..max_len]`, a byte index.\nWhen a multi-byte UTF-8 char (accented letters, emoji, arrows — common in\nagent thoughts, which are truncated at 200 for logging) straddled that\nindex, the slice panicked with \"byte index N is not a char boundary\".\n\nTruncate on a char boundary instead, treating max_len as a character\nbudget. Adds tests covering the short-string, newline-collapse, ASCII\ntruncation, and the multi-byte boundary case that previously panicked.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n* fix(evolve): don't duplicate a non-list attr in edit_nix_file add()\n\nWhen add() was given an attrpath that already existed as a non-list\nassignment (e.g. `programs.git = { enable = true; }`), find_list_for_attrpath\nreturned None and add() fell through to inserting a brand-new\n`programs.git = [ ... ];`. The file then had two assignments to the same\nattribute — invalid, duplicated Nix that a later build would reject.\n\nDetect the pre-existing non-list assignment and return a clear error\ninstead of corrupting the file. Adds a test for the duplicate case.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n* fix(evolve): handle ${ } antiquotation in validate_nix_syntax\n\nThe structural validator scanned strings with a flat in_string flag and\nnever recognized `${ ... }` antiquotation. When an interpolation contained\na nested string with a `{`/`}` — e.g. `\"${if a then \"}\" else \"y\"}\"` — the\ninner quotes toggled the flag and the braces were then counted in the\nwrong context, so the validator rejected valid Nix and blocked legitimate\nagent edits.\n\nRewrite the scanner around a single context stack: `${` inside a string\npushes a code frame and its matching `}` pops back to the string, so\ninterpolations can hold nested strings, braces, and further\ninterpolations. Existing behaviour (balanced braces/brackets/parens,\ncomments, indented-string escapes, unclosed detection) and all error\nmessages are preserved; only the antiquotation handling changes.\n\nAdds tests for nested-string and indented-string interpolation (accept)\nand an unbalanced interpolation (still rejected).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n* fix(evolve): reset build_verified on edit and on failed build_check\n\nbuild_verified was set true on the first passing build_check and never\ncleared. Two ways this let `done` complete an unbuildable config:\n\n 1. build_check passes -> the agent edits again -> done accepted, even\n though the latest edit was never built.\n 2. build_check passes -> a later build_check fails -> done accepted as\n \"complete\" despite the currently-failing build.\n\nClear build_verified whenever an editing tool runs (the verified state no\nlonger matches the files) and whenever a build_check fails. The done gate\nthen correctly requires a fresh, passing build_check.\n\nTests drive process_tool_result directly (a free function): a failing\nbuild clears verification, and done after pass-then-fail does not mark the\nevolution Generated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"timestamp": "2026-06-08T06:37:06Z",
"url": "https://github.com/darkmatter/nixmac/commit/92786de3f7c5e0d018b0fc0802426e3326a10557",
"author": {
"name": "Andrew MacBride",
"email": "amacbride@users.noreply.github.com",
"date": "2026-06-08T02:37:06-04:00",
"username": "amacbride"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-08T06:37:06Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/evolve/edit_nix_file.rs",
"apps/native/src-tauri/src/evolve/file_ops.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/tools.rs"
]
},
{
"id": "92781ce7891f3fe8c06a07236ea680a8f66c8d37",
"tree_id": "a9a7c98557bb7a6882152d7dd89804dfcc51636d",
"distinct": false,
"message": "fix storybook workflow",
"timestamp": "2026-06-08T04:53:38-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/92781ce7891f3fe8c06a07236ea680a8f66c8d37",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-08T04:53:38-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-08T04:53:38-07:00",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml"
]
},
{
"id": "7d120f95fc33571bb42dbffe756a9640654019de",
"tree_id": "02b0a234f73df7d3aa8a5ec0ca7e19b221b24db0",
"distinct": true,
"message": "Merge branch 'develop' into 06-08-scott-use-whole-diff-summarize-in-lifecycle",
"timestamp": "2026-06-08T11:53:43Z",
"url": "https://github.com/darkmatter/nixmac/commit/7d120f95fc33571bb42dbffe756a9640654019de",
"author": {
"name": "darkmatter[bot]",
"email": "283346107+darkmatter[bot]@users.noreply.github.com",
"date": "2026-06-08T11:53:43Z",
"username": "darkmatter[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-08T11:53:43Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml",
"apps/native/src-tauri/src/evolve/edit_nix_file.rs",
"apps/native/src-tauri/src/evolve/file_ops.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/tools.rs"
]
}
],
"head_commit": {
"id": "7d120f95fc33571bb42dbffe756a9640654019de",
"tree_id": "02b0a234f73df7d3aa8a5ec0ca7e19b221b24db0",
"distinct": true,
"message": "Merge branch 'develop' into 06-08-scott-use-whole-diff-summarize-in-lifecycle",
"timestamp": "2026-06-08T11:53:43Z",
"url": "https://github.com/darkmatter/nixmac/commit/7d120f95fc33571bb42dbffe756a9640654019de",
"author": {
"name": "darkmatter[bot]",
"email": "283346107+darkmatter[bot]@users.noreply.github.com",
"date": "2026-06-08T11:53:43Z",
"username": "darkmatter[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-08T11:53:43Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml",
"apps/native/src-tauri/src/evolve/edit_nix_file.rs",
"apps/native/src-tauri/src/evolve/file_ops.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/tools.rs"
]
}
}