Compare commits
54 Commits
bead/nixos
...
2bad594287
| Author | SHA1 | Date | |
|---|---|---|---|
| 2bad594287 | |||
| e59c4b00ec | |||
| f917dbf0e6 | |||
| 077d4bb147 | |||
| 5888e274e6 | |||
| 6544899d34 | |||
| dc803e6aad | |||
| b9a1b3d26b | |||
| 50f916cf2e | |||
| 74a2bb6a16 | |||
| f611a2c39f | |||
| 1f4ba6a80f | |||
| 2cc9b1c491 | |||
| 197191ce4a | |||
| 25fb086142 | |||
| 056925dd72 | |||
| 47aa5fd454 | |||
| b1d82da740 | |||
| 602d3067f0 | |||
| 5b492046e6 | |||
| dd660d65ba | |||
| d03a935912 | |||
| 3f7a909b0a | |||
| 5a705803e5 | |||
| db0f78bd4a | |||
| 81ef9def29 | |||
| 4784190104 | |||
| 791be65d8d | |||
| c6d7399d64 | |||
| 908183f53e | |||
| 83f4dc268c | |||
| 6a6d0e7726 | |||
| 14c80ae448 | |||
| 3f607a91ec | |||
| e46eb093fe | |||
| 349ae65ff2 | |||
| 57252c9ba2 | |||
| 85cccf0dc9 | |||
| c642619bae | |||
| 3e9111b670 | |||
| 206b23bfa2 | |||
| cba4f78ebc | |||
| 8bc654f39a | |||
| 5057266b7a | |||
| 02529be730 | |||
| a6f7026b16 | |||
| 6d17a62a13 | |||
| 855f777824 | |||
| ccab26f6e7 | |||
| 20536548a0 | |||
| 5a42ccda98 | |||
| 090882595b | |||
| 2c08b31bb9 | |||
| 84f5f87027 |
39
.beads/.gitignore
vendored
39
.beads/.gitignore
vendored
@@ -1,39 +0,0 @@
|
|||||||
# SQLite databases
|
|
||||||
*.db
|
|
||||||
*.db?*
|
|
||||||
*.db-journal
|
|
||||||
*.db-wal
|
|
||||||
*.db-shm
|
|
||||||
|
|
||||||
# Daemon runtime files
|
|
||||||
daemon.lock
|
|
||||||
daemon.log
|
|
||||||
daemon.pid
|
|
||||||
bd.sock
|
|
||||||
sync-state.json
|
|
||||||
last-touched
|
|
||||||
|
|
||||||
# Local version tracking (prevents upgrade notification spam after git ops)
|
|
||||||
.local_version
|
|
||||||
|
|
||||||
# Legacy database files
|
|
||||||
db.sqlite
|
|
||||||
bd.db
|
|
||||||
|
|
||||||
# Worktree redirect file (contains relative path to main repo's .beads/)
|
|
||||||
# Must not be committed as paths would be wrong in other clones
|
|
||||||
redirect
|
|
||||||
|
|
||||||
# Merge artifacts (temporary files from 3-way merge)
|
|
||||||
beads.base.jsonl
|
|
||||||
beads.base.meta.json
|
|
||||||
beads.left.jsonl
|
|
||||||
beads.left.meta.json
|
|
||||||
beads.right.jsonl
|
|
||||||
beads.right.meta.json
|
|
||||||
|
|
||||||
# NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here.
|
|
||||||
# They would override fork protection in .git/info/exclude, allowing
|
|
||||||
# contributors to accidentally commit upstream issue databases.
|
|
||||||
# The JSONL files (issues.jsonl, interactions.jsonl) and config files
|
|
||||||
# are tracked by git by default since no pattern above ignores them.
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
# Beads - AI-Native Issue Tracking
|
|
||||||
|
|
||||||
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
|
|
||||||
|
|
||||||
## What is Beads?
|
|
||||||
|
|
||||||
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
|
|
||||||
|
|
||||||
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
### Essential Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create new issues
|
|
||||||
bd create "Add user authentication"
|
|
||||||
|
|
||||||
# View all issues
|
|
||||||
bd list
|
|
||||||
|
|
||||||
# View issue details
|
|
||||||
bd show <issue-id>
|
|
||||||
|
|
||||||
# Update issue status
|
|
||||||
bd update <issue-id> --status in_progress
|
|
||||||
bd update <issue-id> --status done
|
|
||||||
|
|
||||||
# Sync with git remote
|
|
||||||
bd sync
|
|
||||||
```
|
|
||||||
|
|
||||||
### Working with Issues
|
|
||||||
|
|
||||||
Issues in Beads are:
|
|
||||||
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
|
|
||||||
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
|
|
||||||
- **Branch-aware**: Issues can follow your branch workflow
|
|
||||||
- **Always in sync**: Auto-syncs with your commits
|
|
||||||
|
|
||||||
## Why Beads?
|
|
||||||
|
|
||||||
✨ **AI-Native Design**
|
|
||||||
- Built specifically for AI-assisted development workflows
|
|
||||||
- CLI-first interface works seamlessly with AI coding agents
|
|
||||||
- No context switching to web UIs
|
|
||||||
|
|
||||||
🚀 **Developer Focused**
|
|
||||||
- Issues live in your repo, right next to your code
|
|
||||||
- Works offline, syncs when you push
|
|
||||||
- Fast, lightweight, and stays out of your way
|
|
||||||
|
|
||||||
🔧 **Git Integration**
|
|
||||||
- Automatic sync with git commits
|
|
||||||
- Branch-aware issue tracking
|
|
||||||
- Intelligent JSONL merge resolution
|
|
||||||
|
|
||||||
## Get Started with Beads
|
|
||||||
|
|
||||||
Try Beads in your own projects:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Install Beads
|
|
||||||
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
||||||
|
|
||||||
# Initialize in your repo
|
|
||||||
bd init
|
|
||||||
|
|
||||||
# Create your first issue
|
|
||||||
bd create "Try out Beads"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Learn More
|
|
||||||
|
|
||||||
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
|
|
||||||
- **Quick Start Guide**: Run `bd quickstart`
|
|
||||||
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Beads: Issue tracking that moves at the speed of thought* ⚡
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
# Beads Configuration File
|
|
||||||
# This file configures default behavior for all bd commands in this repository
|
|
||||||
# All settings can also be set via environment variables (BD_* prefix)
|
|
||||||
# or overridden with command-line flags
|
|
||||||
|
|
||||||
# Issue prefix for this repository (used by bd init)
|
|
||||||
# If not set, bd init will auto-detect from directory name
|
|
||||||
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
|
|
||||||
# issue-prefix: ""
|
|
||||||
|
|
||||||
# Use no-db mode: load from JSONL, no SQLite, write back after each command
|
|
||||||
# When true, bd will use .beads/issues.jsonl as the source of truth
|
|
||||||
# instead of SQLite database
|
|
||||||
# no-db: false
|
|
||||||
|
|
||||||
# Disable daemon for RPC communication (forces direct database access)
|
|
||||||
# no-daemon: false
|
|
||||||
|
|
||||||
# Disable auto-flush of database to JSONL after mutations
|
|
||||||
# no-auto-flush: false
|
|
||||||
|
|
||||||
# Disable auto-import from JSONL when it's newer than database
|
|
||||||
# no-auto-import: false
|
|
||||||
|
|
||||||
# Enable JSON output by default
|
|
||||||
# json: false
|
|
||||||
|
|
||||||
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
|
|
||||||
# actor: ""
|
|
||||||
|
|
||||||
# Path to database (overridden by BEADS_DB or --db)
|
|
||||||
# db: ""
|
|
||||||
|
|
||||||
# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
|
|
||||||
# auto-start-daemon: true
|
|
||||||
|
|
||||||
# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
|
|
||||||
# flush-debounce: "5s"
|
|
||||||
|
|
||||||
# Git branch for beads commits (bd sync will commit to this branch)
|
|
||||||
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
|
|
||||||
# This setting persists across clones (unlike database config which is gitignored).
|
|
||||||
# Can also use BEADS_SYNC_BRANCH env var for local override.
|
|
||||||
# If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
|
|
||||||
sync-branch: "beads-sync"
|
|
||||||
|
|
||||||
# Multi-repo configuration (experimental - bd-307)
|
|
||||||
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
|
|
||||||
# repos:
|
|
||||||
# primary: "." # Primary repo (where this database lives)
|
|
||||||
# additional: # Additional repos to hydrate from (read-only)
|
|
||||||
# - ~/beads-planning # Personal planning repo
|
|
||||||
# - ~/work-planning # Work planning repo
|
|
||||||
|
|
||||||
# Integration settings (access with 'bd config get/set')
|
|
||||||
# These are stored in the database, not in this file:
|
|
||||||
# - jira.url
|
|
||||||
# - jira.project
|
|
||||||
# - linear.url
|
|
||||||
# - linear.api-key
|
|
||||||
# - github.org
|
|
||||||
# - github.repo
|
|
||||||
29
.beads/issues.jsonl
Normal file
29
.beads/issues.jsonl
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"database": "beads.db",
|
"database": "beads.db",
|
||||||
"jsonl_export": "sync_base.jsonl"
|
"jsonl_export": "issues.jsonl"
|
||||||
}
|
}
|
||||||
File diff suppressed because one or more lines are too long
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
# Use bd merge for beads JSONL files
|
|
||||||
.beads/issues.jsonl merge=beads
|
|
||||||
@@ -219,11 +219,7 @@
|
|||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = nixosModules ++ [
|
modules = nixosModules ++ [
|
||||||
./machines/john-endesktop/configuration.nix
|
./machines/john-endesktop/configuration.nix
|
||||||
inputs.home-manager.nixosModules.home-manager
|
# Minimal server - no home-manager needed
|
||||||
{
|
|
||||||
home-manager.users.johno = import ./home/home-server.nix;
|
|
||||||
home-manager.extraSpecialArgs = { inherit system; };
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
kubectl.enable = true;
|
kubectl.enable = true;
|
||||||
tmux.enable = true;
|
tmux.enable = true;
|
||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
targets.genericLinux.enable = true;
|
targets.genericLinux.enable = true;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
|
|
||||||
# Launcher wrappers for excluded/optional packages
|
# Launcher wrappers for excluded/optional packages
|
||||||
launchers = {
|
launchers = {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
# development.enable = false; # Not needed for live USB
|
# development.enable = false; # Not needed for live USB
|
||||||
# communication.enable = false; # Not needed for live USB
|
# communication.enable = false; # Not needed for live USB
|
||||||
# office.enable = false; # Not needed for live USB
|
# office.enable = false; # Not needed for live USB
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
# office.enable = false; # Not needed for media center
|
# office.enable = false; # Not needed for media center
|
||||||
# sync.enable = false; # Shared machine, no personal file sync
|
# sync.enable = false; # Shared machine, no personal file sync
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
{ 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;
|
|
||||||
emacs.enable = true;
|
|
||||||
starship.enable = true;
|
|
||||||
tmux.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
targets.genericLinux.enable = true;
|
|
||||||
home.sessionVariables = {};
|
|
||||||
home.sessionPath = [];
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
./roles
|
|
||||||
./roles/base-linux
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -19,6 +19,5 @@
|
|||||||
./sync
|
./sync
|
||||||
./tmux
|
./tmux
|
||||||
./emacs
|
./emacs
|
||||||
./starship
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,25 +85,11 @@ in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Copy local skills from this repo (with retry for race conditions with running Claude)
|
|
||||||
for file in ${./skills}/*.md; do
|
|
||||||
if [ -f "$file" ]; then
|
|
||||||
filename=$(basename "$file" .md)
|
|
||||||
dest="$HOME/.claude/commands/''${filename}.md"
|
|
||||||
# Remove existing file first, then copy with retry on failure
|
|
||||||
rm -f "$dest" 2>/dev/null || true
|
|
||||||
if ! cp "$file" "$dest" 2>/dev/null; then
|
|
||||||
sleep 0.5
|
|
||||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to commands"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
$DRY_RUN_CMD echo "Claude Code humanlayer commands and agents installed successfully${
|
$DRY_RUN_CMD echo "Claude Code humanlayer commands and agents installed successfully${
|
||||||
if cfg.allowArbitraryClaudeCodeModelSelection
|
if cfg.allowArbitraryClaudeCodeModelSelection
|
||||||
then " (model specifications preserved)"
|
then " (model specifications preserved)"
|
||||||
else " (model selection removed)"
|
else " (model selection removed)"
|
||||||
} + local skills"
|
}"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Set up beads Claude Code integration (hooks for SessionStart/PreCompact)
|
# Set up beads Claude Code integration (hooks for SessionStart/PreCompact)
|
||||||
|
|||||||
@@ -1,205 +0,0 @@
|
|||||||
---
|
|
||||||
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. **Update bead status**:
|
|
||||||
- Mark the bead as "in_review": `bd update [BEAD_ID] --status=in_review`
|
|
||||||
- Add the PR URL to the bead notes: `bd update [BEAD_ID] --notes="$(bd show [BEAD_ID] --json | jq -r '.notes')
|
|
||||||
|
|
||||||
PR: [PR_URL]"`
|
|
||||||
|
|
||||||
7. **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:
|
|
||||||
|
|
||||||
```
|
|
||||||
<Task calls for each selected bead - all in one message>
|
|
||||||
```
|
|
||||||
|
|
||||||
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 | Bead Status | Review |
|
|
||||||
|------|-----|-------------|--------|
|
|
||||||
| beads-abc | #123 | in_review | Approved |
|
|
||||||
| beads-xyz | #124 | in_review | Needs changes |
|
|
||||||
| beads-123 | - | open (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
|
|
||||||
- Run `/reconcile_beads` after PRs are merged to close 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
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
---
|
|
||||||
description: Reconcile beads with merged PRs and close completed beads
|
|
||||||
---
|
|
||||||
|
|
||||||
# Reconcile Beads Workflow
|
|
||||||
|
|
||||||
This skill reconciles beads that are in `in_review` status with their corresponding PRs. If a PR has been merged, the bead is closed.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Custom status `in_review` must be configured: `bd config set status.custom "in_review"`
|
|
||||||
- Beads in `in_review` status should have a PR URL in their notes
|
|
||||||
|
|
||||||
## Workflow
|
|
||||||
|
|
||||||
### Step 1: Find beads in review
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bd list --status=in_review
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: For each bead, check PR status
|
|
||||||
|
|
||||||
1. **Get the PR URL from bead notes**:
|
|
||||||
```bash
|
|
||||||
bd show [BEAD_ID] --json | jq -r '.notes'
|
|
||||||
```
|
|
||||||
Extract the PR URL (look for lines starting with "PR:" or containing pull request URLs)
|
|
||||||
|
|
||||||
2. **Detect hosting provider**:
|
|
||||||
- Run `git remote get-url origin`
|
|
||||||
- If URL contains `github.com`, use `gh`; otherwise use `tea` (Gitea/Forgejo)
|
|
||||||
|
|
||||||
3. **Check PR status**:
|
|
||||||
- For GitHub:
|
|
||||||
```bash
|
|
||||||
gh pr view [PR_NUMBER] --json state,merged
|
|
||||||
```
|
|
||||||
- For Gitea:
|
|
||||||
```bash
|
|
||||||
tea pr view [PR_NUMBER]
|
|
||||||
```
|
|
||||||
Look for "State: merged" or "State: closed"
|
|
||||||
|
|
||||||
### Step 3: Close merged beads
|
|
||||||
|
|
||||||
If the PR is merged:
|
|
||||||
```bash
|
|
||||||
bd close [BEAD_ID] --reason="PR merged: [PR_URL]"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Report summary
|
|
||||||
|
|
||||||
Present results:
|
|
||||||
|
|
||||||
```
|
|
||||||
## Beads Reconciliation Summary
|
|
||||||
|
|
||||||
### Closed (PR Merged)
|
|
||||||
| Bead | PR | Title |
|
|
||||||
|------|-----|-------|
|
|
||||||
| beads-abc | #123 | Feature X |
|
|
||||||
| beads-xyz | #456 | Bug fix Y |
|
|
||||||
|
|
||||||
### Still in Review
|
|
||||||
| Bead | PR | Status | Title |
|
|
||||||
|------|-----|--------|-------|
|
|
||||||
| beads-def | #789 | Open | Feature Z |
|
|
||||||
|
|
||||||
### Issues Found
|
|
||||||
- beads-ghi: No PR URL found in notes
|
|
||||||
- beads-jkl: PR #999 not found (may have been deleted)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
- **Missing PR URL**: Skip the bead and report it
|
|
||||||
- **PR not found**: Report the error but continue with other beads
|
|
||||||
- **API errors**: Report and continue
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- This skill complements `/parallel_beads` which sets beads to `in_review` status
|
|
||||||
- Run this skill periodically or after merging PRs to keep beads in sync
|
|
||||||
- Beads with closed (but not merged) PRs are not automatically closed - they may need rework
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.home.roles.starship;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.home.roles.starship = {
|
|
||||||
enable = mkEnableOption "starship cross-shell prompt";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.starship = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
add_newline = true;
|
|
||||||
|
|
||||||
character = {
|
|
||||||
success_symbol = "[>](bold green)";
|
|
||||||
error_symbol = "[x](bold red)";
|
|
||||||
vimcmd_symbol = "[<](bold green)";
|
|
||||||
};
|
|
||||||
|
|
||||||
directory = {
|
|
||||||
truncation_length = 4;
|
|
||||||
truncate_to_repo = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
git_branch = {
|
|
||||||
symbol = "";
|
|
||||||
format = "[$symbol$branch(:$remote_branch)]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
git_status = {
|
|
||||||
format = "([$all_status$ahead_behind]($style) )";
|
|
||||||
};
|
|
||||||
|
|
||||||
nix_shell = {
|
|
||||||
symbol = "";
|
|
||||||
format = "[$symbol$state( \\($name\\))]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
cmd_duration = {
|
|
||||||
min_time = 2000;
|
|
||||||
format = "[$duration]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Disable modules that are noisy or rarely needed
|
|
||||||
package.disabled = true;
|
|
||||||
nodejs.disabled = true;
|
|
||||||
python.disabled = true;
|
|
||||||
ruby.disabled = true;
|
|
||||||
java.disabled = true;
|
|
||||||
golang.disabled = true;
|
|
||||||
rust.disabled = true;
|
|
||||||
php.disabled = true;
|
|
||||||
lua.disabled = true;
|
|
||||||
perl.disabled = true;
|
|
||||||
terraform.disabled = true;
|
|
||||||
kubernetes.disabled = true;
|
|
||||||
docker_context.disabled = true;
|
|
||||||
aws.disabled = true;
|
|
||||||
gcloud.disabled = true;
|
|
||||||
azure.disabled = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -170,7 +170,6 @@ This document outlines the plan to migrate the john-endesktop server from Arch L
|
|||||||
```bash
|
```bash
|
||||||
blkid /dev/nvme0n1p5
|
blkid /dev/nvme0n1p5
|
||||||
# Note the UUID for updating hardware-configuration.nix
|
# 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**
|
8. **Copy your NixOS configuration to the server**
|
||||||
@@ -389,11 +388,11 @@ After successful migration and 24-48 hours of stable operation:
|
|||||||
|
|
||||||
Pre-migration:
|
Pre-migration:
|
||||||
- [x] nvme0n1p5 removal from media pool complete
|
- [x] nvme0n1p5 removal from media pool complete
|
||||||
- [x] Recent backup verified (< 24 hours)
|
- [ ] Recent backup verified (< 24 hours)
|
||||||
- [x] Maintenance window scheduled
|
- [ ] Maintenance window scheduled
|
||||||
- [x] NixOS ISO downloaded
|
- [ ] NixOS ISO downloaded
|
||||||
- [x] Bootable USB created
|
- [ ] Bootable USB created
|
||||||
- [x] NixOS config builds successfully
|
- [ ] NixOS config builds successfully
|
||||||
|
|
||||||
During migration:
|
During migration:
|
||||||
- [ ] ZFS pools exported
|
- [ ] ZFS pools exported
|
||||||
|
|||||||
@@ -18,29 +18,12 @@
|
|||||||
# File systems - these will need to be updated after installation
|
# File systems - these will need to be updated after installation
|
||||||
# The nvme0n1p5 partition will be formatted as btrfs for NixOS root
|
# The nvme0n1p5 partition will be formatted as btrfs for NixOS root
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/disk/by-uuid/5f4ad025-bfab-4aed-a933-6638348059e5";
|
# Update this device path after installation
|
||||||
|
device = "/dev/disk/by-uuid/CHANGE-THIS-TO-YOUR-UUID";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
options = [ "subvol=@" "compress=zstd" "noatime" ];
|
options = [ "subvol=@" "compress=zstd" "noatime" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/home" = {
|
|
||||||
device = "/dev/disk/by-uuid/5f4ad025-bfab-4aed-a933-6638348059e5";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@home" "compress=zstd" "noatime" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/nix" = {
|
|
||||||
device = "/dev/disk/by-uuid/5f4ad025-bfab-4aed-a933-6638348059e5";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@nix" "compress=zstd" "noatime" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/var/log" = {
|
|
||||||
device = "/dev/disk/by-uuid/5f4ad025-bfab-4aed-a933-6638348059e5";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@log" "compress=zstd" "noatime" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
fileSystems."/boot" = {
|
||||||
# This should match your current EFI partition
|
# This should match your current EFI partition
|
||||||
device = "/dev/disk/by-uuid/F5C6-D570";
|
device = "/dev/disk/by-uuid/F5C6-D570";
|
||||||
@@ -52,8 +35,10 @@
|
|||||||
# The pools should be imported automatically via boot.zfs.extraPools
|
# The pools should be imported automatically via boot.zfs.extraPools
|
||||||
# /media and /swarmvols will be mounted by ZFS
|
# /media and /swarmvols will be mounted by ZFS
|
||||||
|
|
||||||
# No swap needed - 23GB RAM is sufficient for this NFS/ZFS server
|
# Swap - using ZFS zvol
|
||||||
swapDevices = [ ];
|
swapDevices = [
|
||||||
|
{ device = "/dev/zvol/media/swap"; }
|
||||||
|
];
|
||||||
|
|
||||||
# CPU microcode
|
# CPU microcode
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
# Common configuration shared between NixOS and Darwin
|
|
||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
config = {
|
|
||||||
time.timeZone = "America/Los_Angeles";
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
git
|
|
||||||
glances
|
|
||||||
pciutils
|
|
||||||
tree
|
|
||||||
usbutils
|
|
||||||
vim
|
|
||||||
];
|
|
||||||
|
|
||||||
nix = {
|
|
||||||
package = pkgs.nix;
|
|
||||||
settings = {
|
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
max-jobs = "auto";
|
|
||||||
trusted-users = [ "johno" ];
|
|
||||||
substituters = [
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
gc = {
|
|
||||||
automatic = true;
|
|
||||||
options = "--delete-older-than 10d";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -7,10 +7,6 @@ let
|
|||||||
setEnvironmentPath = "${config.system.build.setEnvironment}";
|
setEnvironmentPath = "${config.system.build.setEnvironment}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
|
||||||
./common.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
# Salt manages /etc/bashrc, /etc/zshrc, /etc/zshenv
|
# Salt manages /etc/bashrc, /etc/zshrc, /etc/zshenv
|
||||||
# nix-darwin writes to .local variants for nix-specific configuration
|
# nix-darwin writes to .local variants for nix-specific configuration
|
||||||
@@ -47,6 +43,8 @@ in
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
time.timeZone = "America/Los_Angeles";
|
||||||
|
|
||||||
# System preferences
|
# System preferences
|
||||||
system.defaults = {
|
system.defaults = {
|
||||||
# Custom keyboard shortcuts
|
# Custom keyboard shortcuts
|
||||||
@@ -81,5 +79,42 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
git
|
||||||
|
glances
|
||||||
|
pciutils
|
||||||
|
tree
|
||||||
|
usbutils
|
||||||
|
vim
|
||||||
|
];
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
package = pkgs.nix;
|
||||||
|
# distributedBuilds = true;
|
||||||
|
# buildMachines = [{
|
||||||
|
# hostName = "z790prors.oglehome";
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# protocol = "ssh-ng";
|
||||||
|
# sshUser = "johno";
|
||||||
|
# sshKey = "/root/.ssh/id_ed25519";
|
||||||
|
# maxJobs = 3;
|
||||||
|
# speedFactor = 2;
|
||||||
|
# }];
|
||||||
|
settings = {
|
||||||
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
max-jobs = "auto";
|
||||||
|
trusted-users = [ "johno" ];
|
||||||
|
substituters = [
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
options = "--delete-older-than 10d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,6 @@ with lib;
|
|||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./common.nix
|
|
||||||
./audio
|
./audio
|
||||||
./bluetooth
|
./bluetooth
|
||||||
./btrfs
|
./btrfs
|
||||||
@@ -32,6 +31,7 @@ with lib;
|
|||||||
LC_TELEPHONE = "en_US.UTF-8";
|
LC_TELEPHONE = "en_US.UTF-8";
|
||||||
LC_TIME = "en_US.UTF-8";
|
LC_TIME = "en_US.UTF-8";
|
||||||
};
|
};
|
||||||
|
time.timeZone = "America/Los_Angeles";
|
||||||
|
|
||||||
services.xserver.xkb = {
|
services.xserver.xkb = {
|
||||||
layout = "us";
|
layout = "us";
|
||||||
@@ -49,7 +49,42 @@ with lib;
|
|||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
# NixOS-specific gc option (not available on Darwin)
|
environment.systemPackages = with pkgs; [
|
||||||
nix.gc.randomizedDelaySec = "14m";
|
git
|
||||||
|
glances
|
||||||
|
pciutils
|
||||||
|
tree
|
||||||
|
usbutils
|
||||||
|
vim
|
||||||
|
];
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
package = pkgs.nix;
|
||||||
|
# distributedBuilds = true;
|
||||||
|
# buildMachines = [{
|
||||||
|
# hostName = "z790prors.oglehome";
|
||||||
|
# system = "x86_64-linux";
|
||||||
|
# protocol = "ssh-ng";
|
||||||
|
# sshUser = "johno";
|
||||||
|
# sshKey = "/root/.ssh/id_ed25519";
|
||||||
|
# maxJobs = 3;
|
||||||
|
# speedFactor = 2;
|
||||||
|
# }];
|
||||||
|
settings = {
|
||||||
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
max-jobs = "auto";
|
||||||
|
trusted-users = [ "johno" ];
|
||||||
|
substituters = [
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
randomizedDelaySec = "14m";
|
||||||
|
options = "--delete-older-than 10d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user