diff --git a/home/home-server.nix b/home/home-server.nix new file mode 100644 index 0000000..e676a50 --- /dev/null +++ b/home/home-server.nix @@ -0,0 +1,24 @@ +{ pkgs, globalInputs, system, ... }: + +{ + # Home Manager configuration for servers (minimal with development tools) + home.username = "johno"; + home.homeDirectory = "/home/johno"; + home.stateVersion = "24.05"; + + # Minimal roles for server with development capability + home.roles = { + base.enable = true; + development.enable = true; + tmux.enable = true; + }; + + targets.genericLinux.enable = true; + home.sessionVariables = {}; + home.sessionPath = []; + + imports = [ + ./roles + ./roles/base-linux + ]; +} diff --git a/home/roles/development/default.nix b/home/roles/development/default.nix index f9b3a1c..b9d8ff0 100644 --- a/home/roles/development/default.nix +++ b/home/roles/development/default.nix @@ -85,11 +85,20 @@ in fi done + # Copy local skills from this repo + for file in ${./skills}/*.md; do + if [ -f "$file" ]; then + filename=$(basename "$file" .md) + dest="$HOME/.claude/commands/''${filename}.md" + cp "$file" "$dest" + fi + done + $DRY_RUN_CMD echo "Claude Code humanlayer commands and agents installed successfully${ if cfg.allowArbitraryClaudeCodeModelSelection then " (model specifications preserved)" else " (model selection removed)" - }" + } + local skills" ''; # Set up beads Claude Code integration (hooks for SessionStart/PreCompact) diff --git a/home/roles/development/skills/parallel_beads.md b/home/roles/development/skills/parallel_beads.md new file mode 100644 index 0000000..4eb38aa --- /dev/null +++ b/home/roles/development/skills/parallel_beads.md @@ -0,0 +1,198 @@ +--- +description: Orchestrate parallel bead processing with worktrees, PRs, and reviews +--- + +# Parallel Beads Workflow + +This skill orchestrates parallel bead processing using subagents. Each bead gets its own worktree, implementation, PR, and review. + +## Phase 1: Selection + +1. **Get ready beads**: Run `bd ready` to list all beads with no blockers +2. **Present selection**: Use `AskUserQuestion` with `multiSelect: true` to let the user choose which beads to work on + - Include bead ID and title for each option + - Allow selection of multiple beads + +Example: +``` +AskUserQuestion with: +- question: "Which beads do you want to work on in parallel?" +- multiSelect: true +- options from bd ready output +``` + +## Phase 2: Parallel Implementation + +For each selected bead, launch a subagent using the Task tool. All subagents should be launched in parallel (single message with multiple Task tool calls). + +### Subagent Instructions Template + +Each implementation subagent should receive these instructions: + +``` +Work on bead [BEAD_ID]: [BEAD_TITLE] + +1. **Create worktree**: + - Branch name: `bead/[BEAD_ID]` + - Worktree path: `~/wt/[REPO_NAME]/[BEAD_ID]` + - Command: `git worktree add -b bead/[BEAD_ID] ~/wt/[REPO_NAME]/[BEAD_ID]` + +2. **Review the bead requirements**: + - Run `bd show [BEAD_ID]` to understand the acceptance criteria + - Note any external issue references (GitHub issues, Linear tickets, etc.) + +3. **Implement the changes**: + - Work in the worktree directory + - Complete all acceptance criteria listed in the bead + - Run any relevant tests or checks + +4. **Commit and push**: + - Stage all changes: `git add -A` + - Create a descriptive commit message + - Push the branch: `git push -u origin bead/[BEAD_ID]` + +5. **Create a PR**: + - Detect hosting provider from origin URL: `git remote get-url origin` + - If URL contains `github.com`, use `gh`; otherwise use `tea` (Gitea/Forgejo) + - PR title: "[BEAD_ID] [BEAD_TITLE]" + - PR body must include: + - Reference to bead ID: "Implements bead: [BEAD_ID]" + - Any external issue references from the bead (e.g., "Closes #123") + - Summary of changes + - For GitHub (`gh`): + ```bash + gh pr create --title "[BEAD_ID] [BEAD_TITLE]" --body "$(cat <<'EOF' + ## Summary + [Brief description of changes] + + ## Bead Reference + Implements bead: [BEAD_ID] + + ## External Issues + [Any linked issues from the bead] + + ## Changes + - [List of changes made] + EOF + )" + ``` + - For Gitea (`tea`): + ```bash + tea pr create --head bead/[BEAD_ID] --base main \ + --title "[BEAD_ID] [BEAD_TITLE]" \ + --description "## Summary + [Brief description of changes] + + ## Bead Reference + Implements bead: [BEAD_ID] + + ## External Issues + [Any linked issues from the bead] + + ## Changes + - [List of changes made]" + ``` + +6. **Report results**: + - Return: PR URL, bead ID, success/failure status + - If blocked or unable to complete, explain what's blocking progress +``` + +### Launching Subagents + +Use `subagent_type: "general-purpose"` for implementation subagents. Launch all selected beads' subagents in a single message for parallel execution: + +``` + +``` + +Collect results from all subagents before proceeding. + +## Phase 3: Parallel Review + +After all implementation subagents complete, launch review subagents for each PR. + +### Review Subagent Instructions Template + +``` +Review PR for bead [BEAD_ID] + +1. **Detect hosting provider**: Run `git remote get-url origin` - if it contains `github.com` use `gh`, otherwise use `tea` + +2. **Read the PR**: + - For GitHub: `gh pr view [PR_NUMBER] --json title,body,additions,deletions,files` + - For Gitea: `tea pr view [PR_NUMBER]` + - View the diff: `git diff main...bead/[BEAD_ID]` + +3. **Review against acceptance criteria**: + - Run `bd show [BEAD_ID]` to get the acceptance criteria + - Verify each criterion is addressed + +4. **Leave review comments**: + - For GitHub: `gh pr review [PR_NUMBER] --comment --body "[COMMENTS]"` + - For Gitea: `tea pr review [PR_NUMBER] --comment "[COMMENTS]"` + - Include: + - Acceptance criteria checklist (which are met, which might be missing) + - Code quality observations + - Suggestions for improvement + +5. **Return summary**: + - Overall assessment (ready to merge / needs changes) + - Key findings +``` + +Launch all review subagents in parallel. + +## Phase 4: Cleanup and Summary + +After reviews complete: + +1. **Clean up worktrees**: + ```bash + git worktree remove ~/wt/[REPO_NAME]/[BEAD_ID] --force + ``` + Do this for each bead's worktree. + +2. **Provide final summary**: + Present a table or list with: + - Bead ID + - PR URL + - Status (success / failed / blocked) + - Review summary + - Any failures or blockers encountered + +Example output: +``` +## Parallel Beads Summary + +| Bead | PR | Status | Review | +|------|-----|--------|--------| +| beads-abc | #123 | Success | Approved | +| beads-xyz | #124 | Success | Needs changes | +| beads-123 | - | Failed | Blocked by missing dependency | + +### Failures/Blockers +- beads-123: Could not complete because [reason] + +### Next Steps +- Review PRs that need changes +- Address blockers for failed beads +``` + +## Error Handling + +- **Subagent failures**: If a subagent fails or times out, note it in the summary but continue with other beads +- **PR creation failures**: Report the error but continue with reviews of successful PRs +- **Worktree conflicts**: If a worktree already exists, ask the user if they want to remove it or skip that bead + +## Resource Limits + +- Consider limiting concurrent subagents to 3-5 to avoid overwhelming system resources +- If user selects more beads than the limit, process them in batches + +## Notes + +- This workflow integrates with the beads system (`bd` commands) +- Worktrees are created in `~/wt/[REPO_NAME]/` by convention +- Each bead gets its own isolated branch and worktree +- PRs automatically reference the bead ID for traceability diff --git a/machines/john-endesktop/MIGRATION_PLAN.md b/machines/john-endesktop/MIGRATION_PLAN.md index f09bfe0..1d68627 100644 --- a/machines/john-endesktop/MIGRATION_PLAN.md +++ b/machines/john-endesktop/MIGRATION_PLAN.md @@ -170,6 +170,7 @@ This document outlines the plan to migrate the john-endesktop server from Arch L ```bash blkid /dev/nvme0n1p5 # Note the UUID for updating hardware-configuration.nix +/dev/nvme0n1p5: LABEL="nixos" UUID="5f4ad025-bfab-4aed-a933-6638348059e5" UUID_SUB="4734d820-7b8a-4b7f-853a-026021c1d204" BLOCK_SIZE="4096" TYPE="btrfs" PARTLABEL="data" PARTUUID="9ea025df-cdb7-48fd-b5d4-37cd5d8588eb" ``` 8. **Copy your NixOS configuration to the server** @@ -388,11 +389,11 @@ After successful migration and 24-48 hours of stable operation: Pre-migration: - [x] nvme0n1p5 removal from media pool complete -- [ ] Recent backup verified (< 24 hours) -- [ ] Maintenance window scheduled -- [ ] NixOS ISO downloaded -- [ ] Bootable USB created -- [ ] NixOS config builds successfully +- [x] Recent backup verified (< 24 hours) +- [x] Maintenance window scheduled +- [x] NixOS ISO downloaded +- [x] Bootable USB created +- [x] NixOS config builds successfully During migration: - [ ] ZFS pools exported