Payload
{
"ref": "refs/heads/gh-readonly-queue/develop/pr-292-dd78e5f8fc4d85c062a07b3c39703d07cf8b6e8a",
"before": "0000000000000000000000000000000000000000",
"after": "670aa9857843993f87ba667a2e7b6de4ef400185",
"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-03T12:43:14Z",
"pushed_at": 1780571556,
"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": 679121,
"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": 87,
"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": 87,
"watchers": 5,
"default_branch": "develop",
"stargazers": 5,
"master_branch": "develop",
"organization": "darkmatter",
"custom_properties": {}
},
"pusher": {
"name": "github-merge-queue[bot]",
"email": null
},
"forced": false,
"organization": {
"login": "darkmatter",
"id": 17834193,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
"url": "https://api.github.com/orgs/darkmatter",
"repos_url": "https://api.github.com/orgs/darkmatter/repos",
"events_url": "https://api.github.com/orgs/darkmatter/events",
"hooks_url": "https://api.github.com/orgs/darkmatter/hooks",
"issues_url": "https://api.github.com/orgs/darkmatter/issues",
"members_url": "https://api.github.com/orgs/darkmatter/members{/member}",
"public_members_url": "https://api.github.com/orgs/darkmatter/public_members{/member}",
"avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
"description": ""
},
"enterprise": {
"id": 469843,
"slug": "darkmatter",
"name": "darkmatter",
"node_id": "E_kgDOAAcrUw",
"avatar_url": "https://avatars.githubusercontent.com/b/469843?v=4",
"description": "",
"website_url": "darkmatter.io",
"html_url": "https://github.com/enterprises/darkmatter",
"created_at": "2025-09-07T16:01:00Z",
"updated_at": "2026-05-09T15:34:55Z"
},
"sender": {
"login": "github-merge-queue[bot]",
"id": 118344674,
"node_id": "BOT_kgDOBw3L4g",
"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github-merge-queue%5Bbot%5D",
"html_url": "https://github.com/apps/github-merge-queue",
"followers_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/github-merge-queue%5Bbot%5D/received_events",
"type": "Bot",
"user_view_type": "public",
"site_admin": false
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
},
"created": true,
"deleted": false,
"base_ref": null,
"compare": "https://github.com/darkmatter/nixmac/commit/670aa9857843",
"commits": [
{
"id": "670aa9857843993f87ba667a2e7b6de4ef400185",
"tree_id": "47e9a6fc42bbe2d5d666343b728382a40cdeacc2",
"distinct": true,
"message": "chore: fix merge pr 255 (#292)\n\n* feat(console): add resizable log panel\n\n* feat(state): wire runtime slices and summarizer\n\n* chore(fmt): add treefmt wiring\n\n* chore(credentials): remove legacy plaintext fallback\n\n* ci: add evaluate workflow\n\n* fix(theme): scope Minted to Monaco diffs\n\n* feat(settings): split backup and tuning panels\n\n* refactor(frontend): move backend mirrors to viewmodel\n\n* chore(beads): update state migration issues\n\n* 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>\n\n* fix signing\n\n* refactor: restore slice-event-per-slice contract in watcher\n\nThe earlier repair commit (8a19689e) brought back `WatcherEvent` to make\nstate/watcher.rs compile, but that struct bundles four slices' worth of\nstate (git_status, change_map, evolve_state, error) onto the\n`git_state_changed` channel. The intended architecture is one event per\nslice, each carrying just that slice's state.\n\nWatcher now emits:\n- `git_state_changed` → GitState { git_status, external_build_detected }\n- `change_map_changed` → SemanticChangeMap (unchanged)\n- `evolve_state_changed` is no longer emitted from the watcher at all;\n evolve_state::set() writes through Slice<EvolveState>, whose\n write-guard already emits the event on drop. The watcher was emitting\n it twice.\n\nDrop WatcherEvent from shared_types/git.rs and from the specta\nregistration; the `#[allow(dead_code)]` on GitState becomes unnecessary.\n\nSeparately, queue_summarizer's three #[allow(dead_code)] annotations\nwere honest: the commit a92e61b3 (\"feat: wire runtime slices and\nsummarizer\") never actually wired the worker — `app.manage(start_worker(handle)?)`\nwas missing from main.rs. Adding it now so the pipelines'\n`try_state::<SummarizerState>()` path is actually used instead of always\nfalling back to inline processing.\n\nFrontend follow-ups:\n- viewmodel/git.ts subscribes `git_state_changed` as `GitState` now.\n- viewmodel.test.ts constructs `GitState` (2 fields), not the made-up\n 5-field WatcherEvent.\n- types.ts regenerated via `cargo run --example specta_gen_ts`.\n\nValidation: cargo check clean, 366 cargo tests pass, 116 unit tests\npass, tsc + vite build clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n* fix: some permission tests would fail on CI\n\nReplace with more effective and reproducible tests.\n\n---------\n\nCo-authored-by: Cooper Maruyama <me@cooperm.com>\nCo-authored-by: cooper <1325802+czxtm@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"timestamp": "2026-06-04T11:12:20Z",
"url": "https://github.com/darkmatter/nixmac/commit/670aa9857843993f87ba667a2e7b6de4ef400185",
"author": {
"name": "Juanpe Bolívar",
"email": "raskolnikov@gnu.org",
"date": "2026-06-04T13:12:20+02:00",
"username": "arximboldi"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-04T11:12:20Z",
"username": "web-flow"
},
"added": [
".github/workflows/evaluate.yml",
"apps/native/src/components/widget/settings/backup-restore-section.tsx",
"apps/native/src/components/widget/settings/tuning-tab.tsx",
"apps/native/src/ipc/api.test.ts",
"apps/native/src/ipc/preferences.ts",
"apps/native/src/stores/ui-state.test.ts",
"apps/native/src/stores/ui-state.ts",
"apps/native/src/stores/view-model.ts",
"apps/native/src/themes/minted.json",
"apps/native/src/viewmodel/change-map.ts",
"apps/native/src/viewmodel/evolve.ts",
"apps/native/src/viewmodel/git.ts",
"apps/native/src/viewmodel/history.ts",
"apps/native/src/viewmodel/index.ts",
"apps/native/src/viewmodel/viewmodel.test.ts",
"apps/native/treefmt.nix",
"treefmt.nix"
],
"removed": [
"apps/native/src-tauri/migrations/03-evolutions-origin-branch/up.sql",
"apps/native/src/hooks/use-queue-summarizer.ts",
"apps/native/src/hooks/use-watcher.ts"
],
"modified": [
".beads/issues.jsonl",
".github/workflows/build.yaml",
".gitignore",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/src/README.md",
"apps/native/src-tauri/src/commands/git.rs",
"apps/native/src-tauri/src/commands/permissions.rs",
"apps/native/src-tauri/src/commands/settings_io.rs",
"apps/native/src-tauri/src/commands/updater.rs",
"apps/native/src-tauri/src/evolve/config.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/search_packages.rs",
"apps/native/src-tauri/src/evolve/tools.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/events.rs",
"apps/native/src-tauri/src/shared_types/evolve.rs",
"apps/native/src-tauri/src/shared_types/git.rs",
"apps/native/src-tauri/src/shared_types/system.rs",
"apps/native/src-tauri/src/state/watcher.rs",
"apps/native/src-tauri/src/storage/credential_store.rs",
"apps/native/src-tauri/src/summarize/pipelines/evolved_changeset.rs",
"apps/native/src-tauri/src/summarize/pipelines/fresh_changeset.rs",
"apps/native/src-tauri/src/summarize/queue_summarizer.rs",
"apps/native/src-tauri/src/system/nix.rs",
"apps/native/src-tauri/src/system/permissions.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/controls/bootstrap-config.tsx",
"apps/native/src/components/widget/controls/build-head-button.tsx",
"apps/native/src/components/widget/evolve-flow.stories.tsx",
"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/history/analyze-history-button.tsx",
"apps/native/src/components/widget/history/discard-uncommitted-dialog.tsx",
"apps/native/src/components/widget/history/history-restore-item-button.tsx",
"apps/native/src/components/widget/layout/console.tsx",
"apps/native/src/components/widget/layout/debug-overlay.tsx",
"apps/native/src/components/widget/layout/git-status-debug.tsx",
"apps/native/src/components/widget/layout/header.tsx",
"apps/native/src/components/widget/layout/merge-section.tsx",
"apps/native/src/components/widget/notifications/external-build-detected.stories.tsx",
"apps/native/src/components/widget/notifications/external-build-detected.tsx",
"apps/native/src/components/widget/notifications/uncommitted-changes-detected.tsx",
"apps/native/src/components/widget/notifications/unsummarized-changes-detected.tsx",
"apps/native/src/components/widget/overlays/__snapshots__/rebuild-overlay-panel.stories.tsx.snap",
"apps/native/src/components/widget/promptinput/begin-evolve-warning.tsx",
"apps/native/src/components/widget/promptinput/homebrew-badge.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.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/api-keys-tab.tsx",
"apps/native/src/components/widget/settings/developer-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/components/widget/steps/evolve-step.tsx",
"apps/native/src/components/widget/steps/history-step.tsx",
"apps/native/src/components/widget/summaries/full-file-diff-editor.stories.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-theme.ts",
"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/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.test.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-rollback.test.ts",
"apps/native/src/hooks/use-rollback.ts",
"apps/native/src/hooks/use-summary.ts",
"apps/native/src/hooks/use-widget-initialization.ts",
"apps/native/src/index.css",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts",
"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/utils/widget-test-helpers.ts",
"flake.lock",
"flake.nix"
]
}
],
"head_commit": {
"id": "670aa9857843993f87ba667a2e7b6de4ef400185",
"tree_id": "47e9a6fc42bbe2d5d666343b728382a40cdeacc2",
"distinct": true,
"message": "chore: fix merge pr 255 (#292)\n\n* feat(console): add resizable log panel\n\n* feat(state): wire runtime slices and summarizer\n\n* chore(fmt): add treefmt wiring\n\n* chore(credentials): remove legacy plaintext fallback\n\n* ci: add evaluate workflow\n\n* fix(theme): scope Minted to Monaco diffs\n\n* feat(settings): split backup and tuning panels\n\n* refactor(frontend): move backend mirrors to viewmodel\n\n* chore(beads): update state migration issues\n\n* 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>\n\n* fix signing\n\n* refactor: restore slice-event-per-slice contract in watcher\n\nThe earlier repair commit (8a19689e) brought back `WatcherEvent` to make\nstate/watcher.rs compile, but that struct bundles four slices' worth of\nstate (git_status, change_map, evolve_state, error) onto the\n`git_state_changed` channel. The intended architecture is one event per\nslice, each carrying just that slice's state.\n\nWatcher now emits:\n- `git_state_changed` → GitState { git_status, external_build_detected }\n- `change_map_changed` → SemanticChangeMap (unchanged)\n- `evolve_state_changed` is no longer emitted from the watcher at all;\n evolve_state::set() writes through Slice<EvolveState>, whose\n write-guard already emits the event on drop. The watcher was emitting\n it twice.\n\nDrop WatcherEvent from shared_types/git.rs and from the specta\nregistration; the `#[allow(dead_code)]` on GitState becomes unnecessary.\n\nSeparately, queue_summarizer's three #[allow(dead_code)] annotations\nwere honest: the commit a92e61b3 (\"feat: wire runtime slices and\nsummarizer\") never actually wired the worker — `app.manage(start_worker(handle)?)`\nwas missing from main.rs. Adding it now so the pipelines'\n`try_state::<SummarizerState>()` path is actually used instead of always\nfalling back to inline processing.\n\nFrontend follow-ups:\n- viewmodel/git.ts subscribes `git_state_changed` as `GitState` now.\n- viewmodel.test.ts constructs `GitState` (2 fields), not the made-up\n 5-field WatcherEvent.\n- types.ts regenerated via `cargo run --example specta_gen_ts`.\n\nValidation: cargo check clean, 366 cargo tests pass, 116 unit tests\npass, tsc + vite build clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n* fix: some permission tests would fail on CI\n\nReplace with more effective and reproducible tests.\n\n---------\n\nCo-authored-by: Cooper Maruyama <me@cooperm.com>\nCo-authored-by: cooper <1325802+czxtm@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"timestamp": "2026-06-04T11:12:20Z",
"url": "https://github.com/darkmatter/nixmac/commit/670aa9857843993f87ba667a2e7b6de4ef400185",
"author": {
"name": "Juanpe Bolívar",
"email": "raskolnikov@gnu.org",
"date": "2026-06-04T13:12:20+02:00",
"username": "arximboldi"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-06-04T11:12:20Z",
"username": "web-flow"
},
"added": [
".github/workflows/evaluate.yml",
"apps/native/src/components/widget/settings/backup-restore-section.tsx",
"apps/native/src/components/widget/settings/tuning-tab.tsx",
"apps/native/src/ipc/api.test.ts",
"apps/native/src/ipc/preferences.ts",
"apps/native/src/stores/ui-state.test.ts",
"apps/native/src/stores/ui-state.ts",
"apps/native/src/stores/view-model.ts",
"apps/native/src/themes/minted.json",
"apps/native/src/viewmodel/change-map.ts",
"apps/native/src/viewmodel/evolve.ts",
"apps/native/src/viewmodel/git.ts",
"apps/native/src/viewmodel/history.ts",
"apps/native/src/viewmodel/index.ts",
"apps/native/src/viewmodel/viewmodel.test.ts",
"apps/native/treefmt.nix",
"treefmt.nix"
],
"removed": [
"apps/native/src-tauri/migrations/03-evolutions-origin-branch/up.sql",
"apps/native/src/hooks/use-queue-summarizer.ts",
"apps/native/src/hooks/use-watcher.ts"
],
"modified": [
".beads/issues.jsonl",
".github/workflows/build.yaml",
".gitignore",
"apps/native/src-tauri/examples/specta_gen_ts.rs",
"apps/native/src-tauri/src/README.md",
"apps/native/src-tauri/src/commands/git.rs",
"apps/native/src-tauri/src/commands/permissions.rs",
"apps/native/src-tauri/src/commands/settings_io.rs",
"apps/native/src-tauri/src/commands/updater.rs",
"apps/native/src-tauri/src/evolve/config.rs",
"apps/native/src-tauri/src/evolve/mod.rs",
"apps/native/src-tauri/src/evolve/search_packages.rs",
"apps/native/src-tauri/src/evolve/tools.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/events.rs",
"apps/native/src-tauri/src/shared_types/evolve.rs",
"apps/native/src-tauri/src/shared_types/git.rs",
"apps/native/src-tauri/src/shared_types/system.rs",
"apps/native/src-tauri/src/state/watcher.rs",
"apps/native/src-tauri/src/storage/credential_store.rs",
"apps/native/src-tauri/src/summarize/pipelines/evolved_changeset.rs",
"apps/native/src-tauri/src/summarize/pipelines/fresh_changeset.rs",
"apps/native/src-tauri/src/summarize/queue_summarizer.rs",
"apps/native/src-tauri/src/system/nix.rs",
"apps/native/src-tauri/src/system/permissions.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/controls/bootstrap-config.tsx",
"apps/native/src/components/widget/controls/build-head-button.tsx",
"apps/native/src/components/widget/evolve-flow.stories.tsx",
"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/history/analyze-history-button.tsx",
"apps/native/src/components/widget/history/discard-uncommitted-dialog.tsx",
"apps/native/src/components/widget/history/history-restore-item-button.tsx",
"apps/native/src/components/widget/layout/console.tsx",
"apps/native/src/components/widget/layout/debug-overlay.tsx",
"apps/native/src/components/widget/layout/git-status-debug.tsx",
"apps/native/src/components/widget/layout/header.tsx",
"apps/native/src/components/widget/layout/merge-section.tsx",
"apps/native/src/components/widget/notifications/external-build-detected.stories.tsx",
"apps/native/src/components/widget/notifications/external-build-detected.tsx",
"apps/native/src/components/widget/notifications/uncommitted-changes-detected.tsx",
"apps/native/src/components/widget/notifications/unsummarized-changes-detected.tsx",
"apps/native/src/components/widget/overlays/__snapshots__/rebuild-overlay-panel.stories.tsx.snap",
"apps/native/src/components/widget/promptinput/begin-evolve-warning.tsx",
"apps/native/src/components/widget/promptinput/homebrew-badge.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.test.tsx",
"apps/native/src/components/widget/promptinput/prompt-input.tsx",
"apps/native/src/components/widget/promptinput/system-defaults-cta.test.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/api-keys-tab.tsx",
"apps/native/src/components/widget/settings/developer-tab.tsx",
"apps/native/src/components/widget/settings/settings-dialog.tsx",
"apps/native/src/components/widget/steps/evolve-step.tsx",
"apps/native/src/components/widget/steps/history-step.tsx",
"apps/native/src/components/widget/summaries/full-file-diff-editor.stories.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-theme.ts",
"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/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.test.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-rollback.test.ts",
"apps/native/src/hooks/use-rollback.ts",
"apps/native/src/hooks/use-summary.ts",
"apps/native/src/hooks/use-widget-initialization.ts",
"apps/native/src/index.css",
"apps/native/src/ipc/api.ts",
"apps/native/src/ipc/types.ts",
"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/utils/widget-test-helpers.ts",
"flake.lock",
"flake.nix"
]
}
}