forge-workflow 0.0.9 → 0.0.10

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 (102) hide show
  1. package/.claude/commands/dev.md +2 -2
  2. package/.claude/commands/plan.md +2 -2
  3. package/.claude/commands/ship.md +2 -2
  4. package/.claude/commands/status.md +4 -4
  5. package/.cline/workflows/dev.md +2 -2
  6. package/.cline/workflows/plan.md +2 -2
  7. package/.cline/workflows/ship.md +2 -2
  8. package/.cline/workflows/status.md +4 -4
  9. package/.codex/skills/dev/SKILL.md +2 -2
  10. package/.codex/skills/plan/SKILL.md +2 -2
  11. package/.codex/skills/ship/SKILL.md +2 -2
  12. package/.codex/skills/status/SKILL.md +4 -4
  13. package/.cursor/commands/dev.md +2 -2
  14. package/.cursor/commands/plan.md +2 -2
  15. package/.cursor/commands/ship.md +2 -2
  16. package/.cursor/commands/status.md +4 -4
  17. package/.github/prompts/dev.prompt.md +2 -2
  18. package/.github/prompts/plan.prompt.md +2 -2
  19. package/.github/prompts/ship.prompt.md +2 -2
  20. package/.github/prompts/status.prompt.md +4 -4
  21. package/.github/workflows/beads-to-github.yml +43 -10
  22. package/.github/workflows/github-to-beads.yml +10 -7
  23. package/.kilocode/workflows/dev.md +2 -2
  24. package/.kilocode/workflows/plan.md +2 -2
  25. package/.kilocode/workflows/ship.md +2 -2
  26. package/.kilocode/workflows/status.md +4 -4
  27. package/.opencode/commands/dev.md +2 -2
  28. package/.opencode/commands/plan.md +2 -2
  29. package/.opencode/commands/ship.md +2 -2
  30. package/.opencode/commands/status.md +4 -4
  31. package/.roo/commands/dev.md +2 -2
  32. package/.roo/commands/plan.md +2 -2
  33. package/.roo/commands/ship.md +2 -2
  34. package/.roo/commands/status.md +4 -4
  35. package/AGENTS.md +1 -0
  36. package/CLAUDE.md +12 -0
  37. package/bin/forge.js +10 -5
  38. package/docs/BEADS_GITHUB_SYNC.md +26 -0
  39. package/docs/TOOLCHAIN.md +130 -148
  40. package/lib/beads-bootstrap.js +225 -0
  41. package/lib/beads-health-check.js +55 -10
  42. package/lib/beads-setup.js +104 -28
  43. package/lib/beads-sync-scaffold.js +11 -6
  44. package/lib/commands/_issue.js +11 -1
  45. package/lib/commands/issues.js +49 -0
  46. package/lib/commands/recommend.js +22 -1
  47. package/lib/commands/setup.js +16 -10
  48. package/lib/commands/status.js +181 -0
  49. package/lib/commands/team.js +11 -1
  50. package/lib/commands/test.js +37 -2
  51. package/lib/commands/validate.js +14 -8
  52. package/lib/commands/worktree.js +27 -54
  53. package/lib/dep-guard/keyword-ripple.js +184 -0
  54. package/lib/detect-worktree.js +9 -10
  55. package/lib/forge-issues.js +326 -0
  56. package/lib/issue-sync/authority.js +100 -0
  57. package/lib/issue-sync/github-pull.js +184 -0
  58. package/lib/issue-sync/import-primitives.js +98 -0
  59. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  60. package/lib/issue-sync/link-store.js +292 -0
  61. package/lib/issue-sync/project-github.js +123 -0
  62. package/lib/issue-sync/reconcile.js +195 -0
  63. package/lib/issue-sync/schema.js +126 -0
  64. package/lib/lefthook-check.js +5 -2
  65. package/lib/project-memory.js +564 -0
  66. package/lib/runtime-health.js +100 -12
  67. package/lib/smart-status/conflicts.js +205 -0
  68. package/lib/smart-status/scoring.js +177 -0
  69. package/lib/status/beads-snapshot.js +102 -0
  70. package/lib/status/presenter.js +65 -0
  71. package/lib/workflow/enforce-stage.js +3 -1
  72. package/lib/workflow/state-manager.js +164 -8
  73. package/package.json +12 -4
  74. package/scripts/beads-context.sh +124 -5
  75. package/scripts/beads-context.test.js +21 -4
  76. package/scripts/beads-migrate-to-dolt.sh +7 -0
  77. package/scripts/beads-upgrade-smoke.sh +263 -0
  78. package/scripts/behavioral-judge.sh +115 -11
  79. package/scripts/benchmark.js +349 -63
  80. package/scripts/dep-guard-analyze.js +52 -17
  81. package/scripts/dep-guard-keyword-ripple.js +29 -0
  82. package/scripts/dep-guard-render-review.js +86 -0
  83. package/scripts/dep-guard.sh +45 -232
  84. package/scripts/forge-team/lib/sync-github.sh +160 -28
  85. package/scripts/forge-team/tests/sync-github.test.sh +195 -58
  86. package/scripts/github-beads-sync/index.mjs +122 -98
  87. package/scripts/github-beads-sync/mapping.mjs +54 -0
  88. package/scripts/github-beads-sync/reverse-sync-cli.mjs +2 -2
  89. package/scripts/github-beads-sync/reverse-sync.mjs +31 -7
  90. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  91. package/scripts/preflight.sh +181 -0
  92. package/scripts/smart-status-score.js +31 -0
  93. package/scripts/smart-status-sessions.js +51 -0
  94. package/scripts/smart-status.sh +74 -329
  95. package/scripts/sync-agentic-workflow.js +48 -0
  96. package/scripts/test-ci-shard.js +244 -0
  97. package/scripts/test-dashboard.js +188 -52
  98. package/scripts/test-full-suite.js +186 -0
  99. package/scripts/test-profile.js +278 -0
  100. package/scripts/test.js +219 -28
  101. package/scripts/validate.js +143 -0
  102. package/scripts/validate.sh +18 -1
@@ -69,8 +69,8 @@ Do NOT write any code until ALL confirmed:
69
69
  Before starting the per-task loop, check for cross-developer conflicts:
70
70
 
71
71
  ```bash
72
- # Auto-sync to get latest team state
73
- bash scripts/sync-utils.sh auto-sync
72
+ # Auto-sync to get latest team state (non-blocking)
73
+ forge sync || true
74
74
 
75
75
  # Check for conflicts with the current beads issue
76
76
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -57,7 +57,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
57
57
 
58
58
  ```bash
59
59
  # Auto-sync to get latest team state
60
- bash scripts/sync-utils.sh auto-sync
60
+ forge sync || true
61
61
 
62
62
  # Check for conflicts with this issue's planned work area
63
63
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -107,7 +107,7 @@ If merge conflicts or unmet dependencies are found:
107
107
  Before starting planning, verify team identity is mapped:
108
108
 
109
109
  ```bash
110
- bash scripts/forge-team/index.sh verify 2>&1 || true
110
+ forge team verify 2>&1 || true
111
111
  ```
112
112
 
113
113
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -166,10 +166,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
166
166
 
167
167
  ```bash
168
168
  # Sync issue state to GitHub
169
- bash scripts/forge-team/index.sh sync 2>&1 || true
169
+ forge team sync 2>&1 || true
170
170
 
171
171
  # Verify 1:1 mapping
172
- bash scripts/forge-team/index.sh verify 2>&1 || true
172
+ forge team verify 2>&1 || true
173
173
  ```
174
174
 
175
175
  ## Example Output
@@ -20,7 +20,7 @@ This command helps you understand the current state of the project before starti
20
20
 
21
21
  ```bash
22
22
  # Sync team state before showing status
23
- bash scripts/sync-utils.sh auto-sync
23
+ forge sync || true
24
24
  ```
25
25
 
26
26
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -28,7 +28,7 @@ bash scripts/sync-utils.sh auto-sync
28
28
  ```bash
29
29
  bash scripts/smart-status.sh
30
30
  ```
31
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
31
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
32
32
 
33
33
  For full context on any issue: `bd show <id>`
34
34
 
@@ -77,10 +77,10 @@ Show current developer's active work and team overview:
77
77
 
78
78
  ```bash
79
79
  # Show my active issues
80
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
80
+ forge team workload --me 2>&1 || true
81
81
 
82
82
  # One-line team summary
83
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
83
+ forge team dashboard 2>&1 | head -5 || true
84
84
  ```
85
85
 
86
86
  ## Next Steps
@@ -66,8 +66,8 @@ Do NOT write any code until ALL confirmed:
66
66
  Before starting the per-task loop, check for cross-developer conflicts:
67
67
 
68
68
  ```bash
69
- # Auto-sync to get latest team state
70
- bash scripts/sync-utils.sh auto-sync
69
+ # Auto-sync to get latest team state (non-blocking)
70
+ forge sync || true
71
71
 
72
72
  # Check for conflicts with the current beads issue
73
73
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -54,7 +54,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
54
54
 
55
55
  ```bash
56
56
  # Auto-sync to get latest team state
57
- bash scripts/sync-utils.sh auto-sync
57
+ forge sync || true
58
58
 
59
59
  # Check for conflicts with this issue's planned work area
60
60
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -104,7 +104,7 @@ If merge conflicts or unmet dependencies are found:
104
104
  Before starting planning, verify team identity is mapped:
105
105
 
106
106
  ```bash
107
- bash scripts/forge-team/index.sh verify 2>&1 || true
107
+ forge team verify 2>&1 || true
108
108
  ```
109
109
 
110
110
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -163,10 +163,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
163
163
 
164
164
  ```bash
165
165
  # Sync issue state to GitHub
166
- bash scripts/forge-team/index.sh sync 2>&1 || true
166
+ forge team sync 2>&1 || true
167
167
 
168
168
  # Verify 1:1 mapping
169
- bash scripts/forge-team/index.sh verify 2>&1 || true
169
+ forge team verify 2>&1 || true
170
170
  ```
171
171
 
172
172
  ## Example Output
@@ -17,7 +17,7 @@ This command helps you understand the current state of the project before starti
17
17
 
18
18
  ```bash
19
19
  # Sync team state before showing status
20
- bash scripts/sync-utils.sh auto-sync
20
+ forge sync || true
21
21
  ```
22
22
 
23
23
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -25,7 +25,7 @@ bash scripts/sync-utils.sh auto-sync
25
25
  ```bash
26
26
  bash scripts/smart-status.sh
27
27
  ```
28
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
28
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
29
29
 
30
30
  For full context on any issue: `bd show <id>`
31
31
 
@@ -74,10 +74,10 @@ Show current developer's active work and team overview:
74
74
 
75
75
  ```bash
76
76
  # Show my active issues
77
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
77
+ forge team workload --me 2>&1 || true
78
78
 
79
79
  # One-line team summary
80
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
80
+ forge team dashboard 2>&1 | head -5 || true
81
81
  ```
82
82
 
83
83
  ## Next Steps
@@ -69,8 +69,8 @@ Do NOT write any code until ALL confirmed:
69
69
  Before starting the per-task loop, check for cross-developer conflicts:
70
70
 
71
71
  ```bash
72
- # Auto-sync to get latest team state
73
- bash scripts/sync-utils.sh auto-sync
72
+ # Auto-sync to get latest team state (non-blocking)
73
+ forge sync || true
74
74
 
75
75
  # Check for conflicts with the current beads issue
76
76
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -57,7 +57,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
57
57
 
58
58
  ```bash
59
59
  # Auto-sync to get latest team state
60
- bash scripts/sync-utils.sh auto-sync
60
+ forge sync || true
61
61
 
62
62
  # Check for conflicts with this issue's planned work area
63
63
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -107,7 +107,7 @@ If merge conflicts or unmet dependencies are found:
107
107
  Before starting planning, verify team identity is mapped:
108
108
 
109
109
  ```bash
110
- bash scripts/forge-team/index.sh verify 2>&1 || true
110
+ forge team verify 2>&1 || true
111
111
  ```
112
112
 
113
113
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -166,10 +166,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
166
166
 
167
167
  ```bash
168
168
  # Sync issue state to GitHub
169
- bash scripts/forge-team/index.sh sync 2>&1 || true
169
+ forge team sync 2>&1 || true
170
170
 
171
171
  # Verify 1:1 mapping
172
- bash scripts/forge-team/index.sh verify 2>&1 || true
172
+ forge team verify 2>&1 || true
173
173
  ```
174
174
 
175
175
  ## Example Output
@@ -20,7 +20,7 @@ This command helps you understand the current state of the project before starti
20
20
 
21
21
  ```bash
22
22
  # Sync team state before showing status
23
- bash scripts/sync-utils.sh auto-sync
23
+ forge sync || true
24
24
  ```
25
25
 
26
26
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -28,7 +28,7 @@ bash scripts/sync-utils.sh auto-sync
28
28
  ```bash
29
29
  bash scripts/smart-status.sh
30
30
  ```
31
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
31
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
32
32
 
33
33
  For full context on any issue: `bd show <id>`
34
34
 
@@ -77,10 +77,10 @@ Show current developer's active work and team overview:
77
77
 
78
78
  ```bash
79
79
  # Show my active issues
80
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
80
+ forge team workload --me 2>&1 || true
81
81
 
82
82
  # One-line team summary
83
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
83
+ forge team dashboard 2>&1 | head -5 || true
84
84
  ```
85
85
 
86
86
  ## Next Steps
@@ -66,8 +66,8 @@ Do NOT write any code until ALL confirmed:
66
66
  Before starting the per-task loop, check for cross-developer conflicts:
67
67
 
68
68
  ```bash
69
- # Auto-sync to get latest team state
70
- bash scripts/sync-utils.sh auto-sync
69
+ # Auto-sync to get latest team state (non-blocking)
70
+ forge sync || true
71
71
 
72
72
  # Check for conflicts with the current beads issue
73
73
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -54,7 +54,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
54
54
 
55
55
  ```bash
56
56
  # Auto-sync to get latest team state
57
- bash scripts/sync-utils.sh auto-sync
57
+ forge sync || true
58
58
 
59
59
  # Check for conflicts with this issue's planned work area
60
60
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -104,7 +104,7 @@ If merge conflicts or unmet dependencies are found:
104
104
  Before starting planning, verify team identity is mapped:
105
105
 
106
106
  ```bash
107
- bash scripts/forge-team/index.sh verify 2>&1 || true
107
+ forge team verify 2>&1 || true
108
108
  ```
109
109
 
110
110
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -163,10 +163,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
163
163
 
164
164
  ```bash
165
165
  # Sync issue state to GitHub
166
- bash scripts/forge-team/index.sh sync 2>&1 || true
166
+ forge team sync 2>&1 || true
167
167
 
168
168
  # Verify 1:1 mapping
169
- bash scripts/forge-team/index.sh verify 2>&1 || true
169
+ forge team verify 2>&1 || true
170
170
  ```
171
171
 
172
172
  ## Example Output
@@ -17,7 +17,7 @@ This command helps you understand the current state of the project before starti
17
17
 
18
18
  ```bash
19
19
  # Sync team state before showing status
20
- bash scripts/sync-utils.sh auto-sync
20
+ forge sync || true
21
21
  ```
22
22
 
23
23
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -25,7 +25,7 @@ bash scripts/sync-utils.sh auto-sync
25
25
  ```bash
26
26
  bash scripts/smart-status.sh
27
27
  ```
28
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
28
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
29
29
 
30
30
  For full context on any issue: `bd show <id>`
31
31
 
@@ -74,10 +74,10 @@ Show current developer's active work and team overview:
74
74
 
75
75
  ```bash
76
76
  # Show my active issues
77
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
77
+ forge team workload --me 2>&1 || true
78
78
 
79
79
  # One-line team summary
80
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
80
+ forge team dashboard 2>&1 | head -5 || true
81
81
  ```
82
82
 
83
83
  ## Next Steps
@@ -71,8 +71,8 @@ Do NOT write any code until ALL confirmed:
71
71
  Before starting the per-task loop, check for cross-developer conflicts:
72
72
 
73
73
  ```bash
74
- # Auto-sync to get latest team state
75
- bash scripts/sync-utils.sh auto-sync
74
+ # Auto-sync to get latest team state (non-blocking)
75
+ forge sync || true
76
76
 
77
77
  # Check for conflicts with the current beads issue
78
78
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -59,7 +59,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
59
59
 
60
60
  ```bash
61
61
  # Auto-sync to get latest team state
62
- bash scripts/sync-utils.sh auto-sync
62
+ forge sync || true
63
63
 
64
64
  # Check for conflicts with this issue's planned work area
65
65
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -109,7 +109,7 @@ If merge conflicts or unmet dependencies are found:
109
109
  Before starting planning, verify team identity is mapped:
110
110
 
111
111
  ```bash
112
- bash scripts/forge-team/index.sh verify 2>&1 || true
112
+ forge team verify 2>&1 || true
113
113
  ```
114
114
 
115
115
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -168,10 +168,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
168
168
 
169
169
  ```bash
170
170
  # Sync issue state to GitHub
171
- bash scripts/forge-team/index.sh sync 2>&1 || true
171
+ forge team sync 2>&1 || true
172
172
 
173
173
  # Verify 1:1 mapping
174
- bash scripts/forge-team/index.sh verify 2>&1 || true
174
+ forge team verify 2>&1 || true
175
175
  ```
176
176
 
177
177
  ## Example Output
@@ -22,7 +22,7 @@ This command helps you understand the current state of the project before starti
22
22
 
23
23
  ```bash
24
24
  # Sync team state before showing status
25
- bash scripts/sync-utils.sh auto-sync
25
+ forge sync || true
26
26
  ```
27
27
 
28
28
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -30,7 +30,7 @@ bash scripts/sync-utils.sh auto-sync
30
30
  ```bash
31
31
  bash scripts/smart-status.sh
32
32
  ```
33
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
33
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
34
34
 
35
35
  For full context on any issue: `bd show <id>`
36
36
 
@@ -79,10 +79,10 @@ Show current developer's active work and team overview:
79
79
 
80
80
  ```bash
81
81
  # Show my active issues
82
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
82
+ forge team workload --me 2>&1 || true
83
83
 
84
84
  # One-line team summary
85
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
85
+ forge team dashboard 2>&1 | head -5 || true
86
86
  ```
87
87
 
88
88
  ## Next Steps
@@ -5,6 +5,7 @@ on:
5
5
  branches: [master]
6
6
  paths:
7
7
  - '.beads/**'
8
+ - '.github/beads-snapshots/issues.jsonl'
8
9
 
9
10
  # Serialize with forward-sync to prevent race conditions
10
11
  concurrency:
@@ -34,23 +35,55 @@ jobs:
34
35
  with:
35
36
  fetch-depth: 0
36
37
 
38
+ - name: Install Beads CLI (pinned to v1.0.0)
39
+ if: env.SKIP != 'true'
40
+ run: |
41
+ BD_VERSION="1.0.0"
42
+ BD_URL="https://github.com/steveyegge/beads/releases/download/v${BD_VERSION}/beads_${BD_VERSION}_linux_amd64.tar.gz"
43
+ mkdir -p "$HOME/.local/bin"
44
+ curl -fsSL "$BD_URL" | tar -xz -C "$HOME/.local/bin" bd
45
+ chmod +x "$HOME/.local/bin/bd"
46
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
47
+
37
48
  - name: Detect and close
38
49
  if: env.SKIP != 'true'
39
50
  env:
40
51
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
52
  BEFORE_SHA: ${{ github.event.before }}
42
53
  run: |
43
- # Get old and new versions of .beads/issues.jsonl
44
- # Use github.event.before (pre-push SHA) to catch multi-commit pushes
54
+ OLD_SNAPSHOT_PATH="$RUNNER_TEMP/old-issues.jsonl"
55
+ NEW_SNAPSHOT_PATH="$RUNNER_TEMP/new-issues.jsonl"
56
+ BEFORE_WORKTREE="$RUNNER_TEMP/beads-before"
57
+
58
+ generate_snapshot() {
59
+ local repo_root="$1"
60
+ local output_path="$2"
61
+
62
+ BEADS_DIR="$repo_root/.beads" bd init 2>/dev/null || true
63
+ if BEADS_DIR="$repo_root/.beads" bd backup --force 2>/dev/null; then
64
+ cp "$repo_root/.beads/backup/issues.jsonl" "$output_path"
65
+ else
66
+ : > "$output_path"
67
+ fi
68
+ }
69
+
70
+ # Rebuild the current snapshot from the pushed Beads state so local bd close
71
+ # transitions are reflected even when the tracked snapshot file was not updated.
72
+ generate_snapshot "$GITHUB_WORKSPACE" "$NEW_SNAPSHOT_PATH"
73
+
74
+ # Use github.event.before (pre-push SHA) to catch multi-commit pushes.
75
+ # Rebuild the previous snapshot from that tree's Beads state when possible.
45
76
  if [ "$BEFORE_SHA" = "0000000000000000000000000000000000000000" ] || [ -z "$BEFORE_SHA" ]; then
46
- OLD_CONTENT=""
77
+ : > "$OLD_SNAPSHOT_PATH"
78
+ elif git cat-file -e "$BEFORE_SHA:.beads" 2>/dev/null; then
79
+ rm -rf "$BEFORE_WORKTREE"
80
+ mkdir -p "$BEFORE_WORKTREE"
81
+ git archive "$BEFORE_SHA" .beads | tar -x -C "$BEFORE_WORKTREE"
82
+ generate_snapshot "$BEFORE_WORKTREE" "$OLD_SNAPSHOT_PATH"
47
83
  else
48
- OLD_CONTENT=$(git show "$BEFORE_SHA":.beads/issues.jsonl 2>/dev/null || echo "")
84
+ # Fallback for historical commits that predate tracked .beads state.
85
+ OLD_CONTENT=$(git show "$BEFORE_SHA":.github/beads-snapshots/issues.jsonl 2>/dev/null || echo "")
86
+ printf '%s' "$OLD_CONTENT" > "$OLD_SNAPSHOT_PATH"
49
87
  fi
50
- NEW_CONTENT=$(cat .beads/issues.jsonl 2>/dev/null || echo "")
51
-
52
- # Export via temp files to avoid shell injection
53
- printf '%s' "$OLD_CONTENT" > /tmp/old-issues.jsonl
54
- printf '%s' "$NEW_CONTENT" > /tmp/new-issues.jsonl
55
88
 
56
- node scripts/github-beads-sync/reverse-sync-cli.mjs /tmp/old-issues.jsonl /tmp/new-issues.jsonl
89
+ node scripts/github-beads-sync/reverse-sync-cli.mjs "$OLD_SNAPSHOT_PATH" "$NEW_SNAPSHOT_PATH"
@@ -30,9 +30,9 @@ jobs:
30
30
  - name: Setup Bun
31
31
  uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2
32
32
 
33
- - name: Install Beads CLI (pinned to v0.49.1)
33
+ - name: Install Beads CLI (pinned to v1.0.0)
34
34
  run: |
35
- BD_VERSION="0.49.1"
35
+ BD_VERSION="1.0.0"
36
36
  BD_URL="https://github.com/steveyegge/beads/releases/download/v${BD_VERSION}/beads_${BD_VERSION}_linux_amd64.tar.gz"
37
37
  mkdir -p "$HOME/.local/bin"
38
38
  curl -fsSL "$BD_URL" | tar -xz -C "$HOME/.local/bin" bd
@@ -43,7 +43,7 @@ jobs:
43
43
  BEADS_DIR: ${{ github.workspace }}/.beads
44
44
  run: |
45
45
  bd --version
46
- # Initialize SQLite DB from JSONL on fresh checkout
46
+ # Initialize the current Dolt-backed layout on fresh checkout
47
47
  bd init 2>/dev/null || true
48
48
 
49
49
  - name: Run sync
@@ -57,10 +57,13 @@ jobs:
57
57
  run: |
58
58
  node scripts/github-beads-sync/index.mjs "$SYNC_ACTION"
59
59
 
60
- - name: Export database to JSONL
60
+ - name: Export backup snapshot
61
61
  env:
62
62
  BEADS_DIR: ${{ github.workspace }}/.beads
63
- run: bd sync
63
+ run: |
64
+ bd backup --force
65
+ mkdir -p .github/beads-snapshots
66
+ cp .beads/backup/issues.jsonl .github/beads-snapshots/issues.jsonl
64
67
 
65
68
  - name: Commit and push changes
66
69
  env:
@@ -69,8 +72,8 @@ jobs:
69
72
  git config user.name "github-actions[bot]"
70
73
  git config user.email "github-actions[bot]@users.noreply.github.com"
71
74
 
72
- # Stage beads and mapping changes
73
- git add .beads/ .github/beads-mapping.json || true
75
+ # Stage beads state, mapping changes, and the tracked issue snapshot
76
+ git add .beads/ .github/beads-mapping.json .github/beads-snapshots/issues.jsonl || true
74
77
 
75
78
  # Only commit if there are changes
76
79
  if git diff --cached --quiet; then
@@ -70,8 +70,8 @@ Do NOT write any code until ALL confirmed:
70
70
  Before starting the per-task loop, check for cross-developer conflicts:
71
71
 
72
72
  ```bash
73
- # Auto-sync to get latest team state
74
- bash scripts/sync-utils.sh auto-sync
73
+ # Auto-sync to get latest team state (non-blocking)
74
+ forge sync || true
75
75
 
76
76
  # Check for conflicts with the current beads issue
77
77
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -58,7 +58,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
58
58
 
59
59
  ```bash
60
60
  # Auto-sync to get latest team state
61
- bash scripts/sync-utils.sh auto-sync
61
+ forge sync || true
62
62
 
63
63
  # Check for conflicts with this issue's planned work area
64
64
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -108,7 +108,7 @@ If merge conflicts or unmet dependencies are found:
108
108
  Before starting planning, verify team identity is mapped:
109
109
 
110
110
  ```bash
111
- bash scripts/forge-team/index.sh verify 2>&1 || true
111
+ forge team verify 2>&1 || true
112
112
  ```
113
113
 
114
114
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -167,10 +167,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
167
167
 
168
168
  ```bash
169
169
  # Sync issue state to GitHub
170
- bash scripts/forge-team/index.sh sync 2>&1 || true
170
+ forge team sync 2>&1 || true
171
171
 
172
172
  # Verify 1:1 mapping
173
- bash scripts/forge-team/index.sh verify 2>&1 || true
173
+ forge team verify 2>&1 || true
174
174
  ```
175
175
 
176
176
  ## Example Output
@@ -21,7 +21,7 @@ This command helps you understand the current state of the project before starti
21
21
 
22
22
  ```bash
23
23
  # Sync team state before showing status
24
- bash scripts/sync-utils.sh auto-sync
24
+ forge sync || true
25
25
  ```
26
26
 
27
27
  ### Step 1: Smart Status (ranked issues with conflict detection)
@@ -29,7 +29,7 @@ bash scripts/sync-utils.sh auto-sync
29
29
  ```bash
30
30
  bash scripts/smart-status.sh
31
31
  ```
32
- This script dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed — the script handles everything.
32
+ This command dynamically computes and displays all issues ranked by composite score (priority, dependency impact, type, staleness, epic proximity). Output includes active sessions, conflict risk annotations, and grouped categories. No manual querying needed.
33
33
 
34
34
  For full context on any issue: `bd show <id>`
35
35
 
@@ -78,10 +78,10 @@ Show current developer's active work and team overview:
78
78
 
79
79
  ```bash
80
80
  # Show my active issues
81
- bash scripts/forge-team/index.sh workload --me 2>&1 || true
81
+ forge team workload --me 2>&1 || true
82
82
 
83
83
  # One-line team summary
84
- bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
84
+ forge team dashboard 2>&1 | head -5 || true
85
85
  ```
86
86
 
87
87
  ## Next Steps
@@ -69,8 +69,8 @@ Do NOT write any code until ALL confirmed:
69
69
  Before starting the per-task loop, check for cross-developer conflicts:
70
70
 
71
71
  ```bash
72
- # Auto-sync to get latest team state
73
- bash scripts/sync-utils.sh auto-sync
72
+ # Auto-sync to get latest team state (non-blocking)
73
+ forge sync || true
74
74
 
75
75
  # Check for conflicts with the current beads issue
76
76
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -57,7 +57,7 @@ Before proceeding to Phase 1, check for cross-developer conflicts:
57
57
 
58
58
  ```bash
59
59
  # Auto-sync to get latest team state
60
- bash scripts/sync-utils.sh auto-sync
60
+ forge sync || true
61
61
 
62
62
  # Check for conflicts with this issue's planned work area
63
63
  bash scripts/conflict-detect.sh --issue <beads-id>
@@ -107,7 +107,7 @@ If merge conflicts or unmet dependencies are found:
107
107
  Before starting planning, verify team identity is mapped:
108
108
 
109
109
  ```bash
110
- bash scripts/forge-team/index.sh verify 2>&1 || true
110
+ forge team verify 2>&1 || true
111
111
  ```
112
112
 
113
113
  If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
@@ -166,10 +166,10 @@ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
166
166
 
167
167
  ```bash
168
168
  # Sync issue state to GitHub
169
- bash scripts/forge-team/index.sh sync 2>&1 || true
169
+ forge team sync 2>&1 || true
170
170
 
171
171
  # Verify 1:1 mapping
172
- bash scripts/forge-team/index.sh verify 2>&1 || true
172
+ forge team verify 2>&1 || true
173
173
  ```
174
174
 
175
175
  ## Example Output