Payload
{
"action": "edited",
"issue": {
"url": "https://api.github.com/repos/darkmatter/nixmac/issues/124",
"repository_url": "https://api.github.com/repos/darkmatter/nixmac",
"labels_url": "https://api.github.com/repos/darkmatter/nixmac/issues/124/labels{/name}",
"comments_url": "https://api.github.com/repos/darkmatter/nixmac/issues/124/comments",
"events_url": "https://api.github.com/repos/darkmatter/nixmac/issues/124/events",
"html_url": "https://github.com/darkmatter/nixmac/issues/124",
"id": 4418527592,
"node_id": "I_kwDOSB6EzM8AAAABB11haA",
"number": 124,
"title": "[Git] Keep nix build result artifacts out of Save/commit",
"user": {
"login": "linear-code[bot]",
"id": 222613912,
"node_id": "BOT_kgDODUTRmA",
"avatar_url": "https://avatars.githubusercontent.com/in/1658531?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/linear-code%5Bbot%5D",
"html_url": "https://github.com/apps/linear-code",
"followers_url": "https://api.github.com/users/linear-code%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/linear-code%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/linear-code%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/linear-code%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/linear-code%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/linear-code%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/linear-code%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/linear-code%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/linear-code%5Bbot%5D/received_events",
"type": "Bot",
"user_view_type": "public",
"site_admin": false
},
"labels": [
{
"id": 10686173040,
"node_id": "LA_kwDOSB6EzM8AAAACfPIPcA",
"url": "https://api.github.com/repos/darkmatter/nixmac/labels/bug",
"name": "bug",
"color": "d73a4a",
"default": true,
"description": "Something isn't working"
},
{
"id": 10936169199,
"node_id": "LA_kwDOSB6EzM8AAAACi9iy7w",
"url": "https://api.github.com/repos/darkmatter/nixmac/labels/juan-sourced",
"name": "juan-sourced",
"color": "9D86FF",
"default": false,
"description": null
}
],
"state": "open",
"locked": false,
"assignees": [],
"milestone": null,
"comments": 0,
"created_at": "2026-05-11T06:22:48Z",
"updated_at": "2026-06-01T06:45:18Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"issue_field_values": [],
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "## Context\n\nJuan reported that Build leaves a top-level `result` symlink in the user's nix-darwin repo, and Save can commit it unless the repo already ignores it. Nixmac-created repos already add `result` to `.gitignore`, and editor listing already skips `result`, so existing repos should get equivalent protection without relying on user `.gitignore` edits.\n\n## Objective\n\nNixmac-generated build artifacts should not appear as user changes or be staged/committed by Save.\n\n## Acceptance Criteria\n\n- [ ] In an existing repo with no `.gitignore` entry for `result`, running Build does not show a fresh top-level `result` symlink as a user change in Review/Save.\n- [ ] Save/commit cannot stage or commit a fresh nixmac-generated top-level `result` symlink.\n- [ ] The fix does not rely on mutating the user's `.gitignore` as the only protection.\n- [ ] If `result` is already tracked by the user's repo, normal intentional git operations are not blocked.\n- [ ] Activation still works after Build. Prefer relocating the build out-link outside the worktree; if doing that, update the activation path that currently expects `result/activate`.\n- [ ] Add regression coverage for an existing repo with no `result` ignore rule.\n\n## Source\n\nJuan's 2026-05-09 nixmac review notes: Build leaves `result` in the repo and Save can commit it if the user is not careful.\n\n---\n\n## Acceptance Criteria / Gherkin Specs\n\n```gherkin\nScenario: Build result symlink does not appear as a user change in Review/Save\n Given an existing nix-darwin repo with no .gitignore entry for \"result\"\n When nixmac runs a Build that produces a top-level result symlink\n Then the result symlink does NOT appear as a pending change in the Review/Save UI\n And the user does not see it as something they committed or staged\n\nScenario: Save/commit cannot stage the result symlink\n Given a build has run and produced a result symlink in the repo root\n When the user clicks Save\n Then the result symlink is NOT included in the git staging area\n And the resulting commit does not contain the result symlink\n\nScenario: Protection does not rely solely on .gitignore\n Given the fix is implemented\n Then nixmac's git staging logic explicitly excludes the result symlink\n And the fix works even when the user's .gitignore has no \"result\" entry\n\nScenario: User-tracked result files are not blocked\n Given a user has explicitly added and tracked a file named \"result\" in their repo\n When Save runs\n Then the user's tracked result file can be staged and committed normally\n And nixmac does not block it\n\nScenario: Activation still works after Build with relocated out-link\n Given Build has been updated to relocate the out-link outside the worktree\n When Build completes and activation runs\n Then activation succeeds using the relocated path\n And the result/activate symlink path is updated to match the new location\n```",
"reactions": {
"url": "https://api.github.com/repos/darkmatter/nixmac/issues/124/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"timeline_url": "https://api.github.com/repos/darkmatter/nixmac/issues/124/timeline",
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null
},
"changes": {
"body": {
"from": "## Context\n\nJuan reported that Build leaves a top-level `result` symlink in the user's nix-darwin repo, and Save can commit it unless the repo already ignores it. Nixmac-created repos already add `result` to `.gitignore`, and editor listing already skips `result`, so existing repos should get equivalent protection without relying on user `.gitignore` edits.\n\n## Objective\n\nNixmac-generated build artifacts should not appear as user changes or be staged/committed by Save.\n\n## Acceptance Criteria\n\n- [ ] In an existing repo with no `.gitignore` entry for `result`, running Build does not show a fresh top-level `result` symlink as a user change in Review/Save.\n- [ ] Save/commit cannot stage or commit a fresh nixmac-generated top-level `result` symlink.\n- [ ] The fix does not rely on mutating the user's `.gitignore` as the only protection.\n- [ ] If `result` is already tracked by the user's repo, normal intentional git operations are not blocked.\n- [ ] Activation still works after Build. Prefer relocating the build out-link outside the worktree; if doing that, update the activation path that currently expects `result/activate`.\n- [ ] Add regression coverage for an existing repo with no `result` ignore rule.\n\n## Source\n\nJuan's 2026-05-09 nixmac review notes: Build leaves `result` in the repo and Save can commit it if the user is not careful."
}
},
"repository": {
"id": 1209959628,
"node_id": "R_kgDOSB6EzA",
"name": "nixmac",
"full_name": "darkmatter/nixmac",
"private": false,
"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",
"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": "2026-04-14T00:37:13Z",
"updated_at": "2026-06-01T06:15:50Z",
"pushed_at": "2026-06-01T06:32:03Z",
"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": 678800,
"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": 77,
"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": 77,
"watchers": 5,
"default_branch": "develop",
"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": "czxtm",
"id": 1325802,
"node_id": "MDQ6VXNlcjEzMjU4MDI=",
"avatar_url": "https://avatars.githubusercontent.com/u/1325802?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/czxtm",
"html_url": "https://github.com/czxtm",
"followers_url": "https://api.github.com/users/czxtm/followers",
"following_url": "https://api.github.com/users/czxtm/following{/other_user}",
"gists_url": "https://api.github.com/users/czxtm/gists{/gist_id}",
"starred_url": "https://api.github.com/users/czxtm/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/czxtm/subscriptions",
"organizations_url": "https://api.github.com/users/czxtm/orgs",
"repos_url": "https://api.github.com/users/czxtm/repos",
"events_url": "https://api.github.com/users/czxtm/events{/privacy}",
"received_events_url": "https://api.github.com/users/czxtm/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
}
}