Payload
{
"ref": "refs/heads/jp/fix-merge-pr-255",
"before": "9be67b719bcce760ef21e5d01cf26eae6e65ae7b",
"after": "8a19689e611b01a516272c115478e4dfdecd266f",
"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-03T06:35:32Z",
"pushed_at": 1780488832,
"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": 679363,
"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": 68,
"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": 68,
"watchers": 5,
"default_branch": "develop",
"stargazers": 5,
"master_branch": "develop",
"organization": "darkmatter",
"custom_properties": {}
},
"pusher": {
"name": "arximboldi",
"email": "juanpe@sinusoid.es"
},
"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-05-09T15:34:55Z"
},
"sender": {
"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
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
},
"created": false,
"deleted": false,
"base_ref": null,
"compare": "https://github.com/darkmatter/nixmac/compare/9be67b719bcc...8a19689e611b",
"commits": [
{
"id": "2b829a32b12fc836ae7e9ec6b2acd6d04dd3f460",
"tree_id": "8188b5b68d565abf7d1c8f7e3edb53844b254a20",
"distinct": false,
"message": "chore(beads): nixmac-srn nightly release feature",
"timestamp": "2026-05-24T01:10:18-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/2b829a32b12fc836ae7e9ec6b2acd6d04dd3f460",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:10:18-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:10:18-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "ead289e77e8b9fdf70d1685c73c8eb3fdc91f2fb",
"tree_id": "a4f5e4c89945528e1486fba3effb2ca2a5bfbf44",
"distinct": false,
"message": "chore(beads): record PR #195 on nixmac-srn",
"timestamp": "2026-05-24T01:10:47-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/ead289e77e8b9fdf70d1685c73c8eb3fdc91f2fb",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:10:47-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:10:47-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "9947f9ccb5e0f6b181eab543b392f2e918b16c97",
"tree_id": "f792a9b77a6c40d04aba9450a9d32c2b0f5352a0",
"distinct": false,
"message": "chore(beads): file nixmac-62s (TS build blocker) discovered triaging PR #195",
"timestamp": "2026-05-24T01:13:57-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/9947f9ccb5e0f6b181eab543b392f2e918b16c97",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:13:57-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T01:13:57-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "f8fa372ae89067398da3a2afc1c7fde144be0ed2",
"tree_id": "b0c3fbb27662b5e124e52cc605490abc432d10e0",
"distinct": false,
"message": "chore(beads): nixmac-srn shipping depends on nixmac-62s (TS build fix)",
"timestamp": "2026-05-24T02:14:42-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/f8fa372ae89067398da3a2afc1c7fde144be0ed2",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:14:42-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:14:42-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "44780754dceec309f1253eb3875af84346e65bf3",
"tree_id": "b1652a9f1649df1bb6d61afbaa1d07bb873e19b3",
"distinct": false,
"message": "fix(native): drop unused Plus and DropdownMenu imports (nixmac-62s)\n\nBoth imports were only referenced inside JSX comments, so tsc flagged\nthem (TS6133/TS6192) and broke the build check on main since bd658afc.\n\nThe env.ts BooleanFromString errors mentioned in the issue do not\nreproduce: apps/native resolves effect to 3.21.0 (transitive) which\nstill exports BooleanFromString. Only the root workspace pulls\neffect@4.0.0-beta.62, but env.ts lives under apps/native.\n\nCloses nixmac-62s.",
"timestamp": "2026-05-24T02:21:18-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/44780754dceec309f1253eb3875af84346e65bf3",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:21:18-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:21:18-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl",
"apps/native/src/components/widget/promptinput/prompt-input.tsx"
]
},
{
"id": "c6b7b8377be45e9e7d7b259b2304d2637f07ee99",
"tree_id": "c9c241739759b3abdf80cd5061a6df5e4cc4d773",
"distinct": false,
"message": "chore(beads): close nixmac-62s",
"timestamp": "2026-05-24T02:21:36-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/c6b7b8377be45e9e7d7b259b2304d2637f07ee99",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:21:36-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T02:21:36-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "9cc241183e2c47300612a039486aac29af81589f",
"tree_id": "94db462f218213750746be02ec64cedf2b0d5886",
"distinct": false,
"message": "fix(native): migrate env.ts off Schema.BooleanFromString (effect 4.0)\n\nThe repo's bun.lock pins effect@4.0.0-beta.62 (no transitive effect@3.x).\n4.0 removed Schema.BooleanFromString — which env.ts was using — so a\nfresh `bun install --frozen-lockfile` (what CI does) produces a tree\nwhere the import fails to compile. The earlier \"doesn't reproduce\nlocally\" diagnosis on nixmac-62s was misled by a stale symlink at\napps/native/node_modules/effect pointing into node_modules/.bun/effect@3.21.0/\nleft over from an older install run. Locally tsc resolved against the\nstale 3.x version, where BooleanFromString still exists.\n\nMigration:\n- Replace `Schema.BooleanFromString` with\n `Schema.Literals([\"true\", \"false\"])` (4.0's plural array form; 3.x had\n variadic `Schema.Literal(...)` — these are not interchangeable).\n- Coerce the validated string to `boolean | undefined` in code so the\n exported settings type matches the old BooleanFromString shape and\n downstream consumers (utils.ts:19's `!== true` check) don't need to\n change.\n- Drop the auto-derived `Schema.Schema.Type<typeof Settings>` because\n the runtime shape we expose (with the string→bool coercion) differs\n from the decoded shape.\n\nStrict parsing is preserved: any value other than \"true\"/\"false\" still\nfails at decode time, same as the original.\n\nNote: existing local installs with a stale apps/native/node_modules/effect\nsymlink will need `bun install` to refresh — the stale 3.x effect doesn't\nhave `Schema.Literals` (plural). One-time cost; matches CI from then on.\n\nRefs nixmac-62s.",
"timestamp": "2026-05-24T03:21:52-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/9cc241183e2c47300612a039486aac29af81589f",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:21:52-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:21:52-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src/lib/env.ts"
]
},
{
"id": "75f5af73cdcff23ec5923c4fc77ce97d384ac021",
"tree_id": "c2c0ef59a8131365508e1af8a80a8776ca372fb0",
"distinct": false,
"message": "chore(beads): file nixmac-rva (Storybook flake) + link as nixmac-srn blocker",
"timestamp": "2026-05-24T03:28:48-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/75f5af73cdcff23ec5923c4fc77ce97d384ac021",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:28:48-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:28:48-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "6a64a3061ba2c31451e5d54763a313b7eee802fe",
"tree_id": "0e42029133f260972dd631a234935479ec87c6e2",
"distinct": false,
"message": "chore(beads): file nixmac-cmu (Rust dead_code) + link as nixmac-srn blocker",
"timestamp": "2026-05-24T03:39:02-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/6a64a3061ba2c31451e5d54763a313b7eee802fe",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:39:02-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T03:39:02-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "2a78934d07137def048d06572ef1459a421bdd38",
"tree_id": "09514cab61b7ceb9b01b917f17641ff9e26c6b73",
"distinct": false,
"message": "Apply suggestions from code review\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"timestamp": "2026-05-24T09:29:22-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/2a78934d07137def048d06572ef1459a421bdd38",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-05-24T09:29:22-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-05-24T09:29:22-07:00",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src/lib/env.ts"
]
},
{
"id": "691a36bb9adcdb17f61a0c92b3c5e784cc7271cd",
"tree_id": "5d3520c28e4c53df00b2f700982bddcf0599cdec",
"distinct": false,
"message": "Merge remote-tracking branch 'origin/develop'",
"timestamp": "2026-05-24T09:35:26-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/691a36bb9adcdb17f61a0c92b3c5e784cc7271cd",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:35:26-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:35:26-07:00",
"username": "czxtm"
},
"added": [
"apps/native/.storybook/mocks/ipc-api.ts",
"apps/native/e2e-tauri/tests/wdio/helpers/diff-row-ui.ts",
"apps/native/e2e-tauri/tests/wdio/manual-changes.spec.ts",
"apps/native/e2e-tauri/wdio.manual-changes.conf.mjs",
"apps/native/src/README.md",
"apps/native/src/components/nix-editor/__snapshots__/nix-editor.stories.tsx.snap",
"apps/native/src/components/nix-editor/index.tsx",
"apps/native/src/components/nix-editor/nix-editor.stories.tsx",
"apps/native/src/components/nix-editor/use-nix-editor.test.ts",
"apps/native/src/components/nix-editor/use-nix-editor.ts",
"apps/native/src/components/widget/layout/AppFatalFallback.stories.tsx",
"apps/native/src/components/widget/layout/AppFatalFallback.tsx",
"apps/native/src/components/widget/layout/__snapshots__/AppFatalFallback.stories.tsx.snap",
"apps/native/src/components/widget/settings/general-tab.test.tsx",
"apps/native/src/components/widget/summaries/__snapshots__/collapsible-diff.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/diff-section.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/diff-view.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/file-view.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/full-file-diff-editor.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/hunk-pill.stories.tsx.snap",
"apps/native/src/components/widget/summaries/collapsible-diff.stories.tsx",
"apps/native/src/components/widget/summaries/collapsible-diff.tsx",
"apps/native/src/components/widget/summaries/diff-section.stories.tsx",
"apps/native/src/components/widget/summaries/diff-section.tsx",
"apps/native/src/components/widget/summaries/diff-view.stories.tsx",
"apps/native/src/components/widget/summaries/diff-view.tsx",
"apps/native/src/components/widget/summaries/file-view.stories.tsx",
"apps/native/src/components/widget/summaries/file-view.tsx",
"apps/native/src/components/widget/summaries/full-file-diff-editor.stories.tsx",
"apps/native/src/components/widget/summaries/full-file-diff-editor.tsx",
"apps/native/src/components/widget/summaries/hunk-pill.stories.tsx",
"apps/native/src/components/widget/summaries/hunk-pill.tsx",
"apps/native/src/components/widget/summaries/monaco-setup.ts",
"apps/native/src/components/widget/summaries/monaco-theme.ts",
"apps/native/src/e2e/boot-harness.ts",
"apps/native/src/e2e/dom-snapshots.ts",
"apps/native/src/hooks/use-feedback-on-recovery.ts",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/sqlite.ts",
"apps/native/src/ipc/types.ts",
"apps/native/src/lib/boot-diagnostics.ts",
"apps/native/src/lib/constants.ts",
"apps/native/src/lib/sentry/init.ts",
"apps/native/src/lib/sentry/sanitize.test.ts",
"apps/native/src/lib/sentry/sanitize.ts"
],
"removed": [
"apps/native/.storybook/mocks/tauri-api.ts",
"apps/native/src/components/kibo-ui/code-block/__snapshots__/code-block.stories.tsx.snap",
"apps/native/src/components/kibo-ui/code-block/code-block.stories.tsx",
"apps/native/src/components/kibo-ui/code-block/index.tsx",
"apps/native/src/components/kibo-ui/code-block/server.tsx",
"apps/native/src/components/kibo-ui/nix-editor/__snapshots__/nix-editor.stories.tsx.snap",
"apps/native/src/components/kibo-ui/nix-editor/index.tsx",
"apps/native/src/components/kibo-ui/nix-editor/nix-editor.stories.tsx",
"apps/native/src/components/kibo-ui/nix-editor/use-nix-editor.test.ts",
"apps/native/src/components/kibo-ui/nix-editor/use-nix-editor.ts",
"apps/native/src/components/kibo-ui/tree/index.tsx",
"apps/native/src/components/widget/summaries/diff.tsx",
"apps/native/src/lib/e2e-boot-diagnostics.ts",
"apps/native/src/tauri-api.ts",
"apps/native/src/types/shared.ts",
"apps/native/src/types/sqlite.ts"
],
"modified": [
".github/workflows/build.yaml",
".github/workflows/computer-use-e2e.yml",
".github/workflows/e2e.yml",
".github/workflows/peekaboo-e2e.yml",
".oxlintrc.json",
"Cargo.lock",
"README.md",
"apps/native/.storybook/main.ts",
"apps/native/.storybook/mocks/tauri-runtime.ts",
"apps/native/.storybook/vitest.setup.ts",
"apps/native/package.json",
"apps/native/scripts/run-wdio-tests.mjs",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/build.rs",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/prompts/system.md",
"apps/native/src-tauri/src/README.md",
"apps/native/src-tauri/src/cli.rs",
"apps/native/src-tauri/src/commands/apply.rs",
"apps/native/src-tauri/src/commands/debug.rs",
"apps/native/src-tauri/src/commands/editor.rs",
"apps/native/src-tauri/src/commands/evolve.rs",
"apps/native/src-tauri/src/commands/git.rs",
"apps/native/src-tauri/src/commands/helpers.rs",
"apps/native/src-tauri/src/commands/permissions.rs",
"apps/native/src-tauri/src/commands/ui_prefs.rs",
"apps/native/src-tauri/src/commands/updater.rs",
"apps/native/src-tauri/src/db/mod.rs",
"apps/native/src-tauri/src/e2e_runtime.rs",
"apps/native/src-tauri/src/editor/lsp.rs",
"apps/native/src-tauri/src/editor/mod.rs",
"apps/native/src-tauri/src/evolve/edit_nix_file.rs",
"apps/native/src-tauri/src/evolve/ensure_secret.rs",
"apps/native/src-tauri/src/evolve/lifecycle.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/search_docs.rs",
"apps/native/src-tauri/src/evolve/search_packages.rs",
"apps/native/src-tauri/src/evolve/session_control.rs",
"apps/native/src-tauri/src/evolve/tools.rs",
"apps/native/src-tauri/src/feedback.rs",
"apps/native/src-tauri/src/git/exec.rs",
"apps/native/src-tauri/src/git/mod.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/managed_edits/managed_edit.rs",
"apps/native/src-tauri/src/shared_types/evolve.rs",
"apps/native/src-tauri/src/shared_types/feedback.rs",
"apps/native/src-tauri/src/shared_types/git.rs",
"apps/native/src-tauri/src/shared_types/prefs.rs",
"apps/native/src-tauri/src/shared_types/system.rs",
"apps/native/src-tauri/src/state/evolve_state.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src-tauri/src/system/nix.rs",
"apps/native/src-tauri/src/system/permissions.rs",
"apps/native/src-tauri/src/system/secret_scanner.rs",
"apps/native/src-tauri/src/updater_pin/mod.rs",
"apps/native/src-tauri/src/utils.rs",
"apps/native/src/App.tsx",
"apps/native/src/components/ui/__snapshots__/command.stories.tsx.snap",
"apps/native/src/components/ui/__snapshots__/tooltip.stories.tsx.snap",
"apps/native/src/components/widget/__snapshots__/widget.stories.tsx.snap",
"apps/native/src/components/widget/controls/bootstrap-config.tsx",
"apps/native/src/components/widget/controls/directory-picker.test.tsx",
"apps/native/src/components/widget/controls/directory-picker.tsx",
"apps/native/src/components/widget/controls/model-combobox.tsx",
"apps/native/src/components/widget/evolve-flow.stories.tsx",
"apps/native/src/components/widget/feedback/feedback-dialog.tsx",
"apps/native/src/components/widget/history/change-badges.tsx",
"apps/native/src/components/widget/history/history-item-card.tsx",
"apps/native/src/components/widget/history/history-item-expanded-detail.tsx",
"apps/native/src/components/widget/history/history-item-meta.tsx",
"apps/native/src/components/widget/layout/debug-overlay.tsx",
"apps/native/src/components/widget/layout/error-message.tsx",
"apps/native/src/components/widget/overlays/__snapshots__/rebuild-overlay-panel.stories.tsx.snap",
"apps/native/src/components/widget/overlays/editor-panel.tsx",
"apps/native/src/components/widget/overlays/evolve-overlay-panel.tsx",
"apps/native/src/components/widget/overlays/evolve-progress.stories.tsx",
"apps/native/src/components/widget/overlays/evolve-progress.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.tsx",
"apps/native/src/components/widget/settings/__snapshots__/developer-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/ai-models-tab.tsx",
"apps/native/src/components/widget/settings/developer-tab.stories.tsx",
"apps/native/src/components/widget/settings/developer-tab.tsx",
"apps/native/src/components/widget/settings/general-tab.tsx",
"apps/native/src/components/widget/settings/preferences-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/components/widget/steps/permissions-step.tsx",
"apps/native/src/components/widget/summaries/own-summary-item.tsx",
"apps/native/src/components/widget/summaries/singles-section.tsx",
"apps/native/src/components/widget/summaries/summary-group-header.tsx",
"apps/native/src/components/widget/summaries/summary-group.tsx",
"apps/native/src/components/widget/summaries/summary-items.test.tsx",
"apps/native/src/components/widget/summaries/summary-items.tsx",
"apps/native/src/components/widget/summaries/summary-or-diff.tsx",
"apps/native/src/components/widget/summaries/unsummarized-changes-section.stories.tsx",
"apps/native/src/components/widget/summaries/unsummarized-changes-section.tsx",
"apps/native/src/components/widget/utils.test.ts",
"apps/native/src/components/widget/utils.ts",
"apps/native/src/components/widget/widget.stories.tsx",
"apps/native/src/components/widget/widget.test.tsx",
"apps/native/src/components/widget/widget.tsx",
"apps/native/src/hooks/use-apply.ts",
"apps/native/src/hooks/use-darwin-config.ts",
"apps/native/src/hooks/use-evolve.ts",
"apps/native/src/hooks/use-git-operations.ts",
"apps/native/src/hooks/use-history-card.ts",
"apps/native/src/hooks/use-history-restore.ts",
"apps/native/src/hooks/use-history.ts",
"apps/native/src/hooks/use-homebrew-diff.ts",
"apps/native/src/hooks/use-nix-install.ts",
"apps/native/src/hooks/use-panic-handler.ts",
"apps/native/src/hooks/use-permissions.test.ts",
"apps/native/src/hooks/use-permissions.ts",
"apps/native/src/hooks/use-prefs.ts",
"apps/native/src/hooks/use-preview-indicator.ts",
"apps/native/src/hooks/use-prompt-history.ts",
"apps/native/src/hooks/use-queue-summarizer.ts",
"apps/native/src/hooks/use-rebuild-stream.ts",
"apps/native/src/hooks/use-recommended-prompt.ts",
"apps/native/src/hooks/use-rollback.ts",
"apps/native/src/hooks/use-summary.ts",
"apps/native/src/hooks/use-updater.ts",
"apps/native/src/hooks/use-watcher.ts",
"apps/native/src/hooks/use-widget-initialization.ts",
"apps/native/src/index.css",
"apps/native/src/lib/ai-provider-validation.ts",
"apps/native/src/lib/lsp-client.ts",
"apps/native/src/lib/nix-grammar.ts",
"apps/native/src/main.tsx",
"apps/native/src/preview-indicator-window.tsx",
"apps/native/src/stores/__mocks__/widget-store.ts",
"apps/native/src/stores/widget-store.impl.ts",
"apps/native/src/stores/widget-store.test.ts",
"apps/native/src/types/feedback.ts",
"apps/native/src/utils/widget-test-helpers.ts",
"apps/native/tailwind.config.js",
"apps/native/templates/nix-darwin-determinate/.gitignore",
"apps/native/templates/nix-darwin-determinate/flake.nix",
"bun.lock",
"bun.nix",
"knip.json",
"ops/scripts/release/compute-version.sh",
"ops/scripts/release/sync-version.sh",
"ops/scripts/release/upload-r2.sh",
"package.json",
"tools/computer-use-e2e/README.md",
"tools/computer-use-e2e/peekaboo-workflow-contract-self-test.mjs",
"tools/computer-use-e2e/run-local.mjs"
]
},
{
"id": "0895711d9b732eb623e64d5d2069d93f4ddfd50e",
"tree_id": "3648f8fcd2d2df74e0d22fff07373f0afbc81802",
"distinct": false,
"message": "chore(beads): file nixmac-k8d (Monaco platform drift) + link as nixmac-srn blocker",
"timestamp": "2026-05-24T09:43:54-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/0895711d9b732eb623e64d5d2069d93f4ddfd50e",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:43:54-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:43:54-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "109149d26b5a364be1d5e65231a814d831bea127",
"tree_id": "cb0b4fd32372adb102becfd8360786954ae2673f",
"distinct": false,
"message": "fix(beads): clean up stash-conflict markers in issues.jsonl\n\nPrevious commit 0895711d accidentally included unresolved 'Updated upstream\n/ Stashed changes' markers from a botched git stash pop. Re-exporting via\nbd export produces the correct merged state including nixmac-k8d as the\nfourth nixmac-srn blocker.",
"timestamp": "2026-05-24T09:45:24-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/109149d26b5a364be1d5e65231a814d831bea127",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:45:24-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-05-24T09:45:24-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".beads/issues.jsonl"
]
},
{
"id": "f3af03920c280aa0334f22f92ca89d2c99559a61",
"tree_id": "7ec0338a26d9411d55f4cb23c5f83066eded9a25",
"distinct": false,
"message": "feat(ci): nightly develop→main release with minor version bump (#195)\n\n* feat(ci): nightly develop→main release with minor version bump\n\nAdds a GitHub Actions cron (09:00 UTC daily) that merges develop into\nmain and tags a vMAJ.(MIN+1).0 release. Exits silently when develop has\nno new commits vs main.\n\nThe actual ship work is delegated to build.yaml's existing `tag` mode —\nthe nightly job just produces the merge commit and the tag, then atomically\npushes both. compute-version.sh gets a small defensive edit: when HEAD is\nalready tagged with a v* tag, `release` mode is demoted to `branch` so the\nmain-push event doesn't trigger a duplicate (patch-bumped) ship alongside\nthe tag-push event.\n\nPrerequisites for the cron to push successfully:\n- RELEASE_BOT_TOKEN secret (PAT with bypass), OR\n- repo ruleset bypass for github-actions[bot] on main\n\nWithout either, `git push --atomic` fails on the protected main branch.\nWorkflow falls back to GITHUB_TOKEN so cron + script wiring can be tested\nbefore bypass is granted.\n\nFiles:\n- .github/workflows/nightly-release.yaml (new)\n- ops/scripts/release/nightly-release.sh (new; supports DRY_RUN=1)\n- ops/scripts/release/compute-version.sh (tag-aware release-mode skip)\n\n* feat(ci): scope nightly release trigger to native build affecteds\n\nReplace the simple \"any commit on develop\" trigger with the no-turbo\nequivalent of `turbo run build --affected --filter=native`. Releases now\nfire only when develop has changes inside the native workspace, its\ntransitive workspace deps (currently @nixmac/ui), or global build inputs\n(root package.json, bun.lock, root tsconfig, Cargo.toml/lock).\n\nThis skips nights where develop only got CI/docs/release-script changes\nso a minor version isn't burned on commits that wouldn't ship anything\ndifferent to users.\n\nAdds ops/scripts/release/affected-paths.mjs which dynamically resolves\nthe affected path set by reading the root workspaces config and walking\nworkspace:* deps — no hardcoded list to maintain when new packages\nappear.\n\nVerified locally:\n- Real diff (apps/native/*, Cargo.lock, etc.): release\n- Synthetic diff (ops/, .github/, docs/, *.md): skip\n- Synthetic diff (bun.lock only): release (global input)\n\n* fix(ci): address Copilot review feedback on nightly-release\n\n- next_minor_version: filter to stable vMAJ.MIN.PATCH only so disposable\n -test.N tags (used by build.yaml for signing rehearsals) can't pollute\n the bump base\n- Remote tag existence check: use `git ls-remote --exit-code` with an\n exact ref pattern instead of `grep -q \"${tag}\"`, which would false-\n positive when a longer tag like v1.2.0-test.1 contains the candidate\n as a substring\n- Docstring: align step 2 with actual behavior (logs a one-liner then\n exits 0, not strictly silent)\n- Workflow: add concurrency group so a scheduled run + manual dispatch\n can't race on the same next-tag computation. cancel-in-progress=false\n to avoid aborting a half-completed merge+tag mid-flight\n\n* docs(ci): align skip-message wording with affected-paths policy\n\nCopilot follow-up: three places still described the skip condition as\n\"no new commits vs main\" or \"skip silently\". The actual policy is the\naffected-paths filter (no-turbo equivalent of\n`turbo run build --affected --filter=native`), which can return false\neven when develop has commits — they just don't touch the native build\ngraph.\n\n- should_release docstring: \"skip silently\" → \"skip (caller logs reason)\"\n- main() skip log: \"develop has no new work\" → \"no changes affect the\n native build graph\"\n- workflow header: \"no new commits vs main\" → explanation of the\n affected-paths filter and what kinds of develop activity will no-op\n\nNo behavior change.\n\n* fix(ci): nightly-release cwd-independence and ..→... range\n\nCopilot follow-up. Two real bugs:\n\n1. The script claimed cwd-independence via REPO_ROOT but only used it for\n the affected-paths.mjs invocation. Every git command and the\n `node -p require('./package.json')` fallback ran relative to the\n caller's cwd, so invoking the script from anywhere other than the\n repo root would fail. main() now `cd`s into REPO_ROOT before doing\n any work, which makes the cwd-independence claim actually true.\n\n2. should_release used `git diff origin/main..origin/develop` (two-dot\n range), which is tip-to-tip. If main has a hotfix not on develop,\n two-dot treats it as a develop-side deletion and flags it as a\n change — falsely triggering a release every night until the hotfix\n gets merged back. Three-dot (`origin/main...origin/develop`) diffs\n from the merge-base, so only commits new on develop are counted.\n\nVerified locally: running the script from /tmp now produces the same\ndry-run plan as running from the repo root. Two-dot vs three-dot on\ncurrent origin/main vs origin/develop differs by one file, confirming\nthere is currently a hotfix-style commit on main that the old check\nwould have erroneously counted.\n\n* docs/fix(ci): nightly-release token fallback + optional-env docstring\n\nCopilot follow-up:\n\n1. Workflow checkout's token fallback used `secrets.GITHUB_TOKEN` as the\n `||` second operand. While that *does* work in normal expression\n contexts (it's GitHub's documented way to reference the auto-injected\n token), the `github.token` context form is more reliable in fallback\n positions and `if:` evaluations. Switched to\n `secrets.RELEASE_BOT_TOKEN || github.token` for that defensive reason.\n\n2. Header docstring claimed GIT_USER_NAME / GIT_USER_EMAIL were \"Required\n env\" but the code uses `if [[ -n \"${VAR:-}\" ]]` guards and silently\n skips git config when unset. They're actually optional CI overrides\n that fall back to the caller's existing git config — fine for local\n rehearsals, expected to be set in CI for bot-identity attribution.\n Updated the comment to match the actual code.\n\nNo behavior change.\n\n* fix(ci): defensive Copilot follow-ups on nightly-release\n\n1. DRY_RUN expression now gates on `github.event_name == 'workflow_dispatch'`\n before reading `inputs.dry_run`. The `inputs.*` context is only\n populated for dispatch events; gating ensures scheduled cron runs\n always get '0' regardless of how GitHub resolves missing-input refs.\n\n2. compute-version.sh tag-skip regex now anchored with `$` so disposable\n `v0.22.0-test.N` tags (used for signing/notarization rehearsals)\n don't suppress legitimate `main`-push releases. Test tags don't ship\n (publish/R2/Linear steps in build.yaml skip them), so main-push must\n still bump+ship normally if such a tag happens to be at HEAD.\n Verified: `v1.2.3` matches the regex (correctly skips release mode),\n `v1.2.3-test.1` does not match (correctly does not suppress).\n\n3. affected-paths.mjs now normalizes `package.json#workspaces` to handle\n both the npm/bun array form and the Yarn object form\n (`{ packages: [...] }`). nixmac uses the array form today; supporting\n both is cheap future-proofing if the repo ever switches package\n manager.\n\n* docs/fix(ci): nightly-release docstring + unconditional fetch\n\nCopilot follow-up:\n\n1. Header step 4 said \"Fast-forward / no-ff merge\" but the implementation\n always uses `git merge --no-ff`. Updated the comment to match the\n actual behavior (always produces a merge commit so the release\n boundary stays visible in git log --first-parent).\n\n2. `git fetch` was DRY_RUN-gated, but should_release and\n next_minor_version both query local refs (origin/main..origin/develop\n diff + `git tag --list` for the latest stable). On a stale checkout\n the dry-run could compute a wrong next version or false-positive\n \"nothing to release\". Unwrap the fetch from `run` so it always\n executes — fetch is read-only from the project's perspective (only\n updates local origin/* refs), so unconditional execution is safe and\n makes dry-run output reflect real remote state.\n\nVerified: the unconditional fetch pulled a fresh v0.23.2 tag on this\nrun that the local checkout didn't have, validating the fix on its\nfirst execution.\n\n* fix(native): fix Chromatic Storybook\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\n\n* fix(native): env.ts — drop version-skewed Schema.Literal for plain String\n\nPR #195 build broke at TS2554 (\"Expected 1 arguments, but got 2\") after\n80a19c67 reverted NIX_INSTALLED_OVERRIDE from `Schema.Literals([...])` to\n`Schema.Literal(...)` (variadic). The problem: `Schema.Literal`'s signature\nis fundamentally version-skewed —\n\n effect 3.x: `Literal<L>(...values: L)` variadic, multi-value\n effect 4.0-beta: `Literal<L>(value: L)` single value only,\n use `Literals([...])` for sets\n\nSo neither form source-compiles in both:\n\n- `Schema.Literal(\"true\", \"false\")` works in 3.x, fails 4.0 (this PR)\n- `Schema.Literals([\"true\", \"false\"])` works in 4.0, fails 3.x (Chromatic)\n\nThe repo's lockfile pins effect 4.0-beta, so tsc sees that — but the\nChromatic/storybook test environment can resolve 3.x via workspace\nsymlink hoisting, which is why 80a19c67 picked the 3.x form to fix\nChromatic and broke the build instead.\n\nFix: validate with plain `Schema.String` (signature is identical across\nversions) and coerce to boolean in code via\n`raw.NIX_INSTALLED_OVERRIDE === \"true\" ? true : undefined`. The only\ndownstream consumer is `settings.NIX_INSTALLED_OVERRIDE !== true` in\nwidget/utils.ts, which treats any non-\"true\" value as functionally\nfalse — so silent acceptance of unexpected strings is observationally\nequivalent to coercing them to undefined. We lose schema-level\n\"must be 'true' or 'false'\" strictness; we gain working CI on both\nthe build and Chromatic paths.\n\nVerified against both effect@3.21.0 and effect@4.0.0-beta.62 symlinks\nin isolation: no TS2554, no missing-Literals errors.\n\n* fix(ci): nightly-release DRY_RUN final-message clarity\n\nCopilot follow-up: the final `echo \"Released ${tag}\"` ran unconditionally,\nso workflow_dispatch dry-runs printed \"Released v0.24.0\" even though the\nmerge/tag/push steps were only echoed. Now branches on DRY_RUN: prints\n\"Dry run complete — would have released ${tag}\" in dry mode, \"Released\n${tag}\" in real mode. Behavior preserved; just the operator-facing log\nline distinguishes the two modes.\n\nDid not touch the `local changed paths file path` declaration in\nshould_release — Copilots claim that `path` is unused is incorrect.\n`path` is the inner loops read variable on line 85 and is used in the\npath-matching comparisons on lines 87, 89, 91, and 92.\n\n* fix(ci): nightly-release working-tree guard + setup-node pin\n\nCopilot follow-up:\n\n1. Add a clean-working-tree guard before the destructive `git reset --hard\n origin/${MAIN_BRANCH}`. Local accidental invocations would otherwise\n silently obliterate uncommitted work. CI runners start clean by\n construction so the guard never fires in CI; DRY_RUN=1 bypasses it\n since dry-mode does not mutate the tree. Error path prints\n `git status --short` so the operator can see what would have been lost.\n\n2. Add an actions/setup-node@v6 step pinned to node-version: 20 (matching\n build.yaml's convention). The release script invokes node for\n affected-paths.mjs and the package.json version fallback in\n next_minor_version. Without an explicit pin the cron would depend on\n whatever node the ubuntu-latest runner image ships, which is not stable\n across image updates.\n\nVerified: bash -n passes, dry-run still works, guard simulation triggers\ncorrectly on dirty tree and stays out of the way in DRY_RUN=1.\n\n---------\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
"timestamp": "2026-05-24T19:00:17-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/f3af03920c280aa0334f22f92ca89d2c99559a61",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-05-24T19:00:17-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-05-24T19:00:17-07:00",
"username": "web-flow"
},
"added": [
".github/workflows/nightly-release.yaml",
"ops/scripts/release/affected-paths.mjs",
"ops/scripts/release/nightly-release.sh"
],
"removed": [],
"modified": [
"apps/native/.gitignore",
"apps/native/src/lib/env.ts",
"ops/scripts/release/compute-version.sh"
]
},
{
"id": "799c08a111578818f909f907813df5f559d86908",
"tree_id": "17dece7235a2b2839032961412675e166250ef7c",
"distinct": false,
"message": "Merge PR #228\n\nimplement derive(Configurable) macro",
"timestamp": "2026-06-02T03:40:57-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/799c08a111578818f909f907813df5f559d86908",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-02T03:40:57-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T03:40:57-07:00",
"username": "web-flow"
},
"added": [
"apps/native/src-tauri/configurable-derive/Cargo.toml",
"apps/native/src-tauri/configurable-derive/src/lib.rs",
"apps/native/src-tauri/configurable/Cargo.toml",
"apps/native/src-tauri/configurable/src/lib.rs",
"apps/native/src-tauri/src/evolve/config.rs"
],
"removed": [],
"modified": [
".beads/issues.jsonl",
"Cargo.lock",
"Cargo.toml",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/src/bootstrap/default_config.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/peek.rs",
"scripts/sync-versions.mjs"
]
},
{
"id": "4c93f58b1add81002dc703590e12e9f89ab3304e",
"tree_id": "45d801828a5a9ce786d8f2aa90c30ac8c9e14a9b",
"distinct": false,
"message": "Merge PR #247\n\nfeat(db): add Diesel pool and table models",
"timestamp": "2026-06-02T03:41:08-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/4c93f58b1add81002dc703590e12e9f89ab3304e",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-02T03:41:08-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T03:41:08-07:00",
"username": "web-flow"
},
"added": [
"apps/native/src-tauri/src/db/pool.rs",
"apps/native/src-tauri/src/db/tables.rs"
],
"removed": [],
"modified": [
"Cargo.lock",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/src/db/commits.rs",
"apps/native/src-tauri/src/db/mod.rs",
"apps/native/src-tauri/src/db/schema.rs"
]
},
{
"id": "5805a7b95c9c3f36dc9f161fad6563caecdbbf67",
"tree_id": "45d801828a5a9ce786d8f2aa90c30ac8c9e14a9b",
"distinct": false,
"message": "Merge PR #246\n\nfeat(state): add scoped slice persistence",
"timestamp": "2026-06-02T03:45:40-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/5805a7b95c9c3f36dc9f161fad6563caecdbbf67",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-02T03:45:40-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T03:45:40-07:00",
"username": "web-flow"
},
"added": [
".beads/issues.json",
"apps/native/src-tauri/configurable-derive/src/attrs.rs",
"apps/native/src-tauri/configurable-derive/src/codegen.rs",
"apps/native/src-tauri/configurable-derive/src/fields.rs",
"apps/native/src-tauri/configurable-derive/src/strings.rs",
"apps/native/src-tauri/configurable-derive/src/types.rs",
"apps/native/src-tauri/src/commands/dev_configs.rs",
"apps/native/src-tauri/src/commands/settings_io.rs",
"apps/native/src-tauri/src/db/pool.rs",
"apps/native/src-tauri/src/db/tables.rs",
"apps/native/src-tauri/src/shared_types/settings_io.rs",
"apps/native/src-tauri/src/state/preferences.rs",
"apps/native/src-tauri/src/state/slice/json_io.rs",
"apps/native/src-tauri/src/state/slice/mod.rs",
"apps/native/src-tauri/src/state/slice/persistence.rs",
"apps/native/src-tauri/src/state/slice/registry.rs",
"apps/native/src-tauri/src/storage/configurable_scope.rs",
"apps/native/src/components/widget/settings/__snapshots__/auto-config-field.stories.tsx.snap",
"apps/native/src/components/widget/settings/__snapshots__/auto-tuning-section.stories.tsx.snap",
"apps/native/src/components/widget/settings/auto-config-field.stories.tsx",
"apps/native/src/components/widget/settings/auto-config-field.tsx",
"apps/native/src/components/widget/settings/auto-tuning-section.stories.tsx",
"apps/native/src/components/widget/settings/auto-tuning-section.tsx",
"docs/2026-05-29-state-management-migration-plan.md"
],
"removed": [],
"modified": [
".github/PULL_REQUEST_TEMPLATE.md",
"Cargo.lock",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/configurable-derive/src/lib.rs",
"apps/native/src-tauri/configurable/Cargo.toml",
"apps/native/src-tauri/configurable/src/lib.rs",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/src/commands/config.rs",
"apps/native/src-tauri/src/commands/mod.rs",
"apps/native/src-tauri/src/db/commits.rs",
"apps/native/src-tauri/src/db/mod.rs",
"apps/native/src-tauri/src/db/schema.rs",
"apps/native/src-tauri/src/evolve/config.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/shared_types.rs",
"apps/native/src-tauri/src/state/evolve_state.rs",
"apps/native/src-tauri/src/state/mod.rs",
"apps/native/src-tauri/src/state/watcher.rs",
"apps/native/src-tauri/src/storage/mod.rs",
"apps/native/src-tauri/src/storage/store.rs",
"dangerfile.ts"
]
},
{
"id": "696af4136dec67f7970990f77c18be816e608a4a",
"tree_id": "7ab86d2de29ffb43d13c24769e285d1a3b0f51f5",
"distinct": false,
"message": "fix: chromatic token",
"timestamp": "2026-06-02T04:44:09-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/696af4136dec67f7970990f77c18be816e608a4a",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T04:44:09-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T04:44:09-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"ops/secrets/secrets.yaml"
]
},
{
"id": "903649f3018caba491f654ae7afebb390b3e0674",
"tree_id": "77980d51a7e2395ec2e2e25fe616ea3744ba40af",
"distinct": false,
"message": "ci(storybook): publish preview links",
"timestamp": "2026-06-02T04:59:01-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/903649f3018caba491f654ae7afebb390b3e0674",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T04:59:01-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T04:59:01-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml"
]
},
{
"id": "47c3c1368021b47c5b035bb86ad76b72507a79e7",
"tree_id": "c6866b5519f852f2ac11af2c4e2e53f366b8a434",
"distinct": false,
"message": "ci(storybook): deploy before snapshots",
"timestamp": "2026-06-02T05:02:17-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/47c3c1368021b47c5b035bb86ad76b72507a79e7",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T05:02:17-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T05:02:17-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml"
]
},
{
"id": "a7eb3b1221908e2434a0ef8ca94fc5de1bafbd66",
"tree_id": "b0a101ad995a160c1b98de62ce6a9f81eeba9128",
"distinct": false,
"message": "Fix new-file content in diff view (#211)\n\n* chore(beads): nixmac-srn nightly release feature\n\n* chore(beads): record PR #195 on nixmac-srn\n\n* chore(beads): file nixmac-62s (TS build blocker) discovered triaging PR #195\n\n* chore(beads): nixmac-srn shipping depends on nixmac-62s (TS build fix)\n\n* fix(native): drop unused Plus and DropdownMenu imports (nixmac-62s)\n\nBoth imports were only referenced inside JSX comments, so tsc flagged\nthem (TS6133/TS6192) and broke the build check on main since bd658afc.\n\nThe env.ts BooleanFromString errors mentioned in the issue do not\nreproduce: apps/native resolves effect to 3.21.0 (transitive) which\nstill exports BooleanFromString. Only the root workspace pulls\neffect@4.0.0-beta.62, but env.ts lives under apps/native.\n\nCloses nixmac-62s.\n\n* chore(beads): close nixmac-62s\n\n* fix(native): migrate env.ts off Schema.BooleanFromString (effect 4.0)\n\nThe repo's bun.lock pins effect@4.0.0-beta.62 (no transitive effect@3.x).\n4.0 removed Schema.BooleanFromString — which env.ts was using — so a\nfresh `bun install --frozen-lockfile` (what CI does) produces a tree\nwhere the import fails to compile. The earlier \"doesn't reproduce\nlocally\" diagnosis on nixmac-62s was misled by a stale symlink at\napps/native/node_modules/effect pointing into node_modules/.bun/effect@3.21.0/\nleft over from an older install run. Locally tsc resolved against the\nstale 3.x version, where BooleanFromString still exists.\n\nMigration:\n- Replace `Schema.BooleanFromString` with\n `Schema.Literals([\"true\", \"false\"])` (4.0's plural array form; 3.x had\n variadic `Schema.Literal(...)` — these are not interchangeable).\n- Coerce the validated string to `boolean | undefined` in code so the\n exported settings type matches the old BooleanFromString shape and\n downstream consumers (utils.ts:19's `!== true` check) don't need to\n change.\n- Drop the auto-derived `Schema.Schema.Type<typeof Settings>` because\n the runtime shape we expose (with the string→bool coercion) differs\n from the decoded shape.\n\nStrict parsing is preserved: any value other than \"true\"/\"false\" still\nfails at decode time, same as the original.\n\nNote: existing local installs with a stale apps/native/node_modules/effect\nsymlink will need `bun install` to refresh — the stale 3.x effect doesn't\nhave `Schema.Literals` (plural). One-time cost; matches CI from then on.\n\nRefs nixmac-62s.\n\n* chore(beads): file nixmac-rva (Storybook flake) + link as nixmac-srn blocker\n\n* chore(beads): file nixmac-cmu (Rust dead_code) + link as nixmac-srn blocker\n\n* Apply suggestions from code review\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>\n\n* chore(beads): file nixmac-k8d (Monaco platform drift) + link as nixmac-srn blocker\n\n* fix(beads): clean up stash-conflict markers in issues.jsonl\n\nPrevious commit 0895711d accidentally included unresolved 'Updated upstream\n/ Stashed changes' markers from a botched git stash pop. Re-exporting via\nbd export produces the correct merged state including nixmac-k8d as the\nfourth nixmac-srn blocker.\n\n* feat(ci): nightly develop→main release with minor version bump (#195)\n\n* feat(ci): nightly develop→main release with minor version bump\n\nAdds a GitHub Actions cron (09:00 UTC daily) that merges develop into\nmain and tags a vMAJ.(MIN+1).0 release. Exits silently when develop has\nno new commits vs main.\n\nThe actual ship work is delegated to build.yaml's existing `tag` mode —\nthe nightly job just produces the merge commit and the tag, then atomically\npushes both. compute-version.sh gets a small defensive edit: when HEAD is\nalready tagged with a v* tag, `release` mode is demoted to `branch` so the\nmain-push event doesn't trigger a duplicate (patch-bumped) ship alongside\nthe tag-push event.\n\nPrerequisites for the cron to push successfully:\n- RELEASE_BOT_TOKEN secret (PAT with bypass), OR\n- repo ruleset bypass for github-actions[bot] on main\n\nWithout either, `git push --atomic` fails on the protected main branch.\nWorkflow falls back to GITHUB_TOKEN so cron + script wiring can be tested\nbefore bypass is granted.\n\nFiles:\n- .github/workflows/nightly-release.yaml (new)\n- ops/scripts/release/nightly-release.sh (new; supports DRY_RUN=1)\n- ops/scripts/release/compute-version.sh (tag-aware release-mode skip)\n\n* feat(ci): scope nightly release trigger to native build affecteds\n\nReplace the simple \"any commit on develop\" trigger with the no-turbo\nequivalent of `turbo run build --affected --filter=native`. Releases now\nfire only when develop has changes inside the native workspace, its\ntransitive workspace deps (currently @nixmac/ui), or global build inputs\n(root package.json, bun.lock, root tsconfig, Cargo.toml/lock).\n\nThis skips nights where develop only got CI/docs/release-script changes\nso a minor version isn't burned on commits that wouldn't ship anything\ndifferent to users.\n\nAdds ops/scripts/release/affected-paths.mjs which dynamically resolves\nthe affected path set by reading the root workspaces config and walking\nworkspace:* deps — no hardcoded list to maintain when new packages\nappear.\n\nVerified locally:\n- Real diff (apps/native/*, Cargo.lock, etc.): release\n- Synthetic diff (ops/, .github/, docs/, *.md): skip\n- Synthetic diff (bun.lock only): release (global input)\n\n* fix(ci): address Copilot review feedback on nightly-release\n\n- next_minor_version: filter to stable vMAJ.MIN.PATCH only so disposable\n -test.N tags (used by build.yaml for signing rehearsals) can't pollute\n the bump base\n- Remote tag existence check: use `git ls-remote --exit-code` with an\n exact ref pattern instead of `grep -q \"${tag}\"`, which would false-\n positive when a longer tag like v1.2.0-test.1 contains the candidate\n as a substring\n- Docstring: align step 2 with actual behavior (logs a one-liner then\n exits 0, not strictly silent)\n- Workflow: add concurrency group so a scheduled run + manual dispatch\n can't race on the same next-tag computation. cancel-in-progress=false\n to avoid aborting a half-completed merge+tag mid-flight\n\n* docs(ci): align skip-message wording with affected-paths policy\n\nCopilot follow-up: three places still described the skip condition as\n\"no new commits vs main\" or \"skip silently\". The actual policy is the\naffected-paths filter (no-turbo equivalent of\n`turbo run build --affected --filter=native`), which can return false\neven when develop has commits — they just don't touch the native build\ngraph.\n\n- should_release docstring: \"skip silently\" → \"skip (caller logs reason)\"\n- main() skip log: \"develop has no new work\" → \"no changes affect the\n native build graph\"\n- workflow header: \"no new commits vs main\" → explanation of the\n affected-paths filter and what kinds of develop activity will no-op\n\nNo behavior change.\n\n* fix(ci): nightly-release cwd-independence and ..→... range\n\nCopilot follow-up. Two real bugs:\n\n1. The script claimed cwd-independence via REPO_ROOT but only used it for\n the affected-paths.mjs invocation. Every git command and the\n `node -p require('./package.json')` fallback ran relative to the\n caller's cwd, so invoking the script from anywhere other than the\n repo root would fail. main() now `cd`s into REPO_ROOT before doing\n any work, which makes the cwd-independence claim actually true.\n\n2. should_release used `git diff origin/main..origin/develop` (two-dot\n range), which is tip-to-tip. If main has a hotfix not on develop,\n two-dot treats it as a develop-side deletion and flags it as a\n change — falsely triggering a release every night until the hotfix\n gets merged back. Three-dot (`origin/main...origin/develop`) diffs\n from the merge-base, so only commits new on develop are counted.\n\nVerified locally: running the script from /tmp now produces the same\ndry-run plan as running from the repo root. Two-dot vs three-dot on\ncurrent origin/main vs origin/develop differs by one file, confirming\nthere is currently a hotfix-style commit on main that the old check\nwould have erroneously counted.\n\n* docs/fix(ci): nightly-release token fallback + optional-env docstring\n\nCopilot follow-up:\n\n1. Workflow checkout's token fallback used `secrets.GITHUB_TOKEN` as the\n `||` second operand. While that *does* work in normal expression\n contexts (it's GitHub's documented way to reference the auto-injected\n token), the `github.token` context form is more reliable in fallback\n positions and `if:` evaluations. Switched to\n `secrets.RELEASE_BOT_TOKEN || github.token` for that defensive reason.\n\n2. Header docstring claimed GIT_USER_NAME / GIT_USER_EMAIL were \"Required\n env\" but the code uses `if [[ -n \"${VAR:-}\" ]]` guards and silently\n skips git config when unset. They're actually optional CI overrides\n that fall back to the caller's existing git config — fine for local\n rehearsals, expected to be set in CI for bot-identity attribution.\n Updated the comment to match the actual code.\n\nNo behavior change.\n\n* fix(ci): defensive Copilot follow-ups on nightly-release\n\n1. DRY_RUN expression now gates on `github.event_name == 'workflow_dispatch'`\n before reading `inputs.dry_run`. The `inputs.*` context is only\n populated for dispatch events; gating ensures scheduled cron runs\n always get '0' regardless of how GitHub resolves missing-input refs.\n\n2. compute-version.sh tag-skip regex now anchored with `$` so disposable\n `v0.22.0-test.N` tags (used for signing/notarization rehearsals)\n don't suppress legitimate `main`-push releases. Test tags don't ship\n (publish/R2/Linear steps in build.yaml skip them), so main-push must\n still bump+ship normally if such a tag happens to be at HEAD.\n Verified: `v1.2.3` matches the regex (correctly skips release mode),\n `v1.2.3-test.1` does not match (correctly does not suppress).\n\n3. affected-paths.mjs now normalizes `package.json#workspaces` to handle\n both the npm/bun array form and the Yarn object form\n (`{ packages: [...] }`). nixmac uses the array form today; supporting\n both is cheap future-proofing if the repo ever switches package\n manager.\n\n* docs/fix(ci): nightly-release docstring + unconditional fetch\n\nCopilot follow-up:\n\n1. Header step 4 said \"Fast-forward / no-ff merge\" but the implementation\n always uses `git merge --no-ff`. Updated the comment to match the\n actual behavior (always produces a merge commit so the release\n boundary stays visible in git log --first-parent).\n\n2. `git fetch` was DRY_RUN-gated, but should_release and\n next_minor_version both query local refs (origin/main..origin/develop\n diff + `git tag --list` for the latest stable). On a stale checkout\n the dry-run could compute a wrong next version or false-positive\n \"nothing to release\". Unwrap the fetch from `run` so it always\n executes — fetch is read-only from the project's perspective (only\n updates local origin/* refs), so unconditional execution is safe and\n makes dry-run output reflect real remote state.\n\nVerified: the unconditional fetch pulled a fresh v0.23.2 tag on this\nrun that the local checkout didn't have, validating the fix on its\nfirst execution.\n\n* fix(native): fix Chromatic Storybook\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\n\n* fix(native): env.ts — drop version-skewed Schema.Literal for plain String\n\nPR #195 build broke at TS2554 (\"Expected 1 arguments, but got 2\") after\n80a19c67 reverted NIX_INSTALLED_OVERRIDE from `Schema.Literals([...])` to\n`Schema.Literal(...)` (variadic). The problem: `Schema.Literal`'s signature\nis fundamentally version-skewed —\n\n effect 3.x: `Literal<L>(...values: L)` variadic, multi-value\n effect 4.0-beta: `Literal<L>(value: L)` single value only,\n use `Literals([...])` for sets\n\nSo neither form source-compiles in both:\n\n- `Schema.Literal(\"true\", \"false\")` works in 3.x, fails 4.0 (this PR)\n- `Schema.Literals([\"true\", \"false\"])` works in 4.0, fails 3.x (Chromatic)\n\nThe repo's lockfile pins effect 4.0-beta, so tsc sees that — but the\nChromatic/storybook test environment can resolve 3.x via workspace\nsymlink hoisting, which is why 80a19c67 picked the 3.x form to fix\nChromatic and broke the build instead.\n\nFix: validate with plain `Schema.String` (signature is identical across\nversions) and coerce to boolean in code via\n`raw.NIX_INSTALLED_OVERRIDE === \"true\" ? true : undefined`. The only\ndownstream consumer is `settings.NIX_INSTALLED_OVERRIDE !== true` in\nwidget/utils.ts, which treats any non-\"true\" value as functionally\nfalse — so silent acceptance of unexpected strings is observationally\nequivalent to coercing them to undefined. We lose schema-level\n\"must be 'true' or 'false'\" strictness; we gain working CI on both\nthe build and Chromatic paths.\n\nVerified against both effect@3.21.0 and effect@4.0.0-beta.62 symlinks\nin isolation: no TS2554, no missing-Literals errors.\n\n* fix(ci): nightly-release DRY_RUN final-message clarity\n\nCopilot follow-up: the final `echo \"Released ${tag}\"` ran unconditionally,\nso workflow_dispatch dry-runs printed \"Released v0.24.0\" even though the\nmerge/tag/push steps were only echoed. Now branches on DRY_RUN: prints\n\"Dry run complete — would have released ${tag}\" in dry mode, \"Released\n${tag}\" in real mode. Behavior preserved; just the operator-facing log\nline distinguishes the two modes.\n\nDid not touch the `local changed paths file path` declaration in\nshould_release — Copilots claim that `path` is unused is incorrect.\n`path` is the inner loops read variable on line 85 and is used in the\npath-matching comparisons on lines 87, 89, 91, and 92.\n\n* fix(ci): nightly-release working-tree guard + setup-node pin\n\nCopilot follow-up:\n\n1. Add a clean-working-tree guard before the destructive `git reset --hard\n origin/${MAIN_BRANCH}`. Local accidental invocations would otherwise\n silently obliterate uncommitted work. CI runners start clean by\n construction so the guard never fires in CI; DRY_RUN=1 bypasses it\n since dry-mode does not mutate the tree. Error path prints\n `git status --short` so the operator can see what would have been lost.\n\n2. Add an actions/setup-node@v6 step pinned to node-version: 20 (matching\n build.yaml's convention). The release script invokes node for\n affected-paths.mjs and the package.json version fallback in\n next_minor_version. Without an explicit pin the cron would depend on\n whatever node the ubuntu-latest runner image ships, which is not stable\n across image updates.\n\nVerified: bash -n passes, dry-run still works, guard simulation triggers\ncorrectly on dirty tree and stays out of the way in DRY_RUN=1.\n\n---------\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\n\n* Fix new file diff rendering fallback\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Add dev config IPC bindings\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Fix native Rust build wiring\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Allow dormant Rust helper code\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cooper Maruyama <me@cooperm.com>\nCo-authored-by: cooper <1325802+czxtm@users.noreply.github.com>\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T01:21:17Z",
"url": "https://github.com/darkmatter/nixmac/commit/a7eb3b1221908e2434a0ef8ca94fc5de1bafbd66",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-03T01:21:17Z",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T01:21:17Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"Cargo.lock",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/src/db/commits.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/state/watcher.rs",
"apps/native/src-tauri/src/storage/credential_store.rs",
"apps/native/src-tauri/src/system/nix.rs",
"apps/native/src/components/widget/summaries/full-file-diff-editor.tsx",
"apps/native/src/components/widget/utils.test.ts",
"apps/native/src/components/widget/utils.ts",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts"
]
},
{
"id": "4180a65ed09026db52f11b28efd19cd9d0e58317",
"tree_id": "ec818e2a553735d4f49439420c48c8613d6a18fd",
"distinct": false,
"message": "Require configured local AI model names (#237)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T02:56:42Z",
"url": "https://github.com/darkmatter/nixmac/commit/4180a65ed09026db52f11b28efd19cd9d0e58317",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T19:56:42-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T02:56:42Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/ai/providers/mod.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/utils.rs",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/settings/ai-models-tab.tsx",
"apps/native/src/lib/ai-provider-validation.test.ts",
"apps/native/src/lib/ai-provider-validation.ts"
]
},
{
"id": "cea5c0e2a989deb7e4ba6304cf224a02ff8c56fa",
"tree_id": "ac81e97c7be2b3721e77e4d851e80de0162ef48e",
"distinct": false,
"message": "fix(summarize): constrain hunk summary prompts (#242)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T03:01:47Z",
"url": "https://github.com/darkmatter/nixmac/commit/cea5c0e2a989deb7e4ba6304cf224a02ff8c56fa",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T20:01:47-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T03:01:47Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/summarize/build_prompt.rs",
"apps/native/src-tauri/src/summarize/templates/base_changes_intro.md",
"apps/native/src-tauri/src/summarize/templates/base_hunk_description_rules.md",
"apps/native/src-tauri/src/summarize/templates/base_preamble.md",
"apps/native/src-tauri/src/summarize/templates/evolve_group_description_rules.md"
]
},
{
"id": "e997aa0df2bff5030bd6cc8d3e21f7ab007e1057",
"tree_id": "8294411b50c1688c492723453c1e1c6158590f31",
"distinct": false,
"message": "Fix diff line counts and GitHub-style stats (#243)\n\n* Fix diff line stats display\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update diff UI snapshots\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T03:28:17Z",
"url": "https://github.com/darkmatter/nixmac/commit/e997aa0df2bff5030bd6cc8d3e21f7ab007e1057",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T20:28:17-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T03:28:17Z",
"username": "web-flow"
},
"added": [
"apps/native/src/components/widget/summaries/diff-line-stats.test.tsx",
"apps/native/src/components/widget/summaries/diff-line-stats.tsx"
],
"removed": [],
"modified": [
"apps/native/src/components/widget/summaries/__snapshots__/diff-section.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/full-file-diff-editor.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/hunk-pill.stories.tsx.snap",
"apps/native/src/components/widget/summaries/full-file-diff-editor.tsx",
"apps/native/src/components/widget/summaries/hunk-pill.tsx"
]
},
{
"id": "ade6803c3a4259795db6f092c83fd72c6994c662",
"tree_id": "7d1a5278a5f64e3c452c105aba512c3ff5d955e0",
"distinct": false,
"message": "fix critical evolve and setup regressions (#257)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T03:29:06Z",
"url": "https://github.com/darkmatter/nixmac/commit/ade6803c3a4259795db6f092c83fd72c6994c662",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-03T03:29:06Z",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T03:29:06Z",
"username": "web-flow"
},
"added": [
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/steps/setup-step.test.tsx",
"apps/native/src/hooks/use-rollback.test.ts"
],
"removed": [],
"modified": [
"apps/native/src-tauri/src/system/permissions.rs",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/steps/setup-step.tsx",
"apps/native/src/hooks/use-rollback.ts"
]
},
{
"id": "dad42772f3baad9c93962e8ab9ba852c81b78aa0",
"tree_id": "a4d8e0714f74b8b101596e27fc1ab14c04c4fafb",
"distinct": false,
"message": "Add configurable evolution output token limit (#261)\n\n* Add configurable evolution output token limit\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update AI settings snapshot for output token limit\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T03:30:16Z",
"url": "https://github.com/darkmatter/nixmac/commit/dad42772f3baad9c93962e8ab9ba852c81b78aa0",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T20:30:16-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T03:30:16Z",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"README.md",
"apps/native/.storybook/mocks/tauri-runtime.ts",
"apps/native/src-tauri/src/cli.rs",
"apps/native/src-tauri/src/commands/ui_prefs.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/providers/mod.rs",
"apps/native/src-tauri/src/evolve/providers/ollama.rs",
"apps/native/src-tauri/src/evolve/providers/openai.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/shared_types/prefs.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src/components/widget/settings/__snapshots__/ai-models-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/ai-models-tab.stories.tsx",
"apps/native/src/components/widget/settings/ai-models-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/ipc/types.ts",
"apps/native/src/lib/constants.ts"
]
},
{
"id": "add16a2b15128018b4115ffa2dd7142ee7f989c0",
"tree_id": "1cf708855a3c2c28b95a62fa939f953dbb4c33e3",
"distinct": false,
"message": "Settings: show untracked settings copy (#269)\n\n* fix(settings): rename untracked settings indicator\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* test(settings): update untracked settings snapshots\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-03T03:32:58Z",
"url": "https://github.com/darkmatter/nixmac/commit/add16a2b15128018b4115ffa2dd7142ee7f989c0",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T20:32:58-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-03T03:32:58Z",
"username": "web-flow"
},
"added": [
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.tsx"
],
"removed": [],
"modified": [
"apps/native/src/components/widget/filesystem/__snapshots__/file-list.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/seed-prompt.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/untracked-card.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/data.ts",
"apps/native/src/components/widget/filesystem/icons.ts",
"apps/native/src/components/widget/filesystem/untracked-card.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.tsx",
"tests/e2e/lib/nixmac_managed_badge_proof.sh",
"tests/e2e/scenarios/macos_customization_save_rollback_smoke.sh",
"tools/computer-use-e2e/run-remote-cua.mjs"
]
},
{
"id": "6104f7c2c3cf73f2d8afcb401e17e793ee08ce7b",
"tree_id": "bb859d51425fc2751c1f6c68aa2fe80f1aa53db5",
"distinct": false,
"message": "ci(storybook): deploy previews before snapshot tests (#285)\n\nReorder workflow steps so build/deploy/comment run BEFORE snapshot\ntests. Previously, when snapshot tests failed, the build, deploy,\nand PR comment steps were skipped—no preview URL was posted.\n\nAlso includes:\n- Add deployments:write + issues:write permissions for deployment API\n- Add deploy URL validation (fail loudly on missing URL)\n- Add Publish Storybook deployment link step (GitHub Deployments API)\n- Fix comment step: use always() condition so it runs even if\n snapshot tests fail, and link the URL as markdown\n- Add develop to push triggers\n- Show preview link in step summary regardless of test outcome",
"timestamp": "2026-06-02T21:12:00-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/6104f7c2c3cf73f2d8afcb401e17e793ee08ce7b",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-02T21:12:00-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T21:12:00-07:00",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/storybook.yaml"
]
},
{
"id": "49f62e661d7c238b77343641ee48f1af09abe4be",
"tree_id": "6f5dd25c1e9f63534a0d275c5579c13fdf8e4937",
"distinct": false,
"message": "Main (#286)\n\n* chore(beads): nixmac-srn nightly release feature\n\n* chore(beads): record PR #195 on nixmac-srn\n\n* chore(beads): file nixmac-62s (TS build blocker) discovered triaging PR #195\n\n* chore(beads): nixmac-srn shipping depends on nixmac-62s (TS build fix)\n\n* fix(native): drop unused Plus and DropdownMenu imports (nixmac-62s)\n\nBoth imports were only referenced inside JSX comments, so tsc flagged\nthem (TS6133/TS6192) and broke the build check on main since bd658afc.\n\nThe env.ts BooleanFromString errors mentioned in the issue do not\nreproduce: apps/native resolves effect to 3.21.0 (transitive) which\nstill exports BooleanFromString. Only the root workspace pulls\neffect@4.0.0-beta.62, but env.ts lives under apps/native.\n\nCloses nixmac-62s.\n\n* chore(beads): close nixmac-62s\n\n* fix(native): migrate env.ts off Schema.BooleanFromString (effect 4.0)\n\nThe repo's bun.lock pins effect@4.0.0-beta.62 (no transitive effect@3.x).\n4.0 removed Schema.BooleanFromString — which env.ts was using — so a\nfresh `bun install --frozen-lockfile` (what CI does) produces a tree\nwhere the import fails to compile. The earlier \"doesn't reproduce\nlocally\" diagnosis on nixmac-62s was misled by a stale symlink at\napps/native/node_modules/effect pointing into node_modules/.bun/effect@3.21.0/\nleft over from an older install run. Locally tsc resolved against the\nstale 3.x version, where BooleanFromString still exists.\n\nMigration:\n- Replace `Schema.BooleanFromString` with\n `Schema.Literals([\"true\", \"false\"])` (4.0's plural array form; 3.x had\n variadic `Schema.Literal(...)` — these are not interchangeable).\n- Coerce the validated string to `boolean | undefined` in code so the\n exported settings type matches the old BooleanFromString shape and\n downstream consumers (utils.ts:19's `!== true` check) don't need to\n change.\n- Drop the auto-derived `Schema.Schema.Type<typeof Settings>` because\n the runtime shape we expose (with the string→bool coercion) differs\n from the decoded shape.\n\nStrict parsing is preserved: any value other than \"true\"/\"false\" still\nfails at decode time, same as the original.\n\nNote: existing local installs with a stale apps/native/node_modules/effect\nsymlink will need `bun install` to refresh — the stale 3.x effect doesn't\nhave `Schema.Literals` (plural). One-time cost; matches CI from then on.\n\nRefs nixmac-62s.\n\n* chore(beads): file nixmac-rva (Storybook flake) + link as nixmac-srn blocker\n\n* chore(beads): file nixmac-cmu (Rust dead_code) + link as nixmac-srn blocker\n\n* Apply suggestions from code review\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>\n\n* chore(beads): file nixmac-k8d (Monaco platform drift) + link as nixmac-srn blocker\n\n* fix(beads): clean up stash-conflict markers in issues.jsonl\n\nPrevious commit 0895711d accidentally included unresolved 'Updated upstream\n/ Stashed changes' markers from a botched git stash pop. Re-exporting via\nbd export produces the correct merged state including nixmac-k8d as the\nfourth nixmac-srn blocker.\n\n* feat(ci): nightly develop→main release with minor version bump (#195)\n\n* feat(ci): nightly develop→main release with minor version bump\n\nAdds a GitHub Actions cron (09:00 UTC daily) that merges develop into\nmain and tags a vMAJ.(MIN+1).0 release. Exits silently when develop has\nno new commits vs main.\n\nThe actual ship work is delegated to build.yaml's existing `tag` mode —\nthe nightly job just produces the merge commit and the tag, then atomically\npushes both. compute-version.sh gets a small defensive edit: when HEAD is\nalready tagged with a v* tag, `release` mode is demoted to `branch` so the\nmain-push event doesn't trigger a duplicate (patch-bumped) ship alongside\nthe tag-push event.\n\nPrerequisites for the cron to push successfully:\n- RELEASE_BOT_TOKEN secret (PAT with bypass), OR\n- repo ruleset bypass for github-actions[bot] on main\n\nWithout either, `git push --atomic` fails on the protected main branch.\nWorkflow falls back to GITHUB_TOKEN so cron + script wiring can be tested\nbefore bypass is granted.\n\nFiles:\n- .github/workflows/nightly-release.yaml (new)\n- ops/scripts/release/nightly-release.sh (new; supports DRY_RUN=1)\n- ops/scripts/release/compute-version.sh (tag-aware release-mode skip)\n\n* feat(ci): scope nightly release trigger to native build affecteds\n\nReplace the simple \"any commit on develop\" trigger with the no-turbo\nequivalent of `turbo run build --affected --filter=native`. Releases now\nfire only when develop has changes inside the native workspace, its\ntransitive workspace deps (currently @nixmac/ui), or global build inputs\n(root package.json, bun.lock, root tsconfig, Cargo.toml/lock).\n\nThis skips nights where develop only got CI/docs/release-script changes\nso a minor version isn't burned on commits that wouldn't ship anything\ndifferent to users.\n\nAdds ops/scripts/release/affected-paths.mjs which dynamically resolves\nthe affected path set by reading the root workspaces config and walking\nworkspace:* deps — no hardcoded list to maintain when new packages\nappear.\n\nVerified locally:\n- Real diff (apps/native/*, Cargo.lock, etc.): release\n- Synthetic diff (ops/, .github/, docs/, *.md): skip\n- Synthetic diff (bun.lock only): release (global input)\n\n* fix(ci): address Copilot review feedback on nightly-release\n\n- next_minor_version: filter to stable vMAJ.MIN.PATCH only so disposable\n -test.N tags (used by build.yaml for signing rehearsals) can't pollute\n the bump base\n- Remote tag existence check: use `git ls-remote --exit-code` with an\n exact ref pattern instead of `grep -q \"${tag}\"`, which would false-\n positive when a longer tag like v1.2.0-test.1 contains the candidate\n as a substring\n- Docstring: align step 2 with actual behavior (logs a one-liner then\n exits 0, not strictly silent)\n- Workflow: add concurrency group so a scheduled run + manual dispatch\n can't race on the same next-tag computation. cancel-in-progress=false\n to avoid aborting a half-completed merge+tag mid-flight\n\n* docs(ci): align skip-message wording with affected-paths policy\n\nCopilot follow-up: three places still described the skip condition as\n\"no new commits vs main\" or \"skip silently\". The actual policy is the\naffected-paths filter (no-turbo equivalent of\n`turbo run build --affected --filter=native`), which can return false\neven when develop has commits — they just don't touch the native build\ngraph.\n\n- should_release docstring: \"skip silently\" → \"skip (caller logs reason)\"\n- main() skip log: \"develop has no new work\" → \"no changes affect the\n native build graph\"\n- workflow header: \"no new commits vs main\" → explanation of the\n affected-paths filter and what kinds of develop activity will no-op\n\nNo behavior change.\n\n* fix(ci): nightly-release cwd-independence and ..→... range\n\nCopilot follow-up. Two real bugs:\n\n1. The script claimed cwd-independence via REPO_ROOT but only used it for\n the affected-paths.mjs invocation. Every git command and the\n `node -p require('./package.json')` fallback ran relative to the\n caller's cwd, so invoking the script from anywhere other than the\n repo root would fail. main() now `cd`s into REPO_ROOT before doing\n any work, which makes the cwd-independence claim actually true.\n\n2. should_release used `git diff origin/main..origin/develop` (two-dot\n range), which is tip-to-tip. If main has a hotfix not on develop,\n two-dot treats it as a develop-side deletion and flags it as a\n change — falsely triggering a release every night until the hotfix\n gets merged back. Three-dot (`origin/main...origin/develop`) diffs\n from the merge-base, so only commits new on develop are counted.\n\nVerified locally: running the script from /tmp now produces the same\ndry-run plan as running from the repo root. Two-dot vs three-dot on\ncurrent origin/main vs origin/develop differs by one file, confirming\nthere is currently a hotfix-style commit on main that the old check\nwould have erroneously counted.\n\n* docs/fix(ci): nightly-release token fallback + optional-env docstring\n\nCopilot follow-up:\n\n1. Workflow checkout's token fallback used `secrets.GITHUB_TOKEN` as the\n `||` second operand. While that *does* work in normal expression\n contexts (it's GitHub's documented way to reference the auto-injected\n token), the `github.token` context form is more reliable in fallback\n positions and `if:` evaluations. Switched to\n `secrets.RELEASE_BOT_TOKEN || github.token` for that defensive reason.\n\n2. Header docstring claimed GIT_USER_NAME / GIT_USER_EMAIL were \"Required\n env\" but the code uses `if [[ -n \"${VAR:-}\" ]]` guards and silently\n skips git config when unset. They're actually optional CI overrides\n that fall back to the caller's existing git config — fine for local\n rehearsals, expected to be set in CI for bot-identity attribution.\n Updated the comment to match the actual code.\n\nNo behavior change.\n\n* fix(ci): defensive Copilot follow-ups on nightly-release\n\n1. DRY_RUN expression now gates on `github.event_name == 'workflow_dispatch'`\n before reading `inputs.dry_run`. The `inputs.*` context is only\n populated for dispatch events; gating ensures scheduled cron runs\n always get '0' regardless of how GitHub resolves missing-input refs.\n\n2. compute-version.sh tag-skip regex now anchored with `$` so disposable\n `v0.22.0-test.N` tags (used for signing/notarization rehearsals)\n don't suppress legitimate `main`-push releases. Test tags don't ship\n (publish/R2/Linear steps in build.yaml skip them), so main-push must\n still bump+ship normally if such a tag happens to be at HEAD.\n Verified: `v1.2.3` matches the regex (correctly skips release mode),\n `v1.2.3-test.1` does not match (correctly does not suppress).\n\n3. affected-paths.mjs now normalizes `package.json#workspaces` to handle\n both the npm/bun array form and the Yarn object form\n (`{ packages: [...] }`). nixmac uses the array form today; supporting\n both is cheap future-proofing if the repo ever switches package\n manager.\n\n* docs/fix(ci): nightly-release docstring + unconditional fetch\n\nCopilot follow-up:\n\n1. Header step 4 said \"Fast-forward / no-ff merge\" but the implementation\n always uses `git merge --no-ff`. Updated the comment to match the\n actual behavior (always produces a merge commit so the release\n boundary stays visible in git log --first-parent).\n\n2. `git fetch` was DRY_RUN-gated, but should_release and\n next_minor_version both query local refs (origin/main..origin/develop\n diff + `git tag --list` for the latest stable). On a stale checkout\n the dry-run could compute a wrong next version or false-positive\n \"nothing to release\". Unwrap the fetch from `run` so it always\n executes — fetch is read-only from the project's perspective (only\n updates local origin/* refs), so unconditional execution is safe and\n makes dry-run output reflect real remote state.\n\nVerified: the unconditional fetch pulled a fresh v0.23.2 tag on this\nrun that the local checkout didn't have, validating the fix on its\nfirst execution.\n\n* fix(native): fix Chromatic Storybook\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\n\n* fix(native): env.ts — drop version-skewed Schema.Literal for plain String\n\nPR #195 build broke at TS2554 (\"Expected 1 arguments, but got 2\") after\n80a19c67 reverted NIX_INSTALLED_OVERRIDE from `Schema.Literals([...])` to\n`Schema.Literal(...)` (variadic). The problem: `Schema.Literal`'s signature\nis fundamentally version-skewed —\n\n effect 3.x: `Literal<L>(...values: L)` variadic, multi-value\n effect 4.0-beta: `Literal<L>(value: L)` single value only,\n use `Literals([...])` for sets\n\nSo neither form source-compiles in both:\n\n- `Schema.Literal(\"true\", \"false\")` works in 3.x, fails 4.0 (this PR)\n- `Schema.Literals([\"true\", \"false\"])` works in 4.0, fails 3.x (Chromatic)\n\nThe repo's lockfile pins effect 4.0-beta, so tsc sees that — but the\nChromatic/storybook test environment can resolve 3.x via workspace\nsymlink hoisting, which is why 80a19c67 picked the 3.x form to fix\nChromatic and broke the build instead.\n\nFix: validate with plain `Schema.String` (signature is identical across\nversions) and coerce to boolean in code via\n`raw.NIX_INSTALLED_OVERRIDE === \"true\" ? true : undefined`. The only\ndownstream consumer is `settings.NIX_INSTALLED_OVERRIDE !== true` in\nwidget/utils.ts, which treats any non-\"true\" value as functionally\nfalse — so silent acceptance of unexpected strings is observationally\nequivalent to coercing them to undefined. We lose schema-level\n\"must be 'true' or 'false'\" strictness; we gain working CI on both\nthe build and Chromatic paths.\n\nVerified against both effect@3.21.0 and effect@4.0.0-beta.62 symlinks\nin isolation: no TS2554, no missing-Literals errors.\n\n* fix(ci): nightly-release DRY_RUN final-message clarity\n\nCopilot follow-up: the final `echo \"Released ${tag}\"` ran unconditionally,\nso workflow_dispatch dry-runs printed \"Released v0.24.0\" even though the\nmerge/tag/push steps were only echoed. Now branches on DRY_RUN: prints\n\"Dry run complete — would have released ${tag}\" in dry mode, \"Released\n${tag}\" in real mode. Behavior preserved; just the operator-facing log\nline distinguishes the two modes.\n\nDid not touch the `local changed paths file path` declaration in\nshould_release — Copilots claim that `path` is unused is incorrect.\n`path` is the inner loops read variable on line 85 and is used in the\npath-matching comparisons on lines 87, 89, 91, and 92.\n\n* fix(ci): nightly-release working-tree guard + setup-node pin\n\nCopilot follow-up:\n\n1. Add a clean-working-tree guard before the destructive `git reset --hard\n origin/${MAIN_BRANCH}`. Local accidental invocations would otherwise\n silently obliterate uncommitted work. CI runners start clean by\n construction so the guard never fires in CI; DRY_RUN=1 bypasses it\n since dry-mode does not mutate the tree. Error path prints\n `git status --short` so the operator can see what would have been lost.\n\n2. Add an actions/setup-node@v6 step pinned to node-version: 20 (matching\n build.yaml's convention). The release script invokes node for\n affected-paths.mjs and the package.json version fallback in\n next_minor_version. Without an explicit pin the cron would depend on\n whatever node the ubuntu-latest runner image ships, which is not stable\n across image updates.\n\nVerified: bash -n passes, dry-run still works, guard simulation triggers\ncorrectly on dirty tree and stays out of the way in DRY_RUN=1.\n\n---------\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\n\n* Require configured local AI model names (#237)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* fix(summarize): constrain hunk summary prompts (#242)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Fix diff line counts and GitHub-style stats (#243)\n\n* Fix diff line stats display\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update diff UI snapshots\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* fix critical evolve and setup regressions (#257)\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Add configurable evolution output token limit (#261)\n\n* Add configurable evolution output token limit\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update AI settings snapshot for output token limit\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Settings: show untracked settings copy (#269)\n\n* fix(settings): rename untracked settings indicator\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* test(settings): update untracked settings snapshots\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* ci(storybook): deploy previews before snapshot tests (#285)\n\nReorder workflow steps so build/deploy/comment run BEFORE snapshot\ntests. Previously, when snapshot tests failed, the build, deploy,\nand PR comment steps were skipped—no preview URL was posted.\n\nAlso includes:\n- Add deployments:write + issues:write permissions for deployment API\n- Add deploy URL validation (fail loudly on missing URL)\n- Add Publish Storybook deployment link step (GitHub Deployments API)\n- Fix comment step: use always() condition so it runs even if\n snapshot tests fail, and link the URL as markdown\n- Add develop to push triggers\n- Show preview link in step summary regardless of test outcome\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>\nCo-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-06-02T21:24:29-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/49f62e661d7c238b77343641ee48f1af09abe4be",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-06-02T21:24:29-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T21:24:29-07:00",
"username": "web-flow"
},
"added": [
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.tsx",
"apps/native/src/components/widget/summaries/diff-line-stats.test.tsx",
"apps/native/src/components/widget/summaries/diff-line-stats.tsx"
],
"removed": [],
"modified": [
"README.md",
"apps/native/.storybook/mocks/tauri-runtime.ts",
"apps/native/src-tauri/src/ai/providers/mod.rs",
"apps/native/src-tauri/src/cli.rs",
"apps/native/src-tauri/src/commands/ui_prefs.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/providers/mod.rs",
"apps/native/src-tauri/src/evolve/providers/ollama.rs",
"apps/native/src-tauri/src/evolve/providers/openai.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/shared_types/prefs.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src-tauri/src/summarize/build_prompt.rs",
"apps/native/src-tauri/src/summarize/templates/base_changes_intro.md",
"apps/native/src-tauri/src/summarize/templates/base_hunk_description_rules.md",
"apps/native/src-tauri/src/summarize/templates/base_preamble.md",
"apps/native/src-tauri/src/summarize/templates/evolve_group_description_rules.md",
"apps/native/src-tauri/src/utils.rs",
"apps/native/src/components/widget/filesystem/__snapshots__/seed-prompt.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/untracked-card.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/data.ts",
"apps/native/src/components/widget/filesystem/icons.ts",
"apps/native/src/components/widget/filesystem/untracked-card.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.tsx",
"apps/native/src/components/widget/settings/__snapshots__/ai-models-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/ai-models-tab.stories.tsx",
"apps/native/src/components/widget/settings/ai-models-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/components/widget/summaries/__snapshots__/diff-section.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/full-file-diff-editor.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/hunk-pill.stories.tsx.snap",
"apps/native/src/components/widget/summaries/full-file-diff-editor.tsx",
"apps/native/src/components/widget/summaries/hunk-pill.tsx",
"apps/native/src/ipc/types.ts",
"apps/native/src/lib/ai-provider-validation.test.ts",
"apps/native/src/lib/ai-provider-validation.ts",
"apps/native/src/lib/constants.ts",
"tests/e2e/lib/nixmac_managed_badge_proof.sh",
"tests/e2e/scenarios/macos_customization_save_rollback_smoke.sh",
"tools/computer-use-e2e/run-remote-cua.mjs"
]
},
{
"id": "3d334824555fdeb2786242cc57d6748e748a33e4",
"tree_id": "bc8729b52bc9b5da2986fb096b2d07a3a7c4b78b",
"distinct": false,
"message": "fix type errors after merge",
"timestamp": "2026-06-02T21:42:50-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/3d334824555fdeb2786242cc57d6748e748a33e4",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T21:42:50-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T21:42:50-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/providers/ollama.rs",
"apps/native/src-tauri/src/evolve/providers/openai.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src/components/widget/promptinput/prompt-input.tsx"
]
},
{
"id": "6910547300bf613c6e2eb0b8c8b542d56da77b3d",
"tree_id": "cf3f9944653c9e53f91a7c215fac19942ad7b5c7",
"distinct": false,
"message": "Merge main into develop",
"timestamp": "2026-06-02T22:12:36-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/6910547300bf613c6e2eb0b8c8b542d56da77b3d",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:12:36-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:12:36-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/system/permissions.rs",
"apps/native/src/components/widget/promptinput/prompt-input.tsx"
]
},
{
"id": "adc285a4edff9fd2e00c58274e55b699c044b2ef",
"tree_id": "3d3355bf5bf291de06f049d937e65d52cc64b3ae",
"distinct": false,
"message": "use own runners",
"timestamp": "2026-06-02T22:39:10-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/adc285a4edff9fd2e00c58274e55b699c044b2ef",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:39:08-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:39:10-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
".github/workflows/build.yaml",
".github/workflows/computer-use-e2e.yml",
".github/workflows/danger.yml",
".github/workflows/e2e.yml",
".github/workflows/nightly-release.yaml",
".github/workflows/peekaboo-e2e.yml",
".github/workflows/storybook.yaml"
]
},
{
"id": "a3bd7aa333fb4fbb55862fc9ece313140ee77505",
"tree_id": "085b81ab3576f7010cbc254e8fd8c6dc59ddd9fb",
"distinct": false,
"message": "fix: remove duplicate normalize_max_output_tokens from merge",
"timestamp": "2026-06-02T22:41:56-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/a3bd7aa333fb4fbb55862fc9ece313140ee77505",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:40:58-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-06-02T22:41:56-07:00",
"username": "czxtm"
},
"added": [
".omo/run-continuation/ses_1742830e4ffem5Cu7UjOzQeA3d.json",
".omo/run-continuation/ses_174674999ffeKMo5b44yGBAS1w.json"
],
"removed": [],
"modified": [
"apps/native/src-tauri/src/evolve/mod.rs"
]
},
{
"id": "dd78e5f8fc4d85c062a07b3c39703d07cf8b6e8a",
"tree_id": "3609eaef09c32d4067e827d2d9dc0c8491b240cd",
"distinct": false,
"message": "Replace evolution iteration limit with token budget (#272)\n\n* Replace evolution iteration limit with token budget\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Fix token progress parser compatibility\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update evolution limit story snapshots\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n* Update widget story snapshots for token budget UI\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Cursor Agent <cursoragent@cursor.com>\nCo-authored-by: cooper <czxtm@users.noreply.github.com>\nCo-authored-by: cooper <1325802+czxtm@users.noreply.github.com>",
"timestamp": "2026-06-02T23:35:27-07:00",
"url": "https://github.com/darkmatter/nixmac/commit/dd78e5f8fc4d85c062a07b3c39703d07cf8b6e8a",
"author": {
"name": "cursor[bot]",
"email": "206951365+cursor[bot]@users.noreply.github.com",
"date": "2026-06-02T23:35:27-07:00",
"username": "cursor[bot]"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-02T23:35:27-07:00",
"username": "web-flow"
},
"added": [],
"removed": [],
"modified": [
"README.md",
"apps/native/.storybook/mocks/tauri-runtime.ts",
"apps/native/src-tauri/src/cli.rs",
"apps/native/src-tauri/src/commands/ui_prefs.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/shared_types/prefs.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src-tauri/src/types.rs",
"apps/native/src/components/widget/__snapshots__/widget.stories.tsx.snap",
"apps/native/src/components/widget/overlays/__snapshots__/evolve-progress.stories.tsx.snap",
"apps/native/src/components/widget/overlays/evolve-progress.tsx",
"apps/native/src/components/widget/settings/__snapshots__/ai-models-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/ai-models-tab.stories.tsx",
"apps/native/src/components/widget/settings/ai-models-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/ipc/types.ts",
"apps/native/src/lib/constants.ts",
"tests/e2e/lib/nixmac_product_proof.sh",
"tests/e2e/scenarios/macos_provider_evolve_full_smoke.sh",
"tools/computer-use-e2e/run-remote-cua.mjs"
]
},
{
"id": "fd5804654c3d054d3303f47128b57348b2e364e2",
"tree_id": "38d87e95efe68d4d3a38ec485810dfad2b2ef6e9",
"distinct": true,
"message": "Merge origin/develop into jp/fix-merge-pr-255\n\nResolutions:\n- credential_store.rs, system/nix.rs, ai-models-tab.{tsx,snap},\n settings-dialog.tsx: kept HEAD's intentional refactors\n (legacy-fallback removal, idiomatic Option flatten, panel split).\n- evolve/providers/ollama.rs: took develop's `max_output_tokens` constructor.\n- evolve/config.rs: extended EvolutionLimits with maxTokenBudget (u32, 50_000)\n and maxOutputTokens (usize, 32_768) so develop's PR #272 / #261 knobs are\n exposed through the auto-generated TuningTab; serde defaults keep existing\n .nixmac/settings.json forward-compatible.\n- evolve/mod.rs: all four limits now read once from\n Slice<EvolutionLimits>; dropped duplicate store::get_max_* loads.\n- promptinput/system-defaults-cta.tsx: kept HEAD's viewmodel mirror imports\n and took develop's Settings2 icon swap.\n- summaries/hunk-pill.tsx: dropped inline diff-stat helpers in favor of\n develop's diff-line-stats module, rebound to useViewModel.\n- settings/ai-models-tab.stories.tsx: removed orphaned max* field props\n to match the post-merge AiModelsTab API.\n\nKnown follow-ups: cli.rs and commands/ui_prefs.rs still use\nstore::get_max_{token_budget,output_tokens} alongside EvolutionLimits;\nlib/constants.ts DEFAULT_MAX_* exports are now unused.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"timestamp": "2026-06-03T13:43:30+02:00",
"url": "https://github.com/darkmatter/nixmac/commit/fd5804654c3d054d3303f47128b57348b2e364e2",
"author": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T13:43:30+02:00",
"username": "arximboldi"
},
"committer": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T13:43:30+02:00",
"username": "arximboldi"
},
"added": [
".omo/run-continuation/ses_1742830e4ffem5Cu7UjOzQeA3d.json",
".omo/run-continuation/ses_174674999ffeKMo5b44yGBAS1w.json",
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.tsx",
"apps/native/src/components/widget/summaries/diff-line-stats.test.tsx",
"apps/native/src/components/widget/summaries/diff-line-stats.tsx"
],
"removed": [],
"modified": [
".github/workflows/build.yaml",
".github/workflows/computer-use-e2e.yml",
".github/workflows/danger.yml",
".github/workflows/e2e.yml",
".github/workflows/nightly-release.yaml",
".github/workflows/peekaboo-e2e.yml",
".github/workflows/storybook.yaml",
"Cargo.lock",
"README.md",
"apps/native/.storybook/mocks/tauri-runtime.ts",
"apps/native/src-tauri/Cargo.toml",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/src/ai/providers/mod.rs",
"apps/native/src-tauri/src/cli.rs",
"apps/native/src-tauri/src/commands/ui_prefs.rs",
"apps/native/src-tauri/src/db/commits.rs",
"apps/native/src-tauri/src/evolve/config.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/providers/mod.rs",
"apps/native/src-tauri/src/evolve/providers/ollama.rs",
"apps/native/src-tauri/src/evolve/providers/openai.rs",
"apps/native/src-tauri/src/main.rs",
"apps/native/src-tauri/src/shared_types/prefs.rs",
"apps/native/src-tauri/src/state/watcher.rs",
"apps/native/src-tauri/src/storage/store.rs",
"apps/native/src-tauri/src/summarize/build_prompt.rs",
"apps/native/src-tauri/src/summarize/templates/base_changes_intro.md",
"apps/native/src-tauri/src/summarize/templates/base_hunk_description_rules.md",
"apps/native/src-tauri/src/summarize/templates/base_preamble.md",
"apps/native/src-tauri/src/summarize/templates/evolve_group_description_rules.md",
"apps/native/src-tauri/src/system/permissions.rs",
"apps/native/src-tauri/src/types.rs",
"apps/native/src-tauri/src/utils.rs",
"apps/native/src/components/widget/__snapshots__/widget.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/seed-prompt.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/untracked-card.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/data.ts",
"apps/native/src/components/widget/filesystem/icons.ts",
"apps/native/src/components/widget/filesystem/untracked-card.tsx",
"apps/native/src/components/widget/overlays/__snapshots__/evolve-progress.stories.tsx.snap",
"apps/native/src/components/widget/overlays/evolve-progress.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.tsx",
"apps/native/src/components/widget/settings/ai-models-tab.stories.tsx",
"apps/native/src/components/widget/summaries/__snapshots__/diff-section.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/full-file-diff-editor.stories.tsx.snap",
"apps/native/src/components/widget/summaries/__snapshots__/hunk-pill.stories.tsx.snap",
"apps/native/src/components/widget/summaries/full-file-diff-editor.tsx",
"apps/native/src/components/widget/summaries/hunk-pill.tsx",
"apps/native/src/components/widget/utils.test.ts",
"apps/native/src/components/widget/utils.ts",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts",
"apps/native/src/lib/ai-provider-validation.test.ts",
"apps/native/src/lib/ai-provider-validation.ts",
"apps/native/src/lib/constants.ts",
"ops/secrets/secrets.yaml",
"tests/e2e/lib/nixmac_managed_badge_proof.sh",
"tests/e2e/lib/nixmac_product_proof.sh",
"tests/e2e/scenarios/macos_customization_save_rollback_smoke.sh",
"tests/e2e/scenarios/macos_provider_evolve_full_smoke.sh",
"tools/computer-use-e2e/run-remote-cua.mjs"
]
},
{
"id": "8a19689e611b01a516272c115478e4dfdecd266f",
"tree_id": "3d7063e27314c94ce08be4fab426a0be8818e74f",
"distinct": true,
"message": "fix: repair branch-wide breakage so the merge compiles & tests pass\n\nPrior to this commit, both this branch (since a92e61b3) and the merge\nresult failed `cargo check` with 22 errors. The user asked for cargo +\nbun validation against the merge resolution, so this commit fixes the\npreexisting structural breakage that the merge inherited, plus a few\nfollow-ups uncovered by the test suites.\n\nRust:\n- git/mod.rs: restore the develop-side mod.rs that declares\n `pub mod query` / `pub mod init` and re-exports the right names from\n each. The orphan query.rs / init.rs files were already on disk; only\n the mod entry was missing after a92e61b3 accidentally gutted it.\n- evolve/mod.rs: route `repo_root` through `git::query` (its new home),\n pull `FileEdit` from `shared_types`, re-export `Evolution` from\n `shared_types::Evolution` (types.rs only imports it, doesn't re-export\n it), and fix the `made_edit_or_build_check` typo that develop's PR\n #272 introduced (variable never defined; should be\n `made_edit || made_build_check`).\n- shared_types/git.rs: re-add `WatcherEvent` alongside the unused\n `GitState` slice type — `state/watcher.rs` still constructs it and\n needs the symbol back. Marked `GitState` `#[allow(dead_code)]` until\n the watcher migration finishes.\n- summarize/queue_summarizer.rs: `#[allow(dead_code)]` on the\n not-yet-wired worker scaffolding (a92e61b3 carryover).\n- commands/settings_io.rs: update an EvolutionLimits test fixture to\n include the new `max_token_budget` / `max_output_tokens` fields.\n\nFrontend (post-merge tweaks):\n- ipc/api.ts: drop the duplicate `devConfigs` entry the auto-merge\n produced (it appeared once near `settings` and again after\n `promptHistory`).\n- ipc/types.ts: regenerated via `cargo run --example specta_gen_ts` to\n drop duplicated `ConfigField` / `ConfigurableSchema` / `EnumVariant`\n / `FieldType` blocks the auto-merge dual-inserted.\n- viewmodel/git.ts + viewmodel.test.ts: switch the\n `git_state_changed` payload type from `GitState` (unused TS-side) to\n `WatcherEvent` (what the Rust watcher actually emits).\n- hooks/use-evolve.ts: drop the eager `mirrorChangeMapState(null)` at\n the top of `handleEvolve`. Line 109 already correctly avoids\n overwriting the change map for conversational responses; the eager\n clear contradicted that and broke develop's PR #243 test that\n exercises conversational follow-ups.\n- Tests (`use-evolve.test.ts`, `use-rollback.test.ts`,\n `prompt-input.test.tsx`, `system-defaults-cta.test.tsx`): swap the\n removed `setGitStatus` / `setEvolveState` / `setChangeMap` /\n `setSummaryAvailable` widget-store setters for the viewmodel mirror\n fns (`mirrorGitState`, `mirrorEvolveState`, `mirrorChangeMapState`).\n `summaryAvailable` no longer exists on the widget store; the\n related assertions are dropped.\n- Storybook snapshots: 30 stories were regenerated after the\n AI Models tab field split, the system-defaults icon swap, and the\n hunk-pill render going through `DiffLineStatsBadge`.\n\nValidation:\n- `cargo check`: clean\n- `cargo test`: 366 passed\n- `bun run test:unit`: 116 passed\n- `bun run test:storybook`: 165 passed\n- `bun run build` (tsc + vite): clean\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"timestamp": "2026-06-03T14:11:50+02:00",
"url": "https://github.com/darkmatter/nixmac/commit/8a19689e611b01a516272c115478e4dfdecd266f",
"author": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T14:11:50+02:00",
"username": "arximboldi"
},
"committer": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T14:11:50+02:00",
"username": "arximboldi"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/commands/settings_io.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/git/mod.rs",
"apps/native/src-tauri/src/shared_types/git.rs",
"apps/native/src-tauri/src/summarize/queue_summarizer.rs",
"apps/native/src/components/widget/__snapshots__/evolve-flow.stories.tsx.snap",
"apps/native/src/components/widget/__snapshots__/widget.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/file-list.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/untracked-card.stories.tsx.snap",
"apps/native/src/components/widget/overlays/__snapshots__/rebuild-overlay-panel.stories.tsx.snap",
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.tsx",
"apps/native/src/components/widget/settings/__snapshots__/ai-models-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/__snapshots__/developer-tab.stories.tsx.snap",
"apps/native/src/hooks/use-evolve.test.ts",
"apps/native/src/hooks/use-evolve.ts",
"apps/native/src/hooks/use-rollback.test.ts",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts",
"apps/native/src/viewmodel/git.ts",
"apps/native/src/viewmodel/viewmodel.test.ts"
]
}
],
"head_commit": {
"id": "8a19689e611b01a516272c115478e4dfdecd266f",
"tree_id": "3d7063e27314c94ce08be4fab426a0be8818e74f",
"distinct": true,
"message": "fix: repair branch-wide breakage so the merge compiles & tests pass\n\nPrior to this commit, both this branch (since a92e61b3) and the merge\nresult failed `cargo check` with 22 errors. The user asked for cargo +\nbun validation against the merge resolution, so this commit fixes the\npreexisting structural breakage that the merge inherited, plus a few\nfollow-ups uncovered by the test suites.\n\nRust:\n- git/mod.rs: restore the develop-side mod.rs that declares\n `pub mod query` / `pub mod init` and re-exports the right names from\n each. The orphan query.rs / init.rs files were already on disk; only\n the mod entry was missing after a92e61b3 accidentally gutted it.\n- evolve/mod.rs: route `repo_root` through `git::query` (its new home),\n pull `FileEdit` from `shared_types`, re-export `Evolution` from\n `shared_types::Evolution` (types.rs only imports it, doesn't re-export\n it), and fix the `made_edit_or_build_check` typo that develop's PR\n #272 introduced (variable never defined; should be\n `made_edit || made_build_check`).\n- shared_types/git.rs: re-add `WatcherEvent` alongside the unused\n `GitState` slice type — `state/watcher.rs` still constructs it and\n needs the symbol back. Marked `GitState` `#[allow(dead_code)]` until\n the watcher migration finishes.\n- summarize/queue_summarizer.rs: `#[allow(dead_code)]` on the\n not-yet-wired worker scaffolding (a92e61b3 carryover).\n- commands/settings_io.rs: update an EvolutionLimits test fixture to\n include the new `max_token_budget` / `max_output_tokens` fields.\n\nFrontend (post-merge tweaks):\n- ipc/api.ts: drop the duplicate `devConfigs` entry the auto-merge\n produced (it appeared once near `settings` and again after\n `promptHistory`).\n- ipc/types.ts: regenerated via `cargo run --example specta_gen_ts` to\n drop duplicated `ConfigField` / `ConfigurableSchema` / `EnumVariant`\n / `FieldType` blocks the auto-merge dual-inserted.\n- viewmodel/git.ts + viewmodel.test.ts: switch the\n `git_state_changed` payload type from `GitState` (unused TS-side) to\n `WatcherEvent` (what the Rust watcher actually emits).\n- hooks/use-evolve.ts: drop the eager `mirrorChangeMapState(null)` at\n the top of `handleEvolve`. Line 109 already correctly avoids\n overwriting the change map for conversational responses; the eager\n clear contradicted that and broke develop's PR #243 test that\n exercises conversational follow-ups.\n- Tests (`use-evolve.test.ts`, `use-rollback.test.ts`,\n `prompt-input.test.tsx`, `system-defaults-cta.test.tsx`): swap the\n removed `setGitStatus` / `setEvolveState` / `setChangeMap` /\n `setSummaryAvailable` widget-store setters for the viewmodel mirror\n fns (`mirrorGitState`, `mirrorEvolveState`, `mirrorChangeMapState`).\n `summaryAvailable` no longer exists on the widget store; the\n related assertions are dropped.\n- Storybook snapshots: 30 stories were regenerated after the\n AI Models tab field split, the system-defaults icon swap, and the\n hunk-pill render going through `DiffLineStatsBadge`.\n\nValidation:\n- `cargo check`: clean\n- `cargo test`: 366 passed\n- `bun run test:unit`: 116 passed\n- `bun run test:storybook`: 165 passed\n- `bun run build` (tsc + vite): clean\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"timestamp": "2026-06-03T14:11:50+02:00",
"url": "https://github.com/darkmatter/nixmac/commit/8a19689e611b01a516272c115478e4dfdecd266f",
"author": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T14:11:50+02:00",
"username": "arximboldi"
},
"committer": {
"name": "Juan Pedro Bolívar Puente",
"email": "raskolnikov@gnu.org",
"date": "2026-06-03T14:11:50+02:00",
"username": "arximboldi"
},
"added": [],
"removed": [],
"modified": [
"apps/native/src-tauri/src/commands/settings_io.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/git/mod.rs",
"apps/native/src-tauri/src/shared_types/git.rs",
"apps/native/src-tauri/src/summarize/queue_summarizer.rs",
"apps/native/src/components/widget/__snapshots__/evolve-flow.stories.tsx.snap",
"apps/native/src/components/widget/__snapshots__/widget.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/file-list.stories.tsx.snap",
"apps/native/src/components/widget/filesystem/__snapshots__/untracked-card.stories.tsx.snap",
"apps/native/src/components/widget/overlays/__snapshots__/rebuild-overlay-panel.stories.tsx.snap",
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.tsx",
"apps/native/src/components/widget/settings/__snapshots__/ai-models-tab.stories.tsx.snap",
"apps/native/src/components/widget/settings/__snapshots__/developer-tab.stories.tsx.snap",
"apps/native/src/hooks/use-evolve.test.ts",
"apps/native/src/hooks/use-evolve.ts",
"apps/native/src/hooks/use-rollback.test.ts",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts",
"apps/native/src/viewmodel/git.ts",
"apps/native/src/viewmodel/viewmodel.test.ts"
]
}
}