Payload
{
"ref": "refs/heads/feature/stackpanel-reload",
"before": "51633f921a741d7d5788ce608d8bf795ad77e67a",
"after": "e6f18a546f8d7a5d9ffc8b156e3bdd1a37942957",
"repository": {
"id": 1110409800,
"node_id": "R_kgDOQi-CSA",
"name": "stackpanel",
"full_name": "darkmatter/stackpanel",
"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/stackpanel",
"description": "Ship products, not plumbing. Making Nix dev environments accessible to all.",
"fork": false,
"url": "https://api.github.com/repos/darkmatter/stackpanel",
"forks_url": "https://api.github.com/repos/darkmatter/stackpanel/forks",
"keys_url": "https://api.github.com/repos/darkmatter/stackpanel/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/darkmatter/stackpanel/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/darkmatter/stackpanel/teams",
"hooks_url": "https://api.github.com/repos/darkmatter/stackpanel/hooks",
"issue_events_url": "https://api.github.com/repos/darkmatter/stackpanel/issues/events{/number}",
"events_url": "https://api.github.com/repos/darkmatter/stackpanel/events",
"assignees_url": "https://api.github.com/repos/darkmatter/stackpanel/assignees{/user}",
"branches_url": "https://api.github.com/repos/darkmatter/stackpanel/branches{/branch}",
"tags_url": "https://api.github.com/repos/darkmatter/stackpanel/tags",
"blobs_url": "https://api.github.com/repos/darkmatter/stackpanel/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/darkmatter/stackpanel/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/darkmatter/stackpanel/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/darkmatter/stackpanel/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/darkmatter/stackpanel/statuses/{sha}",
"languages_url": "https://api.github.com/repos/darkmatter/stackpanel/languages",
"stargazers_url": "https://api.github.com/repos/darkmatter/stackpanel/stargazers",
"contributors_url": "https://api.github.com/repos/darkmatter/stackpanel/contributors",
"subscribers_url": "https://api.github.com/repos/darkmatter/stackpanel/subscribers",
"subscription_url": "https://api.github.com/repos/darkmatter/stackpanel/subscription",
"commits_url": "https://api.github.com/repos/darkmatter/stackpanel/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/darkmatter/stackpanel/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/darkmatter/stackpanel/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/darkmatter/stackpanel/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/darkmatter/stackpanel/contents/{+path}",
"compare_url": "https://api.github.com/repos/darkmatter/stackpanel/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/darkmatter/stackpanel/merges",
"archive_url": "https://api.github.com/repos/darkmatter/stackpanel/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/darkmatter/stackpanel/downloads",
"issues_url": "https://api.github.com/repos/darkmatter/stackpanel/issues{/number}",
"pulls_url": "https://api.github.com/repos/darkmatter/stackpanel/pulls{/number}",
"milestones_url": "https://api.github.com/repos/darkmatter/stackpanel/milestones{/number}",
"notifications_url": "https://api.github.com/repos/darkmatter/stackpanel/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/darkmatter/stackpanel/labels{/name}",
"releases_url": "https://api.github.com/repos/darkmatter/stackpanel/releases{/id}",
"deployments_url": "https://api.github.com/repos/darkmatter/stackpanel/deployments",
"created_at": 1764916677,
"updated_at": "2026-06-11T00:58:55Z",
"pushed_at": 1781140881,
"git_url": "git://github.com/darkmatter/stackpanel.git",
"ssh_url": "git@github.com:darkmatter/stackpanel.git",
"clone_url": "https://github.com/darkmatter/stackpanel.git",
"svn_url": "https://github.com/darkmatter/stackpanel",
"homepage": "https://stackpanel.com",
"size": 117448,
"stargazers_count": 5,
"watchers_count": 5,
"language": "TypeScript",
"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": 1,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"has_pull_requests": true,
"pull_request_creation_policy": "all",
"topics": [],
"visibility": "public",
"forks": 1,
"open_issues": 1,
"watchers": 5,
"default_branch": "main",
"stargazers": 5,
"master_branch": "main",
"organization": "darkmatter",
"custom_properties": {}
},
"pusher": {
"name": "czxtm",
"email": "1325802+czxtm@users.noreply.github.com"
},
"forced": true,
"organization": {
"login": "darkmatter",
"id": 17834193,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
"url": "https://api.github.com/orgs/darkmatter",
"repos_url": "https://api.github.com/orgs/darkmatter/repos",
"events_url": "https://api.github.com/orgs/darkmatter/events",
"hooks_url": "https://api.github.com/orgs/darkmatter/hooks",
"issues_url": "https://api.github.com/orgs/darkmatter/issues",
"members_url": "https://api.github.com/orgs/darkmatter/members{/member}",
"public_members_url": "https://api.github.com/orgs/darkmatter/public_members{/member}",
"avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
"description": ""
},
"enterprise": {
"id": 469843,
"slug": "darkmatter",
"name": "darkmatter",
"node_id": "E_kgDOAAcrUw",
"avatar_url": "https://avatars.githubusercontent.com/b/469843?v=4",
"description": "",
"website_url": "darkmatter.io",
"html_url": "https://github.com/enterprises/darkmatter",
"created_at": "2025-09-07T16:01:00Z",
"updated_at": "2026-06-07T16:53:26Z"
},
"sender": {
"login": "czxtm",
"id": 1325802,
"node_id": "MDQ6VXNlcjEzMjU4MDI=",
"avatar_url": "https://avatars.githubusercontent.com/u/1325802?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/czxtm",
"html_url": "https://github.com/czxtm",
"followers_url": "https://api.github.com/users/czxtm/followers",
"following_url": "https://api.github.com/users/czxtm/following{/other_user}",
"gists_url": "https://api.github.com/users/czxtm/gists{/gist_id}",
"starred_url": "https://api.github.com/users/czxtm/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/czxtm/subscriptions",
"organizations_url": "https://api.github.com/users/czxtm/orgs",
"repos_url": "https://api.github.com/users/czxtm/repos",
"events_url": "https://api.github.com/users/czxtm/events{/privacy}",
"received_events_url": "https://api.github.com/users/czxtm/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
},
"created": false,
"deleted": false,
"base_ref": null,
"compare": "https://github.com/darkmatter/stackpanel/compare/51633f921a74...e6f18a546f8d",
"commits": [
{
"id": "e8edecea992ad3c53280efaa1e2c6fd87b9c021a",
"tree_id": "7bcbcf8e43cc4dff234b6d901b9437e63f339667",
"distinct": true,
"message": "feat(reload): Phase 1 - minimal PTY wrapper\n\nAdd apps/stackpanel-reload/ Rust binary with:\n- Config: watch paths, shell command, debounce (with defaults)\n- terminal: raw mode RAII guard, is_tty(), terminal_size()\n- pty_manager: PtySession spawn/wait/resize, run_session I/O loop\n with CI fallback (exec_direct when not a TTY)\n- main: CLI via clap (--root, --debounce, --watch, command passthrough)\n defaults to `nix develop --impure --command $SHELL`\n- 10 unit tests passing\n\nPTY tests gated behind --features test-pty (require a real terminal).\nStdin->PTY forwarding is a known limitation (Phase 1 uses output-only\nforwarding; full bidirectional wiring comes in Phase 2).\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T02:44:07-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/e8edecea992ad3c53280efaa1e2c6fd87b9c021a",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:44:07-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:44:07-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/Cargo.lock",
"apps/stackpanel-reload/Cargo.toml",
"apps/stackpanel-reload/src/config.rs",
"apps/stackpanel-reload/src/main.rs",
"apps/stackpanel-reload/src/pty_manager.rs",
"apps/stackpanel-reload/src/terminal.rs"
],
"removed": [],
"modified": []
},
{
"id": "c4491c8ae7681e2d9477d04a05ad49fd8efab421",
"tree_id": "9a504293ea052e9d5b02c43251a8ff7d27879147",
"distinct": true,
"message": "chore(reload): add .gitignore to exclude Rust build artifacts\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T02:44:25-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/c4491c8ae7681e2d9477d04a05ad49fd8efab421",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:44:25-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:44:25-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/.gitignore"
],
"removed": [],
"modified": []
},
{
"id": "4d3be49a4cc508f52724f28606e620fc6123e6bc",
"tree_id": "76424708bd966399025abd271a6201f6e9b9b9d0",
"distinct": true,
"message": "feat(reload): Phase 2 - file watcher + background rebuild\n\n- watcher.rs: debounced FileWatcher using notify crate\n - Filters metadata-only events (chmod/timestamps) to avoid false triggers\n - Deduplicates paths within a batch\n - Skips non-existent paths gracefully at startup\n - 3 tests: construction, content-change filter, detects writes, debounce\n\n- reloader.rs: background rebuild orchestrator (Reloader)\n - Cancels in-flight build when new file changes arrive\n - Spawns 'nix develop --impure --command true' to rebuild without PTY\n - Exposes SharedBuildState (Arc<Mutex<BuildState>>) for status line (Phase 4)\n - build_command() derives rebuild command from user's shell command\n - 9 tests: build_command variants, BuildState initial state, process outcomes\n\n- pty_manager.rs: fix bidirectional stdin<->PTY forwarding\n - PtySession.writer is now Option, extracted via take_writer()\n - run_session: stdin->PTY uses Arc<Mutex<writer>> shared with output task\n - Reloader is wired in as Task 3 (runs alongside I/O forwarding)\n\n- main.rs: register watcher + reloader modules\n\n23 tests passing, 0 failures\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T02:59:06-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/4d3be49a4cc508f52724f28606e620fc6123e6bc",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:59:06-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T02:59:06-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/src/reloader.rs",
"apps/stackpanel-reload/src/watcher.rs"
],
"removed": [],
"modified": [
"apps/stackpanel-reload/Cargo.lock",
"apps/stackpanel-reload/Cargo.toml",
"apps/stackpanel-reload/src/main.rs",
"apps/stackpanel-reload/src/pty_manager.rs"
]
},
{
"id": "18026df4b8d4dd36b86cd75fd2e06d61894dfc15",
"tree_id": "8fe09928e85695983565b724de534825ffe7f62c",
"distinct": true,
"message": "feat(reload): Phase 3 - PTY hot-swap via generation-based event loop\n\nArchitecture change: run_session is now a proper async event loop.\n\n- SessionEvent enum: PtyOutput{gen,bytes}, PtyEof{gen}, Stdin, SwapReady\n- start_pty_forwarder(): spawns a thread per PTY session tagged with a\n generation ID; stale bytes from old sessions are ignored\n- perform_swap(): clear screen + notification, spawn new nix develop PTY,\n replace writer, start new forwarder, drop old session (SIGHUP → old exits)\n\nReloader changes:\n- new_with_ready() returns (Reloader, Receiver<()>)\n- ready_tx cloned into build task; fires try_send(()) on build success\n- run_session wires ready_rx → SwapReady → perform_swap\n\nPtySession changes:\n- reader is now Option (matching writer) with take_reader()\n\nTests (2 new):\n- new_with_ready_returns_receiver: verifies API\n- ready_signal_fires_on_successful_build: end-to-end signal flow\n\n25 tests passing, 0 failures\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T03:22:53-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/18026df4b8d4dd36b86cd75fd2e06d61894dfc15",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:22:53-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:22:53-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/stackpanel-reload/src/pty_manager.rs",
"apps/stackpanel-reload/src/reloader.rs"
]
},
{
"id": "3eac6f5f78a6bbfbc4cb28e3a4fe2032545637f4",
"tree_id": "c408c5ca4d18285a670a61445cc730f2641f2ea9",
"distinct": true,
"message": "feat(reload): Phase 4 - status line\n\n- status_line.rs: StatusLineHandle backed by polling SharedBuildState\n - draw() writes to stderr via DECSC/DECRC cursor save-restore + ANSI\n so the shell prompt on stdout is never disturbed\n - render(): Idle (dim watch msg), Rebuilding (braille spinner + yellow),\n Succeeded (green checkmark, auto-resets to Idle after 3s), Failed (red\n with exit code + retry hint)\n - Drop impl: aborts task + clears the status row cleanly\n - 9 unit tests covering all states, spinner wrap, ANSI presence, Send\n\n- pty_manager.rs: wire status line into run_session (wired to Reloader's\n SharedBuildState; lives until session exits)\n- main.rs: register status_line module\n\n34 tests passing, 0 failures\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T03:30:52-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/3eac6f5f78a6bbfbc4cb28e3a4fe2032545637f4",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:30:52-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:30:52-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/src/status_line.rs"
],
"removed": [],
"modified": [
"apps/stackpanel-reload/src/main.rs",
"apps/stackpanel-reload/src/pty_manager.rs"
]
},
{
"id": "8b4738783d4083d1cdc851038e603298fddd101a",
"tree_id": "d38271b672e11b70ab2701a98313803606ca74ac",
"distinct": true,
"message": "feat(reload): Phase 5 - Nix integration\n\n- nix/stackpanel/devshell/reload.nix: new module\n - Options: stackpanel.devshell.reload.{enable, watchPaths, debounceMs, package}\n - enable = false by default (opt-in)\n - Builds stackpanel-reload via rustPlatform.buildRustPackage from\n apps/stackpanel-reload/ using the Cargo.lock\n - Adds binary to devshell.packages when enabled\n - Registers 'shell' script: stackpanel-reload with all watch paths +\n debounce, passing through to 'nix develop --impure --command $SHELL'\n - Adds MOTD hint for the 'shell' command\n\n- nix/stackpanel/devshell/core.nix: import reload.nix\n\nNix syntax validated. To enable:\n\n # .stack/config.nix\n stackpanel.devshell.reload.enable = true;\n\n # Then use:\n stackpanel shell # or: x shell\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T03:32:03-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/8b4738783d4083d1cdc851038e603298fddd101a",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:32:03-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:32:03-07:00",
"username": "czxtm"
},
"added": [
"nix/stackpanel/devshell/reload.nix"
],
"removed": [],
"modified": [
"nix/stackpanel/devshell/core.nix"
]
},
{
"id": "faeed18b9d902cc5488a0bffe2be17caecc13286",
"tree_id": "fce80a12f6f610d010513494298ed33a6ef02c47",
"distinct": true,
"message": "feat(reload): Phase 6 - polish\n\nKeybindings:\n- Ctrl+Alt+R: triggers immediate rebuild (sends SwapReady into event loop)\n- Ctrl+Alt+L: prints list of currently watched files to stdout\n- Implemented via handle_keybinding() checking ESC+Ctrl sequences\n- 3 new tests: ctrl_alt_r, ctrl_alt_l, ordinary_keystrokes_ignored\n\nFile logging:\n- --log FILE flag writes tracing output to a file\n- Auto-detects $STACKPANEL_STATE_DIR/reload.log when flag is absent\n- Uses tracing-appender non-blocking writer\n\nCI graceful degradation:\n- exec_direct() path (non-TTY) was already in place from Phase 1\n- is_tty() check bypasses all PTY/status-line machinery in CI\n\n37 tests passing, 0 failures\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T03:34:10-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/faeed18b9d902cc5488a0bffe2be17caecc13286",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:34:10-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T03:34:10-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/stackpanel-reload/Cargo.lock",
"apps/stackpanel-reload/Cargo.toml",
"apps/stackpanel-reload/src/main.rs",
"apps/stackpanel-reload/src/pty_manager.rs"
]
},
{
"id": "828961527d342d7cda21ab88bcd8f88986ee196b",
"tree_id": "e1d16473960dfcbb70a882e07514991ab20c9fcc",
"distinct": true,
"message": "docs(reload): add README quickstart\n\nCo-Authored-By: Oz <oz-agent@warp.dev>",
"timestamp": "2026-03-27T04:04:06-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/828961527d342d7cda21ab88bcd8f88986ee196b",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T04:04:06-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T04:04:06-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/README.md"
],
"removed": [],
"modified": []
},
{
"id": "a0e35feaec406a08bc81478957b5e1044b687e23",
"tree_id": "51c62e4ea9118edf98bc554251776bc425518602",
"distinct": true,
"message": "fix(reload): upgrade portable-pty 0.8 -> 0.9\n\nFixes fatal crash: portable-pty 0.8 asserts on PTY write failure.\n0.9 handles it gracefully.",
"timestamp": "2026-03-27T18:21:25-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/a0e35feaec406a08bc81478957b5e1044b687e23",
"author": {
"name": "oz",
"email": "me@cooperm.com",
"date": "2026-03-27T18:17:22-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-27T18:21:25-07:00",
"username": "czxtm"
},
"added": [],
"removed": [],
"modified": [
"apps/stackpanel-reload/Cargo.lock",
"apps/stackpanel-reload/Cargo.toml"
]
},
{
"id": "89a22b775e3c7820b6ef5a679480a23cc3899c5b",
"tree_id": "ac2c87bf4d09231526a5113e1e35aa592a0845fb",
"distinct": true,
"message": "chore: update stackpanel reload dependencies",
"timestamp": "2026-03-28T03:01:37-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/89a22b775e3c7820b6ef5a679480a23cc3899c5b",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-28T03:01:37-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-28T03:01:37-07:00",
"username": "czxtm"
},
"added": [
"apps/stackpanel-reload/.stack/keys/local.pub"
],
"removed": [],
"modified": [
".stack/config.nix",
"apps/stackpanel-reload/Cargo.lock",
"apps/stackpanel-reload/Cargo.toml",
"apps/stackpanel-reload/src/pty_manager.rs",
"flake.lock"
]
},
{
"id": "e6f18a546f8d7a5d9ffc8b156e3bdd1a37942957",
"tree_id": "ea3acc19102ce7ccd0dbc997356d6a839b14d03e",
"distinct": true,
"message": "fix: prefer worktree root over parent marker",
"timestamp": "2026-03-30T04:52:37-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/e6f18a546f8d7a5d9ffc8b156e3bdd1a37942957",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-30T04:52:37-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-30T04:52:37-07:00",
"username": "czxtm"
},
"added": [
"tests/test_worktree_root.sh"
],
"removed": [],
"modified": [
"nix/stackpanel/lib/paths.nix"
]
}
],
"head_commit": {
"id": "e6f18a546f8d7a5d9ffc8b156e3bdd1a37942957",
"tree_id": "ea3acc19102ce7ccd0dbc997356d6a839b14d03e",
"distinct": true,
"message": "fix: prefer worktree root over parent marker",
"timestamp": "2026-03-30T04:52:37-07:00",
"url": "https://github.com/darkmatter/stackpanel/commit/e6f18a546f8d7a5d9ffc8b156e3bdd1a37942957",
"author": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-30T04:52:37-07:00",
"username": "czxtm"
},
"committer": {
"name": "Cooper Maruyama",
"email": "me@cooperm.com",
"date": "2026-03-30T04:52:37-07:00",
"username": "czxtm"
},
"added": [
"tests/test_worktree_root.sh"
],
"removed": [],
"modified": [
"nix/stackpanel/lib/paths.nix"
]
}
}