Skip to content

feat(roborev): run reviews locally on each host - #2269

Merged
shunkakinoki merged 2 commits into
mainfrom
codex/roborev-local
Aug 5, 2026
Merged

feat(roborev): run reviews locally on each host#2269
shunkakinoki merged 2 commits into
mainfrom
codex/roborev-local

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • enable the RoboRev daemon on Galactica, Kyber, and Matic with a loopback-only listener
  • hydrate shared local post-commit and agent-session hooks for Codex, Claude, and Droid
  • install a global Git post-commit hook while preserving repository-local hook overrides

Verification

  • shellspec spec/activate_roborev_spec.sh spec/roborev_hydrate_spec.sh spec/roborev_hooks_spec.sh spec/coverage_spec.sh
  • make build

Summary by cubic

Run RoboRev reviews locally per host with a loopback-only daemon and a shared agent hook. Enables on galactica, kyber, and matic; removes the unused global Git post-commit hook.

  • New Features

    • Run roborev daemon on galactica, kyber, and matic, bound to 127.0.0.1:7373.
    • Add shared hook config/shared/hooks/roborev-agent.sh that forwards agent events to the local daemon; wire into Codex/Claude/Factory settings (agent/session, post-tool, stop) with timeouts and allowlist updates.
    • Update make systemctl-roborev to restart on kyber; add tests for daemon bind and hook wiring.
  • Migration

    • Ensure ~/.local/bin/roborev is installed on each host.
    • Rebuild and restart the user service (e.g., make build then make systemctl-roborev).

Written for commit 857d272. Summary will update on new commits.

Review in cubic

@indent-zero

indent-zero Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
PR Summary

Adds RoboRev "run reviews locally on each host" wiring: enables the daemon on kyber (in addition to galactica/matic), binds it to 127.0.0.1:7373, ships two new hook scripts, wires the agent hook into Claude/Codex/Factory tool events, and installs a global git post-commit hook by setting core.hooksPath for every repository on the machine.

  • Enable roborev.service on kyber in the Makefile helper and in home-manager/services/roborev (isGalactica || isKyber || isMatic).
  • Pass --addr 127.0.0.1:7373 to the daemon under both launchd and systemd; hook scripts talk to --server 127.0.0.1:7373.
  • Add config/shared/hooks/roborev-agent.sh (fires agent-hook run) and config/shared/hooks/roborev-post-commit.sh (submits git rev-parse --show-toplevel), both no-op when ~/.local/bin/roborev is missing.
  • Wire the agent hook into Claude (PreToolUse Bash / PostToolUse Bash / Stop), Codex (PreToolUse Bash / PostToolUse Bash / Stop), and Factory (PreToolUse Execute + new PostToolUse Execute and Stop groups); extend config/factory/activate-settings.sh allow-list to keep the managed hook across merges.
  • Install ~/.local/bin/roborev-agent-hook and ~/.local/bin/roborev-post-commit from config/roborev/default.nix.
  • Set global core.hooksPath to ~/.config/git/hooks and install a global post-commit shim from home-manager/programs/git.
  • Add spec/roborev_hooks_spec.sh, expand spec/activate_roborev_spec.sh, and update spec/coverage_spec.sh for the new scripts.

Issues

7 potential issues found:

  • On RoboRev-enabled hosts, the global post-commit hook now enqueues every commit in every repo the user touches (dotfiles, scratch, third-party clones) to the daemon — unless the daemon filters server-side, the review queue will be polluted with unrelated repos. → Autofix
  • The new Claude roborev-agent.sh entries are missing async: true and timeout, unlike every neighboring hook in the same PreToolUse/PostToolUse/Stop groups and unlike the Codex/Factory entries that use "timeout": 10 — every Claude Bash tool call and Stop event will block synchronously on the roborev daemon. → Autofix
  • In spec/roborev_hooks_spec.sh, the Describe 'config/factory/activate-settings.sh' block is accidentally nested inside the first Describe 'config/shared/hooks/roborev-agent.sh' (no End between L7 and L9), so specs run as nested blocks with misleading output rather than as three sibling describes. → Autofix
  • home.file."${config.xdg.configHome}/git/hooks/post-commit" breaks the codebase convention (xdg.configFile."<relative>" used in config/amp, config/ghostty, config/hyprland, etc.) and passes an absolute path to home.file, whose keys are documented to be relative to $HOME. → Autofix
  • ~/.local/bin/roborev-agent-hook and ~/.local/bin/roborev-post-commit are installed by config/roborev/default.nix but no consumer references them — every hook (Claude/Codex/Factory/git) invokes the scripts directly from $HOME/dotfiles/config/shared/hooks/..., so these are dead files. → Autofix
  • Setting core.hooksPath globally silently disables every per-repo .git/hooks/* on the machine — pre-commit/husky/lefthook and any project-specific pre-commit/commit-msg/pre-push hooks will stop firing in every repo. → Autofix
  • home-manager/services/roborev/default.nix is missing Unit.X-SwitchMethod = "restart"; — this PR changes ExecStart (adds --addr 127.0.0.1:7373), so without this the old daemon can keep running after a home-manager switch and continue serving on the wrong address. Convention: openclaw and cpa-manager-plus in this repo already use X-SwitchMethod = "restart". → Autofix

CI Checks

Waiting for CI checks...


⚡ Autofix All Issues

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@shunkakinoki, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 47 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4c578151-ee70-433f-b407-2886fdc11d38

📥 Commits

Reviewing files that changed from the base of the PR and between 73473e6 and 857d272.

📒 Files selected for processing (3)
  • spec/activate_roborev_spec.sh
  • spec/coverage_spec.sh
  • spec/roborev_hooks_spec.sh
📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Enabled RoboRev on Kyber hosts in addition to existing environments.
    • Added automatic agent-event and post-commit integration with the local RoboRev service.
    • Configured Git to run RoboRev checks after commits.
    • Added automatic service restart support across Matic and Kyber hosts.
  • Tests

    • Added coverage for service activation, local hooks, repository submission, and hook configuration.

Walkthrough

RoboRev now runs on Kyber and uses a local daemon at 127.0.0.1:7373. Home Manager installs agent and post-commit hooks. Claude, Codex, and Factory invoke the agent hook for lifecycle events. Specs cover activation, registration, submission, and shell-script coverage.

Changes

RoboRev hook integration

Layer / File(s) Summary
Daemon enablement and hook installation
home-manager/services/roborev/default.nix, config/roborev/default.nix, home-manager/programs/git/default.nix
RoboRev runs on Kyber and uses 127.0.0.1:7373. Home Manager installs executable hooks and configures Git’s hooks path.
Hook event forwarding
config/shared/hooks/*
The agent hook forwards lifecycle events to RoboRev. The post-commit hook submits the repository root and ignores command failures.
Agent tool hook registration
config/claude/settings.json, config/codex/hooks.json, config/factory/settings.json, config/factory/settings.tpl.json, config/factory/activate-settings.sh
Claude, Codex, and Factory invoke roborev-agent.sh for tool and stop events. Factory cleanup recognizes the managed hook.
Activation, coverage, and host operations
spec/activate_roborev_spec.sh, spec/roborev_hooks_spec.sh, spec/coverage_spec.sh, Makefile
Specs verify service enablement, daemon binding, hook installation, registration, repository submission, and shell-script coverage. systemctl-roborev supports Kyber.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant Agent
  participant roborev-agent.sh
  participant RoboRevDaemon
  participant Git
  participant roborev-post-commit.sh
  Agent->>roborev-agent.sh: send lifecycle event
  roborev-agent.sh->>RoboRevDaemon: run agent-hook at 127.0.0.1:7373
  Git->>roborev-post-commit.sh: run post-commit hook
  roborev-post-commit.sh->>RoboRevDaemon: submit repository with post-commit --repo
Loading

Poem

A rabbit hops where RoboRev starts,
Kyber joins the service’s hearts.
Hooks send events through local light,
Commits report their work just right.
“Sniff!” says Bunny, “All paths align.”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: running RoboRev reviews locally on each host.
Description check ✅ Passed The description directly covers the daemon, local hooks, Git integration, and verification changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/roborev-local

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread home-manager/programs/git/default.nix Outdated
};
core = {
editor = "nvim -c \"stopinsert\"";
hooksPath = "${config.xdg.configHome}/git/hooks";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Global core.hooksPath disables all per-repo hooks

git help config under core.hooksPath: when set, git looks only here for hooks and ignores $GIT_DIR/hooks/*. Setting this in the global user config means every repo on the machine will lose its own .git/hooks/* — including hooks installed by:

  • pre-commit (the Python framework)
  • husky, lefthook, simple-git-hooks
  • Any project-managed commit-msg, pre-push, pre-rebase, post-checkout, post-merge, etc.

The only hook that will ever run globally is the post-commit shim added here. If the goal is just to add a global post-commit, consider one of:

  • Point hooksPath at a directory that dispatches to both the roborev shim and the per-repo hook (delegator script that also execs $GIT_DIR/hooks/<hookname> when present); or
  • Install the post-commit hook via git config --global init.templateDir + a template hooks/ folder (only affects newly-initialized repos, but doesn't override existing ones); or
  • Have roborev register itself per-repo when it starts reviewing that repo, instead of globally.

As written this is a large behavior change for every repo you commit in.

exit 0
fi

"$ROBOREV_BIN" --server "127.0.0.1:7373" post-commit --repo "$(git rev-parse --show-toplevel)" || true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fires on every commit in every repo

Because core.hooksPath in home-manager/programs/git/default.nix makes this the global post-commit for the user, on hosts where ~/.local/bin/roborev exists this will submit every commit in every repository (dotfiles, throwaway scratch repos, third-party clones you're just patching, work repos that shouldn't leave the box, etc.). If the daemon doesn't have a server-side allow-list, the review queue will be flooded with unrelated repos and possibly repos you don't want RoboRev seeing.

Consider gating here — e.g. only submit when the toplevel matches a configured allow-list or a marker file (.roborev at the repo root) is present.

},
{
"command": "$HOME/dotfiles/config/shared/hooks/roborev-agent.sh",
"type": "command"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing async/timeout

Every other hook in this PostToolUse Bash group (and in the new PreToolUse Bash / Stop groups added below) uses "async": true with an explicit "timeout". The Codex and Factory entries for the same script use "timeout": 10. As written this Claude entry runs synchronously with no timeout, so every Bash tool call and every Stop event will block until roborev responds — up to Claude's default hook timeout (60s) if the daemon is missing or slow.

Suggest matching the neighbors:

{
  "async": true,
  "command": "$HOME/dotfiles/config/shared/hooks/roborev-agent.sh",
  "timeout": 10,
  "type": "command"
}

Same fix needed at the other two new occurrences in this file (around L285 and L465).

Comment thread config/roborev/default.nix Outdated
);
in
{
home.file.".local/bin/roborev-agent-hook" = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused install

Nothing invokes ~/.local/bin/roborev-agent-hook or ~/.local/bin/roborev-post-commit. All hook configurations — config/claude/settings.json, config/codex/hooks.json, config/factory/settings*.json, and home-manager/programs/git/default.nix — point directly at the source scripts under $HOME/dotfiles/config/shared/hooks/. These home.file entries just create dead copies in ~/.local/bin/.

Either drop them, or switch all callers to the ~/.local/bin/ paths so the installed copies are the single source of truth. Also note: config/roborev/default.nix is imported unconditionally from config/default.nix:44, so these files land on hosts where the daemon is disabled too, which is inconsistent with the isGalactica || isKyber || isMatic gate on the service.

Comment thread home-manager/programs/git/default.nix Outdated
{ lib, ... }:
{ config, lib, ... }:
{
home.file."${config.xdg.configHome}/git/hooks/post-commit" = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use xdg.configFile for XDG paths

Every other XDG-managed file in this repo uses xdg.configFile."<relative>" (e.g. config/amp/default.nix:2, config/ghostty/default.nix:9, config/hyprland/default.nix:20). home.file keys are documented as relative to $HOME; interpolating ${config.xdg.configHome} yields an absolute path here.

Suggested:

xdg.configFile."git/hooks/post-commit" = {
  source = ../../../config/shared/hooks/roborev-post-commit.sh;
  executable = true;
  force = true;
};

The output should include '127.0.0.1:7373'
End

Describe 'config/factory/activate-settings.sh'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accidentally nested Describe

There's no End between L7 and this Describe, so config/factory/activate-settings.sh runs as a child block of config/shared/hooks/roborev-agent.sh instead of as a sibling. It still parses (End counts balance), but spec output will report config/factory/activate-settings.sh nested under config/shared/hooks/roborev-agent.sh.

Add an End after L7 to close the first Describe, and drop one of the two Ends on L14-15 so the counts remain balanced. Same fix would apply if you want the config/shared/hooks/roborev-post-commit.sh block to be a top-level sibling too.

@shunkakinoki
shunkakinoki merged commit 90923c5 into main Aug 5, 2026
3 of 4 checks passed
@shunkakinoki
shunkakinoki deleted the codex/roborev-local branch August 5, 2026 07:52

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
spec/activate_roborev_spec.sh (1)

22-24: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test behavior instead of source text.

These assertions can pass when a string appears in an unused branch or when a hook path exists but is not executable. Assert rendered daemon arguments, regular executable hook files, and the commands received by a stub RoboRev client.

  • spec/activate_roborev_spec.sh#L22-L24: validate the evaluated host enablement condition.
  • spec/activate_roborev_spec.sh#L42-L47: verify the daemon service arguments use 127.0.0.1:7373.
  • spec/activate_roborev_spec.sh#L49-L56: verify both hooks are regular executable files.
  • spec/roborev_hooks_spec.sh#L3-L7: execute the agent-hook path with representative input.
  • spec/roborev_hooks_spec.sh#L9-L13: verify managed-hook cleanup recognizes the installed command.
  • spec/roborev_hooks_spec.sh#L17-L21: assert the post-commit command receives the repository path.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@spec/activate_roborev_spec.sh` around lines 22 - 24, Replace source-text
assertions with behavioral tests: in spec/activate_roborev_spec.sh lines 22-24,
validate evaluated host enablement; lines 42-47, assert rendered daemon
arguments use the loopback address and port; lines 49-56, verify both hook paths
are regular executable files. In spec/roborev_hooks_spec.sh lines 3-7, execute
the agent hook with representative input; lines 9-13, verify cleanup recognizes
the installed managed-hook command; lines 17-21, assert the post-commit command
receives the repository path, using a stub RoboRev client to capture commands.
config/claude/settings.json (1)

162-165: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Avoid blocking on informational RoboRev events.

config/shared/hooks/roborev-agent.sh:1-11 forwards the event to the local daemon. PostToolUse and Stop do not need to gate the completed tool or session termination. Mark these hooks as "async": true. If synchronous ordering is required, add a short explicit timeout and document the requirement.

  • config/claude/settings.json#L162-L165: make PostToolUse asynchronous or add a timeout.
  • config/claude/settings.json#L463-L466: make Stop asynchronous or add a timeout.
  • config/codex/hooks.json#L24-L33: make PostToolUse asynchronous.
  • config/codex/hooks.json#L195-L199: make Stop asynchronous.
  • config/factory/settings.json#L58-L67: make PostToolUse asynchronous.
  • config/factory/settings.json#L77-L87: make Stop asynchronous.
  • config/factory/settings.tpl.json#L58-L67: make PostToolUse asynchronous.
  • config/factory/settings.tpl.json#L77-L87: make Stop asynchronous.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@config/claude/settings.json` around lines 162 - 165, PostToolUse and Stop
RoboRev hooks currently block tool completion or session termination on
informational events. In config/claude/settings.json lines 162-165 and 463-466,
config/codex/hooks.json lines 24-33 and 195-199, config/factory/settings.json
lines 58-67 and 77-87, and config/factory/settings.tpl.json lines 58-67 and
77-87, update the PostToolUse and Stop hook entries invoking roborev-agent.sh to
run asynchronously with "async": true; do not add timeouts unless synchronous
ordering is explicitly required.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@home-manager/services/roborev/default.nix`:
- Line 51: Add X-SwitchMethod = "restart"; to the roborev systemd unit
containing ExecStart, ensuring Home Manager restarts the daemon when the
ExecStart command changes. Do not add X-RestartIfChanged.

In `@spec/roborev_hooks_spec.sh`:
- Around line 14-15: Remove the unmatched top-level End statement from
roborev_hooks_spec.sh, preserving the two End statements that close the existing
Describe blocks.

---

Nitpick comments:
In `@config/claude/settings.json`:
- Around line 162-165: PostToolUse and Stop RoboRev hooks currently block tool
completion or session termination on informational events. In
config/claude/settings.json lines 162-165 and 463-466, config/codex/hooks.json
lines 24-33 and 195-199, config/factory/settings.json lines 58-67 and 77-87, and
config/factory/settings.tpl.json lines 58-67 and 77-87, update the PostToolUse
and Stop hook entries invoking roborev-agent.sh to run asynchronously with
"async": true; do not add timeouts unless synchronous ordering is explicitly
required.

In `@spec/activate_roborev_spec.sh`:
- Around line 22-24: Replace source-text assertions with behavioral tests: in
spec/activate_roborev_spec.sh lines 22-24, validate evaluated host enablement;
lines 42-47, assert rendered daemon arguments use the loopback address and port;
lines 49-56, verify both hook paths are regular executable files. In
spec/roborev_hooks_spec.sh lines 3-7, execute the agent hook with representative
input; lines 9-13, verify cleanup recognizes the installed managed-hook command;
lines 17-21, assert the post-commit command receives the repository path, using
a stub RoboRev client to capture commands.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 99ccc32a-01a4-4e59-9b60-403f0273d0f4

📥 Commits

Reviewing files that changed from the base of the PR and between 23ec43c and 73473e6.

📒 Files selected for processing (14)
  • Makefile
  • config/claude/settings.json
  • config/codex/hooks.json
  • config/factory/activate-settings.sh
  • config/factory/settings.json
  • config/factory/settings.tpl.json
  • config/roborev/default.nix
  • config/shared/hooks/roborev-agent.sh
  • config/shared/hooks/roborev-post-commit.sh
  • home-manager/programs/git/default.nix
  • home-manager/services/roborev/default.nix
  • spec/activate_roborev_spec.sh
  • spec/coverage_spec.sh
  • spec/roborev_hooks_spec.sh

Service = {
Type = "notify";
ExecStart = "${roborevBin} daemon run";
ExecStart = "${roborevBin} daemon run --addr ${serverAddr}";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
rg -n -C 5 'X-SwitchMethod|X-RestartIfChanged|ExecStart|systemd\.user\.services' \
  home-manager/services/roborev/default.nix

Repository: shunkakinoki/dotfiles

Length of output: 808


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "== home-manager/services/roborev/default.nix =="
cat -n home-manager/services/roborev/default.nix | sed -n '1,120p'

echo
echo "== package versions/providers mentioning robust/home-manager context =="
rg -n "home-manager|flake\.nix|nixpkgs|systemd\.user\.services|X-SwitchMethod|X-RestartIfChanged" -S . \
  --glob '!result*' --glob '!*.swp' --glob '!*.swn' | sed -n '1,220p'

Repository: shunkakinoki/dotfiles

Length of output: 21405


Add X-SwitchMethod = "restart"; to the roborev systemd unit.

ExecStart changes without X-SwitchMethod can leave the old daemon running after a Home Manager switch. Do not use X-RestartIfChanged.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@home-manager/services/roborev/default.nix` at line 51, Add X-SwitchMethod =
"restart"; to the roborev systemd unit containing ExecStart, ensuring Home
Manager restarts the daemon when the ExecStart command changes. Do not add
X-RestartIfChanged.

Source: Learnings

Comment thread spec/roborev_hooks_spec.sh
@@ -45,7 +48,7 @@ lib.mkIf enabled {
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing X-SwitchMethod = "restart";

This PR changes ExecStart (adds --addr 127.0.0.1:7373). Without Unit.X-SwitchMethod set, home-manager may not restart the daemon on switch, so the old process keeps running on the old (default) address and hook callers connecting to 127.0.0.1:7373 will fail until the user manually restarts the unit.

Every other daemon in this repo picks one of the X-SwitchMethod values — openclaw and cpa-manager-plus use "restart"; cass/caam/docker-postgres/obsidian/etc. use "keep-old". For a service whose invocation just changed, "restart" is the right pick:

Unit = {
  Description = "roborev code review daemon";
  Documentation = [ "https://github.com/roborev-dev/roborev" ];
  After = [ "network.target" ];
  X-SwitchMethod = "restart";
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant