Skip to content

Install fixes, skill dedupe, and CI - #25

Merged
rwjblue-glean merged 13 commits into
masterfrom
rwjblue/dotfiles-improvements-1628
Nov 5, 2026
Merged

rwjblue-glean merged 13 commits into
masterfrom
rwjblue/dotfiles-improvements-1628

Conversation

@rwjblue

@rwjblue rwjblue commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Implements the follow-ups from the repo review: install-task fixes, removal of duplicated agent skills, a new CI workflow, and doc updates. Each change is its own commit.

Script and install fixes

  • scripts/commit_changed_file.sh is now bash, to match its extension. It detects new files with git status --porcelain and commits only the named path, so unrelated staged changes are left alone.
  • dot:install: with FORCE=true, existing symlinks are replaced and real files or directories are moved into one per-run backup directory, ${XDG_STATE_HOME:-~/.local/state}/dotfiles/backups/<timestamp>/, instead of being deleted with rm -rf. Each backup keeps its path relative to $HOME. The run prints where backups went and how to clear them. The duplicate Linux-only jj link is gone.
  • system:install no longer runs tools:update, so ./install installs the locked tool versions instead of upgrading everything.
  • SHARED_BINUTILS_PATH is defined once in mise/config.toml instead of in four tasks. It can't be overridden, because the Cargo path dependencies in packages/binutils/Cargo.toml hard-code the same sibling checkout.
  • ./install now runs with set -euo pipefail and downloads mise with curl -fsSL.
  • agent-review.nvim: repo_root now falls back to git when jj isn't installed. Before, Neovim raised an error for the missing executable, so the git fallback never ran.

Skills

  • Removed the nine skills under packages/codex/skills/ that were byte-identical copies of packages/agents/skills/. Codex already reads ~/.agents/skills. fastmail-email stays Codex-only because it reads ~/.codex/config.toml.
  • .claude/skills/{dotfiles,dotfiles-tasks,nvim} are now symlinks to the .agents/skills copies, which had started to drift. .gitignore now allows those symlinks.
  • New mise run skills:check task that fails on either kind of duplication.

CI

.github/workflows/ci.yml runs:

  • shellcheck at --severity=warning
  • skills:check
  • cargo fmt --check, cargo clippy -D warnings and cargo test in packages/binutils, against a cloned shared_binutils
  • agent-review:test

shfmt is left out because it would collapse the hand-aligned link_dotfile columns in dot:install.

Docs

README.md, AGENTS.md, the dotfiles skill, and the installation and symlink specs now describe the new FORCE behavior, where shared_binutils must live, the skills layout, CI, and the bash convention for tasks and scripts.

Checks run locally

  • Exercised commit_changed_file.sh in a scratch repo with a new file, an unchanged file, and a modified file alongside other staged changes.
  • Exercised link_dotfile with FORCE=true in a scratch $HOME against a real directory, a real file, and a symlink pointing elsewhere. The file and directory landed under one backup directory, and nothing was left next to the originals.
  • mise env: SHARED_BINUTILS_PATH resolves to the sibling checkout and ignores an existing value in the environment.
  • mise run skills:check: passes on the repo, and fails for an injected Codex duplicate and for a non-symlinked .claude copy.
  • mise run agent-review:test: 34 of 34 pass. Six of them failed before the jj fallback fix.
  • cargo fmt --check, cargo clippy and cargo test in packages/binutils. The crates have no tests yet.
  • shellcheck at warning severity, and actionlint on the workflow.
Open in Web Open in Cursor 

cursoragent and others added 11 commits November 5, 2026 00:36
Port the script to bash so it matches its .sh extension, use
git status --porcelain so new files are committed, and limit the
commit to the named path so unrelated staged changes are left alone.

Co-authored-by: Robert Jackson <me@rwjblue.com>
FORCE=true now replaces symlinks and moves real files or directories to
<dest>.bak.<timestamp> instead of rm -rf. The Linux-only jj link
duplicated the cross-platform one.

Co-authored-by: Robert Jackson <me@rwjblue.com>
system:install ran tools:update, so every ./install upgraded all tools
and rewrote mise.lock. Upgrades stay available via tools:update.

Co-authored-by: Robert Jackson <me@rwjblue.com>
The path was copied into four tasks. It now lives in mise/config.toml
and respects an existing SHARED_BINUTILS_PATH override.

Co-authored-by: Robert Jackson <me@rwjblue.com>
Co-authored-by: Robert Jackson <me@rwjblue.com>
Nine skills under packages/codex/skills were byte-identical copies of
packages/agents/skills, which dot:install already links to
~/.agents/skills for Codex. fastmail-email stays Codex-only because it
reads the Fastmail MCP entry from ~/.codex/config.toml.

Co-authored-by: Robert Jackson <me@rwjblue.com>
The dotfiles, dotfiles-tasks and nvim skills were duplicated in
.agents/skills and .claude/skills and had started to drift. Keep
.agents/skills canonical and allow symlinks through .gitignore.

Co-authored-by: Robert Jackson <me@rwjblue.com>
systemlist raises E475 for a missing executable, so repo_root errored
instead of reaching the git fallback on machines without jj.

Co-authored-by: Robert Jackson <me@rwjblue.com>
Co-authored-by: Robert Jackson <me@rwjblue.com>
shfmt is left out because it would collapse the aligned link_dotfile
columns in dot:install.

Co-authored-by: Robert Jackson <me@rwjblue.com>
Document FORCE backups, SHARED_BINUTILS_PATH, the skills layout, CI,
and that mise tasks and scripts are bash. Point the README at
`mise tasks` instead of a hand-maintained list.

Co-authored-by: Robert Jackson <me@rwjblue.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-05T00:42:59.574852Z 702ea10 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 702ea10de1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mise/config.toml Outdated
min_version = "2025.10.0"

[env]
SHARED_BINUTILS_PATH = "{{ get_env(name='SHARED_BINUTILS_PATH', default=config_root ~ '/../../malleatus/shared_binutils') }}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Make the binutils build honor the shared checkout override

When SHARED_BINUTILS_PATH points to a checkout outside the default location, binutils:install now clones and builds that checkout, but the subsequent local build still resolves latest_bin, test_utils, and fixturify through the hard-coded paths in packages/binutils/Cargo.toml:25–27. On a machine without a checkout at the default location, installation therefore fails while loading those dependencies; if both locations exist, it builds against a different checkout than the one selected. Make dependency resolution use the selected checkout as well so the newly documented override works throughout installation.

AGENTS.md reference: AGENTS.md:L13-L13

Useful? React with 👍 / 👎.

cursoragent and others added 2 commits November 5, 2026 04:01
Instead of leaving <dest>.bak.<timestamp> next to each replaced file,
move them under ${XDG_STATE_HOME:-~/.local/state}/dotfiles/backups/<run>/
mirroring the path relative to $HOME, so all backups can be cleared at
once.

Co-authored-by: Robert Jackson <me@rwjblue.com>
Cargo path dependencies in packages/binutils/Cargo.toml hard-code the
sibling checkout and cannot be redirected, so an override would build
or clone a different checkout than the one cargo resolves.

Co-authored-by: Robert Jackson <me@rwjblue.com>
@rwjblue-glean
rwjblue-glean merged commit 897726b into master Nov 5, 2026
4 checks passed
@rwjblue-glean
rwjblue-glean deleted the rwjblue/dotfiles-improvements-1628 branch November 5, 2026 04:28
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.

3 participants