git-worktree-organize 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.bare/HEAD +1 -0
  2. package/.bare/config +6 -0
  3. package/.bare/description +1 -0
  4. package/.bare/hooks/applypatch-msg.sample +15 -0
  5. package/.bare/hooks/commit-msg.sample +24 -0
  6. package/.bare/hooks/fsmonitor-watchman.sample +174 -0
  7. package/.bare/hooks/post-update.sample +8 -0
  8. package/.bare/hooks/pre-applypatch.sample +14 -0
  9. package/.bare/hooks/pre-commit.sample +49 -0
  10. package/.bare/hooks/pre-merge-commit.sample +13 -0
  11. package/.bare/hooks/pre-push.sample +53 -0
  12. package/.bare/hooks/pre-rebase.sample +169 -0
  13. package/.bare/hooks/pre-receive.sample +24 -0
  14. package/.bare/hooks/prepare-commit-msg.sample +42 -0
  15. package/.bare/hooks/push-to-checkout.sample +78 -0
  16. package/.bare/hooks/sendemail-validate.sample +77 -0
  17. package/.bare/hooks/update.sample +128 -0
  18. package/.bare/info/exclude +6 -0
  19. package/.bare/objects/pack/pack-1a869640f0628b133e36287958cd040e132be773.idx +0 -0
  20. package/.bare/objects/pack/pack-1a869640f0628b133e36287958cd040e132be773.pack +0 -0
  21. package/.bare/objects/pack/pack-1a869640f0628b133e36287958cd040e132be773.rev +0 -0
  22. package/.bare/packed-refs +2 -0
  23. package/.beads/README.md +81 -0
  24. package/.beads/backup/backup_state.json +13 -0
  25. package/.beads/backup/comments.jsonl +0 -0
  26. package/.beads/backup/config.jsonl +11 -0
  27. package/.beads/backup/dependencies.jsonl +10 -0
  28. package/.beads/backup/events.jsonl +31 -0
  29. package/.beads/backup/issues.jsonl +9 -0
  30. package/.beads/backup/labels.jsonl +0 -0
  31. package/.beads/config.yaml +55 -0
  32. package/.beads/hooks/post-checkout +9 -0
  33. package/.beads/hooks/post-merge +9 -0
  34. package/.beads/hooks/pre-commit +9 -0
  35. package/.beads/hooks/pre-push +9 -0
  36. package/.beads/hooks/prepare-commit-msg +9 -0
  37. package/.beads/interactions.jsonl +0 -0
  38. package/.beads/metadata.json +9 -0
  39. package/.claude/settings.local.json +8 -0
  40. package/AGENTS.md +150 -0
  41. package/README.md +84 -0
  42. package/bun.lock +205 -0
  43. package/package.json +21 -0
  44. package/src/cli.ts +143 -0
  45. package/src/detect.ts +95 -0
  46. package/src/fs.ts +22 -0
  47. package/src/git.ts +40 -0
  48. package/src/migrate.ts +162 -0
  49. package/src/worktrees.ts +54 -0
  50. package/test/__bun-shim__.ts +78 -0
  51. package/test/detect.test.ts +99 -0
  52. package/test/helpers/repo.ts +75 -0
  53. package/test/migrate.test.ts +124 -0
  54. package/test/security.test.ts +25 -0
  55. package/test/worktrees.test.ts +164 -0
  56. package/tsconfig.json +13 -0
  57. package/vitest.config.ts +13 -0
@@ -0,0 +1,77 @@
1
+ #!/bin/sh
2
+
3
+ # An example hook script to validate a patch (and/or patch series) before
4
+ # sending it via email.
5
+ #
6
+ # The hook should exit with non-zero status after issuing an appropriate
7
+ # message if it wants to prevent the email(s) from being sent.
8
+ #
9
+ # To enable this hook, rename this file to "sendemail-validate".
10
+ #
11
+ # By default, it will only check that the patch(es) can be applied on top of
12
+ # the default upstream branch without conflicts in a secondary worktree. After
13
+ # validation (successful or not) of the last patch of a series, the worktree
14
+ # will be deleted.
15
+ #
16
+ # The following config variables can be set to change the default remote and
17
+ # remote ref that are used to apply the patches against:
18
+ #
19
+ # sendemail.validateRemote (default: origin)
20
+ # sendemail.validateRemoteRef (default: HEAD)
21
+ #
22
+ # Replace the TODO placeholders with appropriate checks according to your
23
+ # needs.
24
+
25
+ validate_cover_letter () {
26
+ file="$1"
27
+ # TODO: Replace with appropriate checks (e.g. spell checking).
28
+ true
29
+ }
30
+
31
+ validate_patch () {
32
+ file="$1"
33
+ # Ensure that the patch applies without conflicts.
34
+ git am -3 "$file" || return
35
+ # TODO: Replace with appropriate checks for this patch
36
+ # (e.g. checkpatch.pl).
37
+ true
38
+ }
39
+
40
+ validate_series () {
41
+ # TODO: Replace with appropriate checks for the whole series
42
+ # (e.g. quick build, coding style checks, etc.).
43
+ true
44
+ }
45
+
46
+ # main -------------------------------------------------------------------------
47
+
48
+ if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1
49
+ then
50
+ remote=$(git config --default origin --get sendemail.validateRemote) &&
51
+ ref=$(git config --default HEAD --get sendemail.validateRemoteRef) &&
52
+ worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) &&
53
+ git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" &&
54
+ git config --replace-all sendemail.validateWorktree "$worktree"
55
+ else
56
+ worktree=$(git config --get sendemail.validateWorktree)
57
+ fi || {
58
+ echo "sendemail-validate: error: failed to prepare worktree" >&2
59
+ exit 1
60
+ }
61
+
62
+ unset GIT_DIR GIT_WORK_TREE
63
+ cd "$worktree" &&
64
+
65
+ if grep -q "^diff --git " "$1"
66
+ then
67
+ validate_patch "$1"
68
+ else
69
+ validate_cover_letter "$1"
70
+ fi &&
71
+
72
+ if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL"
73
+ then
74
+ git config --unset-all sendemail.validateWorktree &&
75
+ trap 'git worktree remove -ff "$worktree"' EXIT &&
76
+ validate_series
77
+ fi
@@ -0,0 +1,128 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to block unannotated tags from entering.
4
+ # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
5
+ #
6
+ # To enable this hook, rename this file to "update".
7
+ #
8
+ # Config
9
+ # ------
10
+ # hooks.allowunannotated
11
+ # This boolean sets whether unannotated tags will be allowed into the
12
+ # repository. By default they won't be.
13
+ # hooks.allowdeletetag
14
+ # This boolean sets whether deleting tags will be allowed in the
15
+ # repository. By default they won't be.
16
+ # hooks.allowmodifytag
17
+ # This boolean sets whether a tag may be modified after creation. By default
18
+ # it won't be.
19
+ # hooks.allowdeletebranch
20
+ # This boolean sets whether deleting branches will be allowed in the
21
+ # repository. By default they won't be.
22
+ # hooks.denycreatebranch
23
+ # This boolean sets whether remotely creating branches will be denied
24
+ # in the repository. By default this is allowed.
25
+ #
26
+
27
+ # --- Command line
28
+ refname="$1"
29
+ oldrev="$2"
30
+ newrev="$3"
31
+
32
+ # --- Safety check
33
+ if [ -z "$GIT_DIR" ]; then
34
+ echo "Don't run this script from the command line." >&2
35
+ echo " (if you want, you could supply GIT_DIR then run" >&2
36
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
37
+ exit 1
38
+ fi
39
+
40
+ if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
41
+ echo "usage: $0 <ref> <oldrev> <newrev>" >&2
42
+ exit 1
43
+ fi
44
+
45
+ # --- Config
46
+ allowunannotated=$(git config --type=bool hooks.allowunannotated)
47
+ allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch)
48
+ denycreatebranch=$(git config --type=bool hooks.denycreatebranch)
49
+ allowdeletetag=$(git config --type=bool hooks.allowdeletetag)
50
+ allowmodifytag=$(git config --type=bool hooks.allowmodifytag)
51
+
52
+ # check for no description
53
+ projectdesc=$(sed -e '1q' "$GIT_DIR/description")
54
+ case "$projectdesc" in
55
+ "Unnamed repository"* | "")
56
+ echo "*** Project description file hasn't been set" >&2
57
+ exit 1
58
+ ;;
59
+ esac
60
+
61
+ # --- Check types
62
+ # if $newrev is 0000...0000, it's a commit to delete a ref.
63
+ zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
64
+ if [ "$newrev" = "$zero" ]; then
65
+ newrev_type=delete
66
+ else
67
+ newrev_type=$(git cat-file -t $newrev)
68
+ fi
69
+
70
+ case "$refname","$newrev_type" in
71
+ refs/tags/*,commit)
72
+ # un-annotated tag
73
+ short_refname=${refname##refs/tags/}
74
+ if [ "$allowunannotated" != "true" ]; then
75
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
76
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
77
+ exit 1
78
+ fi
79
+ ;;
80
+ refs/tags/*,delete)
81
+ # delete tag
82
+ if [ "$allowdeletetag" != "true" ]; then
83
+ echo "*** Deleting a tag is not allowed in this repository" >&2
84
+ exit 1
85
+ fi
86
+ ;;
87
+ refs/tags/*,tag)
88
+ # annotated tag
89
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
90
+ then
91
+ echo "*** Tag '$refname' already exists." >&2
92
+ echo "*** Modifying a tag is not allowed in this repository." >&2
93
+ exit 1
94
+ fi
95
+ ;;
96
+ refs/heads/*,commit)
97
+ # branch
98
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
99
+ echo "*** Creating a branch is not allowed in this repository" >&2
100
+ exit 1
101
+ fi
102
+ ;;
103
+ refs/heads/*,delete)
104
+ # delete branch
105
+ if [ "$allowdeletebranch" != "true" ]; then
106
+ echo "*** Deleting a branch is not allowed in this repository" >&2
107
+ exit 1
108
+ fi
109
+ ;;
110
+ refs/remotes/*,commit)
111
+ # tracking branch
112
+ ;;
113
+ refs/remotes/*,delete)
114
+ # delete tracking branch
115
+ if [ "$allowdeletebranch" != "true" ]; then
116
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
117
+ exit 1
118
+ fi
119
+ ;;
120
+ *)
121
+ # Anything else (is there anything else?)
122
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
123
+ exit 1
124
+ ;;
125
+ esac
126
+
127
+ # --- Finished
128
+ exit 0
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -0,0 +1,2 @@
1
+ # pack-refs with: peeled fully-peeled sorted
2
+ 7a492322c33bd7e6cbe42983fe57827766cbbed4 refs/heads/main
@@ -0,0 +1,81 @@
1
+ # Beads - AI-Native Issue Tracking
2
+
3
+ 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.
4
+
5
+ ## What is Beads?
6
+
7
+ 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.
8
+
9
+ **Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
10
+
11
+ ## Quick Start
12
+
13
+ ### Essential Commands
14
+
15
+ ```bash
16
+ # Create new issues
17
+ bd create "Add user authentication"
18
+
19
+ # View all issues
20
+ bd list
21
+
22
+ # View issue details
23
+ bd show <issue-id>
24
+
25
+ # Update issue status
26
+ bd update <issue-id> --claim
27
+ bd update <issue-id> --status done
28
+
29
+ # Sync with Dolt remote
30
+ bd dolt push
31
+ ```
32
+
33
+ ### Working with Issues
34
+
35
+ Issues in Beads are:
36
+ - **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
37
+ - **AI-friendly**: CLI-first design works perfectly with AI coding agents
38
+ - **Branch-aware**: Issues can follow your branch workflow
39
+ - **Always in sync**: Auto-syncs with your commits
40
+
41
+ ## Why Beads?
42
+
43
+ ✨ **AI-Native Design**
44
+ - Built specifically for AI-assisted development workflows
45
+ - CLI-first interface works seamlessly with AI coding agents
46
+ - No context switching to web UIs
47
+
48
+ 🚀 **Developer Focused**
49
+ - Issues live in your repo, right next to your code
50
+ - Works offline, syncs when you push
51
+ - Fast, lightweight, and stays out of your way
52
+
53
+ 🔧 **Git Integration**
54
+ - Automatic sync with git commits
55
+ - Branch-aware issue tracking
56
+ - Intelligent JSONL merge resolution
57
+
58
+ ## Get Started with Beads
59
+
60
+ Try Beads in your own projects:
61
+
62
+ ```bash
63
+ # Install Beads
64
+ curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
65
+
66
+ # Initialize in your repo
67
+ bd init
68
+
69
+ # Create your first issue
70
+ bd create "Try out Beads"
71
+ ```
72
+
73
+ ## Learn More
74
+
75
+ - **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
76
+ - **Quick Start Guide**: Run `bd quickstart`
77
+ - **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
78
+
79
+ ---
80
+
81
+ *Beads: Issue tracking that moves at the speed of thought* ⚡
@@ -0,0 +1,13 @@
1
+ {
2
+ "last_dolt_commit": "l1dnbhthsfgi9v89teho6b2efhklvlv0",
3
+ "last_event_id": 0,
4
+ "timestamp": "2026-03-06T13:05:38.518606871Z",
5
+ "counts": {
6
+ "issues": 9,
7
+ "events": 31,
8
+ "comments": 0,
9
+ "dependencies": 10,
10
+ "labels": 0,
11
+ "config": 11
12
+ }
13
+ }
File without changes
@@ -0,0 +1,11 @@
1
+ {"key":"auto_compact_enabled","value":"false"}
2
+ {"key":"compact_batch_size","value":"50"}
3
+ {"key":"compact_parallel_workers","value":"5"}
4
+ {"key":"compact_tier1_days","value":"30"}
5
+ {"key":"compact_tier1_dep_levels","value":"2"}
6
+ {"key":"compact_tier2_commits","value":"100"}
7
+ {"key":"compact_tier2_days","value":"90"}
8
+ {"key":"compact_tier2_dep_levels","value":"5"}
9
+ {"key":"compaction_enabled","value":"false"}
10
+ {"key":"issue_prefix","value":"git-worktree-organize"}
11
+ {"key":"schema_version","value":"6"}
@@ -0,0 +1,10 @@
1
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-pa7","issue_id":"git-worktree-organize-3h1","type":"blocks"}
2
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-3h1","issue_id":"git-worktree-organize-53n","type":"blocks"}
3
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-jnu","issue_id":"git-worktree-organize-5ea","type":"blocks"}
4
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-q2e","issue_id":"git-worktree-organize-5ea","type":"blocks"}
5
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-t83","issue_id":"git-worktree-organize-5ea","type":"blocks"}
6
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-3yq","issue_id":"git-worktree-organize-7sk","type":"blocks"}
7
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-7sk","issue_id":"git-worktree-organize-jnu","type":"blocks"}
8
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-5ea","issue_id":"git-worktree-organize-pa7","type":"blocks"}
9
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-7sk","issue_id":"git-worktree-organize-q2e","type":"blocks"}
10
+ {"created_at":"2026-03-05T23:28:12Z","created_by":"Mike Crowe","depends_on_id":"git-worktree-organize-7sk","issue_id":"git-worktree-organize-t83","type":"blocks"}
@@ -0,0 +1,31 @@
1
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:27:46Z","event_type":"created","id":1,"issue_id":"git-worktree-organize-3yq","new_value":"","old_value":""}
2
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:27:46Z","event_type":"created","id":2,"issue_id":"git-worktree-organize-7sk","new_value":"","old_value":""}
3
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:27:54Z","event_type":"created","id":3,"issue_id":"git-worktree-organize-t83","new_value":"","old_value":""}
4
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:27:54Z","event_type":"created","id":4,"issue_id":"git-worktree-organize-q2e","new_value":"","old_value":""}
5
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:27:54Z","event_type":"created","id":5,"issue_id":"git-worktree-organize-jnu","new_value":"","old_value":""}
6
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:28:02Z","event_type":"created","id":6,"issue_id":"git-worktree-organize-3h1","new_value":"","old_value":""}
7
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:28:02Z","event_type":"created","id":7,"issue_id":"git-worktree-organize-5ea","new_value":"","old_value":""}
8
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:28:02Z","event_type":"created","id":8,"issue_id":"git-worktree-organize-pa7","new_value":"","old_value":""}
9
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-05T23:28:02Z","event_type":"created","id":9,"issue_id":"git-worktree-organize-53n","new_value":"","old_value":""}
10
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:17:41Z","event_type":"closed","id":10,"issue_id":"git-worktree-organize-53n","new_value":"Removed — not tracking npm publish as a task","old_value":""}
11
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:24:30Z","event_type":"status_changed","id":11,"issue_id":"git-worktree-organize-3yq","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-3yq\",\"title\":\"Set up package.json for Bun + TypeScript + Vitest\",\"description\":\"Configure package.json with correct bin entry, scripts (build, test), deps (typescript, vitest, @types/bun), tsconfig.json. Stack: Bun runtime, TypeScript, Vitest.\",\"status\":\"open\",\"priority\":0,\"issue_type\":\"task\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:27:47Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:27:47Z\"}"}
12
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:25:33Z","event_type":"closed","id":12,"issue_id":"git-worktree-organize-3yq","new_value":"Closed","old_value":""}
13
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:25:33Z","event_type":"status_changed","id":13,"issue_id":"git-worktree-organize-7sk","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-7sk\",\"title\":\"Scaffold source files with types and stubs\",\"description\":\"Create src/cli.ts, src/detect.ts, src/worktrees.ts, src/migrate.ts, src/git.ts, src/fs.ts with the types from AGENT_HANDOVER.md (RepoConfig, Worktree) and stub implementations.\",\"status\":\"open\",\"priority\":0,\"issue_type\":\"task\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:27:47Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:27:47Z\"}"}
14
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:26:35Z","event_type":"closed","id":14,"issue_id":"git-worktree-organize-7sk","new_value":"Closed","old_value":""}
15
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:26:38Z","event_type":"status_changed","id":15,"issue_id":"git-worktree-organize-jnu","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-jnu\",\"title\":\"Implement git.ts and fs.ts thin wrappers\",\"description\":\"git.ts: run git commands, read git config. fs.ts: move/copy with cross-filesystem detection via statSync().dev. These are the only modules that touch the real system.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"feature\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:27:55Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:27:55Z\"}"}
16
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:26:39Z","event_type":"status_changed","id":16,"issue_id":"git-worktree-organize-q2e","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-q2e\",\"title\":\"Implement worktrees.ts + tests\",\"description\":\"Parse git worktree list --porcelain output into typed Worktree[]. Handle bare, linked, detached HEAD cases. Tests in test/worktrees.test.ts.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"feature\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:27:55Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:27:55Z\"}"}
17
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:26:39Z","event_type":"status_changed","id":17,"issue_id":"git-worktree-organize-t83","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-t83\",\"title\":\"Implement detect.ts + full test suite\",\"description\":\"Implement all 7 detection cases from the detection matrix: standard, bare-hub, bare-root, bare-dotgit, bare-external, reject-linked-worktree, reject-not-a-repo. Tests in test/detect.test.ts using real git repos in tmpdir.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"feature\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:27:55Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:27:55Z\"}"}
18
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:27:31Z","event_type":"closed","id":18,"issue_id":"git-worktree-organize-jnu","new_value":"Closed","old_value":""}
19
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:29:41Z","event_type":"closed","id":19,"issue_id":"git-worktree-organize-q2e","new_value":"Closed","old_value":""}
20
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:30:04Z","event_type":"closed","id":20,"issue_id":"git-worktree-organize-t83","new_value":"Closed","old_value":""}
21
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:30:25Z","event_type":"closed","id":21,"issue_id":"git-worktree-organize-jnu","new_value":"Closed","old_value":""}
22
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:30:26Z","event_type":"closed","id":22,"issue_id":"git-worktree-organize-q2e","new_value":"Closed","old_value":""}
23
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:30:26Z","event_type":"closed","id":23,"issue_id":"git-worktree-organize-t83","new_value":"Closed","old_value":""}
24
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:32:04Z","event_type":"status_changed","id":24,"issue_id":"git-worktree-organize-5ea","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-5ea\",\"title\":\"Implement migrate.ts + full test suite\",\"description\":\"Orchestrate the full migration for all repo config types. Tests: standard→hub, bare-root→hub, bare-hub→new location, no worktrees→hub, cross-filesystem, branch with / sanitized to -, collision detection.\",\"status\":\"open\",\"priority\":2,\"issue_type\":\"feature\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:28:03Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:28:03Z\"}"}
25
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:35:54Z","event_type":"closed","id":25,"issue_id":"git-worktree-organize-5ea","new_value":"Closed","old_value":""}
26
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:36:16Z","event_type":"closed","id":26,"issue_id":"git-worktree-organize-5ea","new_value":"Closed","old_value":""}
27
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:36:25Z","event_type":"status_changed","id":27,"issue_id":"git-worktree-organize-pa7","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-pa7\",\"title\":\"Implement cli.ts entry point\",\"description\":\"Arg parsing (citty or yargs), interactive confirmation prompt, formatted output matching bash prototype (colors, worktree preview table, done message). Wire up npx binary entry.\",\"status\":\"open\",\"priority\":2,\"issue_type\":\"feature\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:28:03Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:28:03Z\"}"}
28
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:37:52Z","event_type":"closed","id":28,"issue_id":"git-worktree-organize-pa7","new_value":"Closed","old_value":""}
29
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:38:11Z","event_type":"closed","id":29,"issue_id":"git-worktree-organize-pa7","new_value":"Closed","old_value":""}
30
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:38:11Z","event_type":"status_changed","id":30,"issue_id":"git-worktree-organize-3h1","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"git-worktree-organize-3h1\",\"title\":\"Write README\",\"description\":\"Document usage, installation methods (npx, direct install), what the tool does, before/after directory structure examples.\",\"status\":\"open\",\"priority\":3,\"issue_type\":\"task\",\"owner\":\"drmikecrowe@gmail.com\",\"created_at\":\"2026-03-06T04:28:03Z\",\"created_by\":\"Mike Crowe\",\"updated_at\":\"2026-03-06T04:28:03Z\"}"}
31
+ {"actor":"Mike Crowe","comment":null,"created_at":"2026-03-06T06:39:00Z","event_type":"closed","id":31,"issue_id":"git-worktree-organize-3h1","new_value":"Closed","old_value":""}
@@ -0,0 +1,9 @@
1
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:39:01Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"561f6b5866ebbb03db36aa8f14a46eb580c05a0691c30814cefe8d90133a6dfc","created_at":"2026-03-06T04:28:03Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Document usage, installation methods (npx, direct install), what the tool does, before/after directory structure examples.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-3h1","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":3,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Write README","updated_at":"2026-03-06T11:39:01Z","waiters":"","wisp_type":"","work_type":""}
2
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:25:33Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"fb0acfcdb0465d4f5b9dc129ddeb6d91efd79069adc8d86ad1acb4e207809b4a","created_at":"2026-03-06T04:27:47Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Configure package.json with correct bin entry, scripts (build, test), deps (typescript, vitest, @types/bun), tsconfig.json. Stack: Bun runtime, TypeScript, Vitest.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-3yq","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":0,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Set up package.json for Bun + TypeScript + Vitest","updated_at":"2026-03-06T11:25:33Z","waiters":"","wisp_type":"","work_type":""}
3
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Removed — not tracking npm publish as a task","closed_at":"2026-03-06T11:17:42Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"dd2362b7ac9b221851317c89933365a9244782bf7e243b487f0f58cbfcc3731e","created_at":"2026-03-06T04:28:03Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Verify npx git-worktree-organize works locally, then publish package to npm registry.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-53n","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":4,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Publish to npm","updated_at":"2026-03-06T11:17:42Z","waiters":"","wisp_type":"","work_type":""}
4
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:36:16Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"ee988a5cd9bba616c11f15991543ca2991525f0ccf7a42570e78f6d58305eb1d","created_at":"2026-03-06T04:28:03Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Orchestrate the full migration for all repo config types. Tests: standard→hub, bare-root→hub, bare-hub→new location, no worktrees→hub, cross-filesystem, branch with / sanitized to -, collision detection.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-5ea","is_template":0,"issue_type":"feature","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":2,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Implement migrate.ts + full test suite","updated_at":"2026-03-06T11:36:16Z","waiters":"","wisp_type":"","work_type":""}
5
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:26:36Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"7aabd95b4fd55f537a1de1d736dcf6dfbc2bdb4606022497d617bd4327f0d176","created_at":"2026-03-06T04:27:47Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Create src/cli.ts, src/detect.ts, src/worktrees.ts, src/migrate.ts, src/git.ts, src/fs.ts with the types from AGENT_HANDOVER.md (RepoConfig, Worktree) and stub implementations.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-7sk","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":0,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Scaffold source files with types and stubs","updated_at":"2026-03-06T11:26:36Z","waiters":"","wisp_type":"","work_type":""}
6
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:30:26Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"0a01642f655d9349862290f82014254401d6614d5160b5763253fd6738775dea","created_at":"2026-03-06T04:27:55Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"git.ts: run git commands, read git config. fs.ts: move/copy with cross-filesystem detection via statSync().dev. These are the only modules that touch the real system.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-jnu","is_template":0,"issue_type":"feature","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Implement git.ts and fs.ts thin wrappers","updated_at":"2026-03-06T11:30:26Z","waiters":"","wisp_type":"","work_type":""}
7
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:38:11Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"aac42923f4098c6b3b314b1c10374e205085707e0dd4df714a3e0fc2868ce2ba","created_at":"2026-03-06T04:28:03Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Arg parsing (citty or yargs), interactive confirmation prompt, formatted output matching bash prototype (colors, worktree preview table, done message). Wire up npx binary entry.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-pa7","is_template":0,"issue_type":"feature","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":2,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Implement cli.ts entry point","updated_at":"2026-03-06T11:38:11Z","waiters":"","wisp_type":"","work_type":""}
8
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:30:26Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"74d94c1a48786197343e664f31b426b3105f9142e00f2bc70a923ca4d12adadb","created_at":"2026-03-06T04:27:55Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Parse git worktree list --porcelain output into typed Worktree[]. Handle bare, linked, detached HEAD cases. Tests in test/worktrees.test.ts.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-q2e","is_template":0,"issue_type":"feature","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Implement worktrees.ts + tests","updated_at":"2026-03-06T11:30:26Z","waiters":"","wisp_type":"","work_type":""}
9
+ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Closed","closed_at":"2026-03-06T11:30:26Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"e1c9d043c99e2fbecc16f2c9e7ceae6d43600a5ab07c7dea9a53e8dc082552f6","created_at":"2026-03-06T04:27:55Z","created_by":"Mike Crowe","crystallizes":0,"defer_until":null,"description":"Implement all 7 detection cases from the detection matrix: standard, bare-hub, bare-root, bare-dotgit, bare-external, reject-linked-worktree, reject-not-a-repo. Tests in test/detect.test.ts using real git repos in tmpdir.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"git-worktree-organize-t83","is_template":0,"issue_type":"feature","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"drmikecrowe@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"closed","target":"","timeout_ns":0,"title":"Implement detect.ts + full test suite","updated_at":"2026-03-06T11:30:26Z","waiters":"","wisp_type":"","work_type":""}
File without changes
@@ -0,0 +1,55 @@
1
+ # Beads Configuration File
2
+ # This file configures default behavior for all bd commands in this repository
3
+ # All settings can also be set via environment variables (BD_* prefix)
4
+ # or overridden with command-line flags
5
+
6
+ # Issue prefix for this repository (used by bd init)
7
+ # If not set, bd init will auto-detect from directory name
8
+ # Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
9
+ # issue-prefix: ""
10
+
11
+ # Use no-db mode: load from JSONL, write back after each command
12
+ # When true, bd will use .beads/issues.jsonl as the source of truth
13
+ # instead of the Dolt database
14
+ # no-db: false
15
+
16
+ # Enable JSON output by default
17
+ # json: false
18
+
19
+ # Feedback title formatting for mutating commands (create/update/close/dep/edit)
20
+ # 0 = hide titles, N > 0 = truncate to N characters
21
+ # output:
22
+ # title-length: 255
23
+
24
+ # Default actor for audit trails (overridden by BD_ACTOR or --actor)
25
+ # actor: ""
26
+
27
+ # Export events (audit trail) to .beads/events.jsonl on each flush/sync
28
+ # When enabled, new events are appended incrementally using a high-water mark.
29
+ # Use 'bd export --events' to trigger manually regardless of this setting.
30
+ # events-export: false
31
+
32
+ # Multi-repo configuration (experimental - bd-307)
33
+ # Allows hydrating from multiple repositories and routing writes to the correct JSONL
34
+ # repos:
35
+ # primary: "." # Primary repo (where this database lives)
36
+ # additional: # Additional repos to hydrate from (read-only)
37
+ # - ~/beads-planning # Personal planning repo
38
+ # - ~/work-planning # Work planning repo
39
+
40
+ # JSONL backup (periodic export for off-machine recovery)
41
+ # Auto-enabled when a git remote exists. Override explicitly:
42
+ # backup:
43
+ # enabled: false # Disable auto-backup entirely
44
+ # interval: 15m # Minimum time between auto-exports
45
+ # git-push: false # Disable git push (export locally only)
46
+ # git-repo: "" # Separate git repo for backups (default: project repo)
47
+
48
+ # Integration settings (access with 'bd config get/set')
49
+ # These are stored in the database, not in this file:
50
+ # - jira.url
51
+ # - jira.project
52
+ # - linear.url
53
+ # - linear.api-key
54
+ # - github.org
55
+ # - github.repo
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ # --- BEGIN BEADS INTEGRATION v0.57.0 ---
3
+ # This section is managed by beads. Do not remove these markers.
4
+ if command -v bd >/dev/null 2>&1; then
5
+ export BD_GIT_HOOK=1
6
+ bd hooks run post-checkout "$@"
7
+ _bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
8
+ fi
9
+ # --- END BEADS INTEGRATION ---
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ # --- BEGIN BEADS INTEGRATION v0.57.0 ---
3
+ # This section is managed by beads. Do not remove these markers.
4
+ if command -v bd >/dev/null 2>&1; then
5
+ export BD_GIT_HOOK=1
6
+ bd hooks run post-merge "$@"
7
+ _bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
8
+ fi
9
+ # --- END BEADS INTEGRATION ---
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ # --- BEGIN BEADS INTEGRATION v0.57.0 ---
3
+ # This section is managed by beads. Do not remove these markers.
4
+ if command -v bd >/dev/null 2>&1; then
5
+ export BD_GIT_HOOK=1
6
+ bd hooks run pre-commit "$@"
7
+ _bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
8
+ fi
9
+ # --- END BEADS INTEGRATION ---
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ # --- BEGIN BEADS INTEGRATION v0.57.0 ---
3
+ # This section is managed by beads. Do not remove these markers.
4
+ if command -v bd >/dev/null 2>&1; then
5
+ export BD_GIT_HOOK=1
6
+ bd hooks run pre-push "$@"
7
+ _bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
8
+ fi
9
+ # --- END BEADS INTEGRATION ---
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ # --- BEGIN BEADS INTEGRATION v0.57.0 ---
3
+ # This section is managed by beads. Do not remove these markers.
4
+ if command -v bd >/dev/null 2>&1; then
5
+ export BD_GIT_HOOK=1
6
+ bd hooks run prepare-commit-msg "$@"
7
+ _bd_exit=$?; if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
8
+ fi
9
+ # --- END BEADS INTEGRATION ---
File without changes
@@ -0,0 +1,9 @@
1
+ {
2
+ "backend": "dolt",
3
+ "database": "dolt",
4
+ "dolt_mode": "server",
5
+ "dolt_server_host": "127.0.0.1",
6
+ "dolt_server_port": 3307,
7
+ "dolt_database": "git_worktree_organize",
8
+ "last_bd_version": "0.56.1"
9
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(systemctl:*)",
5
+ "Bash(bd init:*)"
6
+ ]
7
+ }
8
+ }