specweave 1.0.235 → 1.0.239
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.
- package/README.md +89 -193
- package/dist/plugins/specweave-github/lib/github-ac-comment-poster.d.ts +37 -0
- package/dist/plugins/specweave-github/lib/github-ac-comment-poster.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js +176 -0
- package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-batch-sync.d.ts +36 -0
- package/dist/plugins/specweave-github/lib/github-batch-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-batch-sync.js +115 -0
- package/dist/plugins/specweave-github/lib/github-batch-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-board-resolver-v2.d.ts +37 -0
- package/dist/plugins/specweave-github/lib/github-board-resolver-v2.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-board-resolver-v2.js +56 -0
- package/dist/plugins/specweave-github/lib/github-board-resolver-v2.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-conflict-resolver.d.ts +68 -0
- package/dist/plugins/specweave-github/lib/github-conflict-resolver.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-conflict-resolver.js +102 -0
- package/dist/plugins/specweave-github/lib/github-conflict-resolver.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-cross-repo-sync.d.ts +64 -0
- package/dist/plugins/specweave-github/lib/github-cross-repo-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js +162 -0
- package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-field-sync.d.ts +50 -0
- package/dist/plugins/specweave-github/lib/github-field-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-field-sync.js +107 -0
- package/dist/plugins/specweave-github/lib/github-field-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-graphql-client.d.ts +53 -0
- package/dist/plugins/specweave-github/lib/github-graphql-client.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-graphql-client.js +138 -0
- package/dist/plugins/specweave-github/lib/github-graphql-client.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-generator.d.ts +40 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-generator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-generator.js +50 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-generator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-parser.d.ts +30 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-parser.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-parser.js +75 -0
- package/dist/plugins/specweave-github/lib/github-issue-body-parser.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts +94 -0
- package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-pull-sync.js +232 -0
- package/dist/plugins/specweave-github/lib/github-pull-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-push-sync.d.ts +50 -0
- package/dist/plugins/specweave-github/lib/github-push-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-push-sync.js +114 -0
- package/dist/plugins/specweave-github/lib/github-push-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-rate-limiter.d.ts +53 -0
- package/dist/plugins/specweave-github/lib/github-rate-limiter.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-rate-limiter.js +109 -0
- package/dist/plugins/specweave-github/lib/github-rate-limiter.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts +21 -0
- package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.js +161 -0
- package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts +46 -0
- package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-sync-orchestrator.js +99 -0
- package/dist/plugins/specweave-github/lib/github-sync-orchestrator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-us-auto-closer.d.ts +43 -0
- package/dist/plugins/specweave-github/lib/github-us-auto-closer.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-us-auto-closer.js +153 -0
- package/dist/plugins/specweave-github/lib/github-us-auto-closer.js.map +1 -0
- package/dist/plugins/specweave-github/lib/index.d.ts +1 -4
- package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/index.js +1 -4
- package/dist/plugins/specweave-github/lib/index.js.map +1 -1
- package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts +7 -0
- package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.js +15 -0
- package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.js.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-detector.d.ts +10 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-detector.js +36 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-detector.js.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-runner.d.ts +25 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-runner.d.ts.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-runner.js +57 -0
- package/dist/plugins/specweave-testing/lib/playwright-cli-runner.js.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-routing.d.ts +7 -0
- package/dist/plugins/specweave-testing/lib/playwright-routing.d.ts.map +1 -0
- package/dist/plugins/specweave-testing/lib/playwright-routing.js +17 -0
- package/dist/plugins/specweave-testing/lib/playwright-routing.js.map +1 -0
- package/dist/src/cli/commands/auto.d.ts.map +1 -1
- package/dist/src/cli/commands/auto.js +1 -2
- package/dist/src/cli/commands/auto.js.map +1 -1
- package/dist/src/cli/commands/cancel-auto.js +1 -2
- package/dist/src/cli/commands/cancel-auto.js.map +1 -1
- package/dist/src/cli/commands/living-docs.js +2 -2
- package/dist/src/cli/commands/living-docs.js.map +1 -1
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +1 -2
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/core/config/types.d.ts +8 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js +3 -0
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +72 -0
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js +6 -0
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/package.json +2 -2
- package/plugins/specweave/hooks/hooks.json +2 -2
- package/plugins/specweave/hooks/startup-health-check.sh +1 -1
- package/plugins/specweave/hooks/stop-auto-v5.sh +166 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +10 -0
- package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +21 -1
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +1 -1
- package/plugins/specweave/skills/auto/SKILL.md +71 -251
- package/plugins/specweave/skills/team-build/SKILL.md +370 -0
- package/plugins/specweave/skills/team-merge/SKILL.md +123 -0
- package/plugins/specweave/skills/team-orchestrate/SKILL.md +800 -0
- package/plugins/specweave/skills/team-status/SKILL.md +89 -0
- package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +94 -8
- package/plugins/specweave-github/commands/sync.md +17 -3
- package/plugins/specweave-github/hooks/github-ac-sync-handler.sh +255 -0
- package/plugins/specweave-github/hooks/github-auto-create-handler.sh +455 -0
- package/plugins/specweave-github/lib/github-ac-comment-poster.js +150 -0
- package/plugins/specweave-github/lib/github-ac-comment-poster.ts +245 -0
- package/plugins/specweave-github/lib/github-batch-sync.js +93 -0
- package/plugins/specweave-github/lib/github-batch-sync.ts +152 -0
- package/plugins/specweave-github/lib/github-board-resolver-v2.js +47 -0
- package/plugins/specweave-github/lib/github-board-resolver-v2.ts +73 -0
- package/plugins/specweave-github/lib/github-conflict-resolver.js +90 -0
- package/plugins/specweave-github/lib/github-conflict-resolver.ts +154 -0
- package/plugins/specweave-github/lib/github-cross-repo-sync.js +168 -0
- package/plugins/specweave-github/lib/github-cross-repo-sync.ts +252 -0
- package/plugins/specweave-github/lib/github-field-sync.js +116 -0
- package/plugins/specweave-github/lib/github-field-sync.ts +165 -0
- package/plugins/specweave-github/lib/github-graphql-client.js +129 -0
- package/plugins/specweave-github/lib/github-graphql-client.ts +181 -0
- package/plugins/specweave-github/lib/github-issue-body-generator.js +30 -0
- package/plugins/specweave-github/lib/github-issue-body-generator.ts +76 -0
- package/plugins/specweave-github/lib/github-issue-body-parser.js +55 -0
- package/plugins/specweave-github/lib/github-issue-body-parser.ts +92 -0
- package/plugins/specweave-github/lib/github-pull-sync.js +185 -0
- package/plugins/specweave-github/lib/github-pull-sync.ts +343 -0
- package/plugins/specweave-github/lib/github-push-sync.js +119 -0
- package/plugins/specweave-github/lib/github-push-sync.ts +174 -0
- package/plugins/specweave-github/lib/github-rate-limiter.js +96 -0
- package/plugins/specweave-github/lib/github-rate-limiter.ts +143 -0
- package/plugins/specweave-github/lib/github-spec-frontmatter-updater.js +117 -0
- package/plugins/specweave-github/lib/github-spec-frontmatter-updater.ts +180 -0
- package/plugins/specweave-github/lib/github-sync-orchestrator.js +84 -0
- package/plugins/specweave-github/lib/github-sync-orchestrator.ts +156 -0
- package/plugins/specweave-github/lib/github-us-auto-closer.js +134 -0
- package/plugins/specweave-github/lib/github-us-auto-closer.ts +226 -0
- package/plugins/specweave-github/lib/index.js +1 -7
- package/plugins/specweave-github/lib/index.ts +1 -4
- package/plugins/specweave-github/skills/github-sync/SKILL.md +76 -4
- package/plugins/specweave-testing/commands/e2e-setup.md +18 -0
- package/plugins/specweave-testing/commands/ui-automate.md +2 -0
- package/plugins/specweave-testing/commands/ui-inspect.md +8 -0
- package/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts +6 -0
- package/plugins/specweave-testing/lib/playwright-ci-defaults.js +14 -0
- package/plugins/specweave-testing/lib/playwright-ci-defaults.ts +24 -0
- package/plugins/specweave-testing/lib/playwright-cli-detector.js +33 -0
- package/plugins/specweave-testing/lib/playwright-cli-detector.ts +48 -0
- package/plugins/specweave-testing/lib/playwright-cli-runner.js +58 -0
- package/plugins/specweave-testing/lib/playwright-cli-runner.ts +80 -0
- package/plugins/specweave-testing/lib/playwright-routing.js +16 -0
- package/plugins/specweave-testing/lib/playwright-routing.ts +38 -0
- package/plugins/specweave-testing/skills/e2e-testing/SKILL.md +38 -0
- package/src/templates/CLAUDE.md.template +7 -0
- package/src/templates/config.json.template +9 -1
- package/dist/plugins/specweave-github/lib/subtask-sync.d.ts +0 -51
- package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/subtask-sync.js +0 -147
- package/dist/plugins/specweave-github/lib/subtask-sync.js.map +0 -1
- package/dist/plugins/specweave-github/lib/task-parser.d.ts +0 -37
- package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/task-parser.js +0 -211
- package/dist/plugins/specweave-github/lib/task-parser.js.map +0 -1
- package/dist/plugins/specweave-github/lib/task-sync.d.ts +0 -56
- package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/task-sync.js +0 -375
- package/dist/plugins/specweave-github/lib/task-sync.js.map +0 -1
- package/plugins/specweave/hooks/validate-completion-conditions.sh +0 -474
- package/plugins/specweave-github/lib/subtask-sync.d.ts +0 -51
- package/plugins/specweave-github/lib/subtask-sync.d.ts.map +0 -1
- package/plugins/specweave-github/lib/subtask-sync.js +0 -154
- package/plugins/specweave-github/lib/subtask-sync.js.map +0 -1
- package/plugins/specweave-github/lib/subtask-sync.ts +0 -225
- package/plugins/specweave-github/lib/task-parser.d.js +0 -0
- package/plugins/specweave-github/lib/task-parser.d.ts +0 -37
- package/plugins/specweave-github/lib/task-parser.d.ts.map +0 -1
- package/plugins/specweave-github/lib/task-parser.js +0 -195
- package/plugins/specweave-github/lib/task-parser.js.map +0 -1
- package/plugins/specweave-github/lib/task-parser.ts +0 -246
- package/plugins/specweave-github/lib/task-sync.d.js +0 -0
- package/plugins/specweave-github/lib/task-sync.d.ts +0 -51
- package/plugins/specweave-github/lib/task-sync.d.ts.map +0 -1
- package/plugins/specweave-github/lib/task-sync.js +0 -415
- package/plugins/specweave-github/lib/task-sync.js.map +0 -1
- package/plugins/specweave-github/lib/task-sync.ts +0 -451
- package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +0 -496
- /package/plugins/specweave/hooks/{stop-auto.sh → _archive/stop-auto-v4-legacy.sh} +0 -0
- /package/plugins/{specweave-github/lib/subtask-sync.d.js → specweave-testing/lib/playwright-ci-defaults.d.js} +0 -0
package/README.md
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# SpecWeave
|
|
2
2
|
|
|
3
|
-
**The
|
|
3
|
+
**The spec-driven framework for Claude Code and OpenClaw.**
|
|
4
4
|
|
|
5
|
-
*
|
|
5
|
+
*Coordinate parallel AI agents. Prevent task overlap. Quality gates. Ship features while you sleep.*
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/specweave)
|
|
8
8
|
[](https://opensource.org/licenses/MIT)
|
|
9
9
|
[](https://github.com/anton-abyzov/specweave/actions/workflows/test.yml)
|
|
10
10
|
[](https://discord.gg/UYg4BGJ65V)
|
|
11
|
-
[](https://www.youtube.com/@antonabyzov)
|
|
12
11
|
|
|
13
12
|
```bash
|
|
14
13
|
npm install -g specweave # Requires Node.js 20.12.0+
|
|
@@ -19,173 +18,97 @@ npm install -g specweave # Requires Node.js 20.12.0+
|
|
|
19
18
|
## Quick Demo
|
|
20
19
|
|
|
21
20
|
```bash
|
|
22
|
-
/sw:increment "User authentication"
|
|
23
|
-
/sw:auto
|
|
21
|
+
/sw:increment "User authentication" # AI creates spec + plan + tasks
|
|
22
|
+
/sw:auto # Autonomous execution for hours
|
|
23
|
+
/sw:grill 0001 # Senior-level code review
|
|
24
|
+
/sw:done 0001 # Validate and complete
|
|
24
25
|
```
|
|
25
26
|
|
|
26
|
-
**What happens:**
|
|
27
|
-
- AI creates spec + plan + tasks
|
|
28
|
-
- Executes autonomously for **hours**
|
|
29
|
-
- Tests, fixes failures, syncs to GitHub/JIRA
|
|
30
|
-
- You review finished work
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
[08:23:41] [Planning] Analyzing T-003: Implement refresh token rotation
|
|
34
|
-
[08:24:12] [Implementing] Writing src/auth/token-manager.ts
|
|
35
|
-
[08:25:33] [Testing] Running tests... FAILED
|
|
36
|
-
[08:25:47] [Fixing] Adjusting implementation...
|
|
37
|
-
[08:26:15] [Testing] Re-running... PASSED
|
|
38
|
-
[08:26:22] [Done] T-003 complete. Moving to T-004...
|
|
39
|
-
```
|
|
27
|
+
**What happens:** Claude creates a full specification, executes tasks autonomously, runs tests, fixes failures, and syncs progress to GitHub/JIRA. You review finished work.
|
|
40
28
|
|
|
41
29
|
---
|
|
42
30
|
|
|
43
31
|
## Why SpecWeave?
|
|
44
32
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
.specweave/increments/0001-oauth/
|
|
49
|
-
├── spec.md <- WHAT: User stories, acceptance criteria
|
|
50
|
-
├── plan.md <- HOW: Architecture decisions, tech choices
|
|
51
|
-
└── tasks.md <- DO: Implementation tasks with tests
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**After 6 months**: Search "OAuth" → find exact decisions, who approved, why it was built that way.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Key Differentiators
|
|
59
|
-
|
|
60
|
-
### Lazy Plugin Loading (99% Token Savings)
|
|
61
|
-
|
|
62
|
-
SpecWeave loads plugins **on-demand** based on your prompt keywords:
|
|
63
|
-
|
|
64
|
-
| Scenario | Without Lazy Loading | With Lazy Loading |
|
|
65
|
-
|----------|---------------------|-------------------|
|
|
66
|
-
| Non-SpecWeave work | ~60k tokens | ~500 tokens |
|
|
67
|
-
| SpecWeave work | ~60k tokens | ~60k (when needed) |
|
|
68
|
-
|
|
69
|
-
Say "React frontend" → frontend plugin loads. Say "Kubernetes deploy" → k8s plugin loads. No manual configuration.
|
|
70
|
-
|
|
71
|
-
### Self-Improving Skills
|
|
72
|
-
|
|
73
|
-
SpecWeave learns from corrections. When you fix something, it captures the learning:
|
|
74
|
-
|
|
75
|
-
```markdown
|
|
76
|
-
## Skill Memories
|
|
77
|
-
<!-- Auto-captured by SpecWeave reflect -->
|
|
78
|
-
- Always use `vi.hoisted()` for ESM mocking in Vitest 4.x+
|
|
79
|
-
- Prefer native `fs` over fs-extra in new code
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Next time, it won't make the same mistake.
|
|
83
|
-
|
|
84
|
-
### Structured Documentation (No Root Bloat)
|
|
33
|
+
AI coding agents are powerful individually. Run three of them on the same codebase and you get conflicts, duplicated work, and zero traceability.
|
|
85
34
|
|
|
86
|
-
|
|
35
|
+
SpecWeave solves this with **file-based coordination**:
|
|
87
36
|
|
|
88
37
|
```
|
|
89
|
-
.specweave/
|
|
90
|
-
├──
|
|
91
|
-
├──
|
|
92
|
-
|
|
93
|
-
│ └── specs/ # Feature specifications
|
|
94
|
-
└── config.json # Project configuration
|
|
38
|
+
.specweave/increments/0001-oauth/
|
|
39
|
+
├── spec.md ← WHAT: User stories, acceptance criteria
|
|
40
|
+
├── plan.md ← HOW: Architecture decisions, tech choices
|
|
41
|
+
└── tasks.md ← DO: Implementation tasks with tests
|
|
95
42
|
```
|
|
96
43
|
|
|
97
|
-
|
|
44
|
+
Each increment is a self-contained scope. Each agent knows exactly what's taken and what's available. No overlap. No conflicts. Six months later, search "OAuth" and find exactly what was decided, who approved it, and why.
|
|
98
45
|
|
|
99
|
-
###
|
|
46
|
+
### What Makes It Different
|
|
100
47
|
|
|
101
|
-
|
|
48
|
+
- **Parallel agent coordination** — multiple Claude Code sessions, OpenClaw instances, or remote agents work on different increments without stepping on each other.
|
|
49
|
+
- **Autonomous execution** — runs for hours, not minutes. Write, test, fix, repeat.
|
|
50
|
+
- **Persistent memory** — AI learns from corrections. Fix once, remembered permanently.
|
|
51
|
+
- **Quality gates** — Code Grill reviews code like a demanding senior engineer before every release.
|
|
52
|
+
- **Living documentation** — specs, ADRs, and runbooks sync automatically after every task.
|
|
53
|
+
- **100+ specialized skills** — PM, Architect, QA, Security, DevOps, Frontend, Mobile, ML, and more collaborate on deliverables.
|
|
54
|
+
- **External sync** — GitHub Issues, JIRA, Azure DevOps — bidirectional, real-time.
|
|
55
|
+
- **Self-improving** — captures what works and what doesn't. Gets smarter over time.
|
|
56
|
+
- **LSP integration** — semantic code intelligence for TypeScript, Python, Go, Rust, Java, C#.
|
|
102
57
|
|
|
103
|
-
|
|
104
|
-
Deep Interview Mode
|
|
58
|
+
---
|
|
105
59
|
|
|
106
|
-
|
|
107
|
-
integrations, UI/UX, and tradeoffs before creating specifications.
|
|
60
|
+
## Install
|
|
108
61
|
|
|
109
|
-
|
|
62
|
+
```bash
|
|
63
|
+
npm install -g specweave
|
|
64
|
+
cd your-project
|
|
65
|
+
specweave init .
|
|
110
66
|
```
|
|
111
67
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
### 68+ AI Agents Working Together
|
|
115
|
-
|
|
116
|
-
| Agent | Role |
|
|
117
|
-
|-------|------|
|
|
118
|
-
| **PM** | Requirements, user stories, acceptance criteria |
|
|
119
|
-
| **Architect** | System design, ADRs, tech decisions |
|
|
120
|
-
| **QA Lead** | Test strategy, quality gates |
|
|
121
|
-
| **Security** | OWASP review, vulnerability scanning |
|
|
122
|
-
| **DevOps** | CI/CD, infrastructure, deployment |
|
|
123
|
-
|
|
124
|
-
Agents auto-activate based on context. Mention "security" → security expertise loads. Best results with Claude Opus 4.6 and Sonnet 4.5.
|
|
125
|
-
|
|
126
|
-
### LSP Integration (100x Faster Code Understanding)
|
|
127
|
-
|
|
128
|
-
SpecWeave leverages **Language Server Protocol** for semantic code intelligence:
|
|
129
|
-
|
|
130
|
-
| Operation | Without LSP | With LSP |
|
|
131
|
-
|-----------|-------------|----------|
|
|
132
|
-
| Find all references | Grep + read 15 files (~10K tokens) | Semantic query (~500 tokens) |
|
|
133
|
-
| Check type errors | Build + parse output (~5K tokens) | getDiagnostics (~1K tokens) |
|
|
134
|
-
| Navigate to definition | Grep + verify (~8K tokens) | goToDefinition (~200 tokens) |
|
|
135
|
-
|
|
136
|
-
**LSP plugins work automatically** when editing code. Edit a `.cs` file → `csharp-lsp` activates. Edit `.ts` → `typescript-lsp` activates. No configuration needed.
|
|
137
|
-
|
|
68
|
+
Then in Claude Code:
|
|
138
69
|
```bash
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
pip install pyright # Python
|
|
142
|
-
dotnet tool install -g csharp-ls # C#
|
|
70
|
+
/sw:increment "Add dark mode" # Describe your feature
|
|
71
|
+
/sw:auto # Ship while you sleep
|
|
143
72
|
```
|
|
144
73
|
|
|
145
|
-
**
|
|
74
|
+
> **Node.js 20.12.0+** required (22 LTS recommended). Getting `SyntaxError`? [Upgrade instructions](https://spec-weave.com/docs/guides/troubleshooting/common-errors#node-version-error).
|
|
146
75
|
|
|
147
76
|
---
|
|
148
77
|
|
|
149
|
-
##
|
|
78
|
+
## Parallel Development
|
|
150
79
|
|
|
151
|
-
|
|
80
|
+
Run multiple AI agents on the same repository — locally, in the cloud, or with [OpenClaw](https://openclaw.ai). SpecWeave's increment files are the coordination layer:
|
|
152
81
|
|
|
153
|
-
**Node.js 20.12.0+** required (recommend Node.js 22 LTS).
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
node --version # Check version
|
|
157
82
|
```
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
83
|
+
Agent 1 (local Claude Code) Agent 2 (cloud) Agent 3 (OpenClaw)
|
|
84
|
+
working on: 0001-auth working on: 0002-payments working on: 0003-notifications
|
|
85
|
+
│ │ │
|
|
86
|
+
└──────────────────────────────┼───────────────────────────┘
|
|
87
|
+
│
|
|
88
|
+
.specweave/increments/
|
|
89
|
+
├── 0001-auth/tasks.md ← Agent 1's scope
|
|
90
|
+
├── 0002-payments/tasks.md ← Agent 2's scope
|
|
91
|
+
└── 0003-notifications/tasks.md ← Agent 3's scope
|
|
167
92
|
```
|
|
168
93
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
94
|
+
**How it works:**
|
|
95
|
+
1. Create increments for each feature: `/sw:increment "auth"`, `/sw:increment "payments"`
|
|
96
|
+
2. Each agent picks an increment and runs `/sw:auto` — tasks.md tracks exactly what's done
|
|
97
|
+
3. Agents work in isolated scopes — different files, different specs, different tests
|
|
98
|
+
4. Quality gates (`/sw:grill`) ensure consistent standards regardless of which agent built it
|
|
99
|
+
5. Progress syncs to GitHub/JIRA so you see everything in one place
|
|
173
100
|
|
|
174
|
-
|
|
101
|
+
**Why this matters:** OpenClaw and Claude Code sessions are stateless by default. SpecWeave's spec/plan/tasks files persist across sessions and agents — your coordination layer survives restarts, crashes, and context window limits.
|
|
175
102
|
|
|
176
|
-
|
|
177
|
-
npm install -g specweave
|
|
178
|
-
cd your-project
|
|
179
|
-
specweave init .
|
|
180
|
-
```
|
|
103
|
+
**Agent team commands:**
|
|
181
104
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
105
|
+
| Command | Purpose |
|
|
106
|
+
|---------|---------|
|
|
107
|
+
| `/sw:team-orchestrate "feature"` | Split feature across parallel agents |
|
|
108
|
+
| `/sw:team-status` | Monitor all agent progress |
|
|
109
|
+
| `/sw:team-merge` | Merge completed work in dependency order |
|
|
110
|
+
|
|
111
|
+
**[Full agent teams guide](https://spec-weave.com/docs/guides/agent-teams-and-swarms)**
|
|
189
112
|
|
|
190
113
|
---
|
|
191
114
|
|
|
@@ -194,63 +117,43 @@ Then:
|
|
|
194
117
|
| Command | Purpose |
|
|
195
118
|
|---------|---------|
|
|
196
119
|
| `/sw:increment "feature"` | Create spec + plan + tasks |
|
|
197
|
-
| `/sw:auto` | Autonomous execution
|
|
120
|
+
| `/sw:auto` | Autonomous execution |
|
|
198
121
|
| `/sw:do` | Execute one task at a time |
|
|
199
|
-
| `/sw:grill
|
|
200
|
-
| `/sw:done
|
|
201
|
-
| `/sw:sync-progress` | Push to GitHub/JIRA/ADO |
|
|
122
|
+
| `/sw:grill` | Code review before close |
|
|
123
|
+
| `/sw:done` | Close with quality validation |
|
|
124
|
+
| `/sw:sync-progress` | Push to GitHub / JIRA / ADO |
|
|
202
125
|
| `/sw:next` | Auto-close + suggest next |
|
|
203
126
|
|
|
204
|
-
**[
|
|
127
|
+
**[Full command reference](https://spec-weave.com/docs/commands/overview)**
|
|
205
128
|
|
|
206
129
|
---
|
|
207
130
|
|
|
208
|
-
##
|
|
131
|
+
## Integrations
|
|
209
132
|
|
|
210
|
-
| Platform |
|
|
211
|
-
|
|
212
|
-
| **GitHub** | Issues, PRs, milestones
|
|
213
|
-
| **JIRA** | Epics, stories, status
|
|
133
|
+
| Platform | What Syncs |
|
|
134
|
+
|----------|-----------|
|
|
135
|
+
| **GitHub** | Issues, PRs, milestones — bidirectional |
|
|
136
|
+
| **JIRA** | Epics, stories, status |
|
|
214
137
|
| **Azure DevOps** | Work items, area paths |
|
|
215
138
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
/sw:sync-progress # Manual: Push updates to ALL tools
|
|
220
|
-
/sw-github:sync 0001 # Manual: Sync specific increment to GitHub
|
|
221
|
-
/sw-jira:sync 0001 # Manual: Sync specific increment to JIRA
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Works On Everything
|
|
227
|
-
|
|
228
|
-
| Scenario | What Happens |
|
|
229
|
-
|----------|-------------|
|
|
230
|
-
| **10-year legacy codebase** | Brownfield analysis detects doc gaps |
|
|
231
|
-
| **Weekend MVP** | Full spec-driven development |
|
|
232
|
-
| **50-team enterprise** | Multi-project sync to JIRA/ADO |
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## CLI Commands
|
|
237
|
-
|
|
238
|
-
| Command | Purpose |
|
|
239
|
-
|---------|---------|
|
|
240
|
-
| `specweave init .` | Initialize project |
|
|
241
|
-
| `specweave update` | **Full update**: CLI + plugins + instructions |
|
|
242
|
-
|
|
243
|
-
### Troubleshooting
|
|
244
|
-
|
|
245
|
-
Run `specweave update` - this fixes 98% of issues (updates CLI, plugins, and instructions).
|
|
139
|
+
When you close an increment, external tools update automatically.
|
|
246
140
|
|
|
247
141
|
---
|
|
248
142
|
|
|
249
|
-
##
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
-
|
|
143
|
+
## How It Compares
|
|
144
|
+
|
|
145
|
+
| Capability | SpecWeave | BMAD Method | GitHub SpecKit |
|
|
146
|
+
|------------|-----------|-------------|----------------|
|
|
147
|
+
| **Parallel agent coordination** | Increment-scoped isolation | No | No |
|
|
148
|
+
| **Autonomous execution** | Hours of unattended `/sw:auto` | No | No |
|
|
149
|
+
| **Quality gates** | Code Grill before every release | No | No |
|
|
150
|
+
| **Living documentation** | Auto-updated after every task | Manual | Manual |
|
|
151
|
+
| **Self-improving AI** | Learns from corrections | No | No |
|
|
152
|
+
| **External sync** | GitHub / JIRA / ADO bidirectional | No | No |
|
|
153
|
+
| **Specialized skills** | 100+ (PM, QA, DevOps, ML...) | 21 agents | None |
|
|
154
|
+
| **Works with OpenClaw** | Yes | Partial | Partial |
|
|
155
|
+
| **Spec/plan/tasks workflow** | Yes | Yes | Yes |
|
|
156
|
+
| **Agent-agnostic** | Claude Code + OpenClaw + Copilot + Codex | Multi-IDE | Multi-IDE |
|
|
254
157
|
|
|
255
158
|
---
|
|
256
159
|
|
|
@@ -258,25 +161,18 @@ Run `specweave update` - this fixes 98% of issues (updates CLI, plugins, and ins
|
|
|
258
161
|
|
|
259
162
|
> This framework builds itself. Every feature, bug fix, and release is spec-driven.
|
|
260
163
|
|
|
261
|
-
[
|
|
262
|
-
[](https://github.com/anton-abyzov/specweave/tree/develop/.specweave/increments)
|
|
263
|
-
|
|
264
|
-
**[Browse our increments →](https://github.com/anton-abyzov/specweave/tree/develop/.specweave/increments)**
|
|
164
|
+
**[Browse increments](https://github.com/anton-abyzov/specweave/tree/develop/.specweave/increments)** — see how SpecWeave develops SpecWeave.
|
|
265
165
|
|
|
266
166
|
---
|
|
267
167
|
|
|
268
168
|
## Documentation
|
|
269
169
|
|
|
270
|
-
**[spec-weave.com](https://spec-weave.com)**
|
|
271
|
-
|
|
272
|
-
---
|
|
170
|
+
**[spec-weave.com](https://spec-weave.com)** — guides, examples, and full reference.
|
|
273
171
|
|
|
274
172
|
## Community
|
|
275
173
|
|
|
276
|
-
[Discord](https://discord.gg/UYg4BGJ65V)
|
|
277
|
-
|
|
278
|
-
---
|
|
174
|
+
[Discord](https://discord.gg/UYg4BGJ65V) · [YouTube](https://www.youtube.com/@antonabyzov) · [GitHub Issues](https://github.com/anton-abyzov/specweave/issues)
|
|
279
175
|
|
|
280
176
|
## License
|
|
281
177
|
|
|
282
|
-
MIT
|
|
178
|
+
MIT — [github.com/anton-abyzov/specweave](https://github.com/anton-abyzov/specweave)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub AC Comment Poster — Posts progress comments to GitHub issues
|
|
3
|
+
* when acceptance criteria are completed in spec.md.
|
|
4
|
+
*
|
|
5
|
+
* Triggered by github-ac-sync-handler.sh after task-ac-sync-guard
|
|
6
|
+
* updates spec.md ACs.
|
|
7
|
+
*
|
|
8
|
+
* @module github-ac-comment-poster
|
|
9
|
+
*/
|
|
10
|
+
export interface CommentPostOptions {
|
|
11
|
+
owner: string;
|
|
12
|
+
repo: string;
|
|
13
|
+
token?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CommentPostResult {
|
|
16
|
+
posted: Array<{
|
|
17
|
+
usId: string;
|
|
18
|
+
issueNumber: number;
|
|
19
|
+
}>;
|
|
20
|
+
errors: Array<{
|
|
21
|
+
usId: string;
|
|
22
|
+
error: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Post AC progress comments to GitHub issues for affected user stories.
|
|
27
|
+
*
|
|
28
|
+
* For each affected US:
|
|
29
|
+
* 1. Look up GitHub issue link from spec.md frontmatter
|
|
30
|
+
* 2. Extract AC states for that US
|
|
31
|
+
* 3. Build progress comment
|
|
32
|
+
* 4. Post via `gh issue comment`
|
|
33
|
+
*
|
|
34
|
+
* Never throws — all errors are captured in result.errors.
|
|
35
|
+
*/
|
|
36
|
+
export declare function postACProgressComments(incrementId: string, affectedUSIds: string[], specPath: string, options: CommentPostOptions): Promise<CommentPostResult>;
|
|
37
|
+
//# sourceMappingURL=github-ac-comment-poster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-ac-comment-poster.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-ac-comment-poster.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAaD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA8D5B"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub AC Comment Poster — Posts progress comments to GitHub issues
|
|
3
|
+
* when acceptance criteria are completed in spec.md.
|
|
4
|
+
*
|
|
5
|
+
* Triggered by github-ac-sync-handler.sh after task-ac-sync-guard
|
|
6
|
+
* updates spec.md ACs.
|
|
7
|
+
*
|
|
8
|
+
* @module github-ac-comment-poster
|
|
9
|
+
*/
|
|
10
|
+
import { readFile } from 'fs/promises';
|
|
11
|
+
import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
|
|
12
|
+
import { pushSyncUserStories } from './github-push-sync.js';
|
|
13
|
+
/**
|
|
14
|
+
* Post AC progress comments to GitHub issues for affected user stories.
|
|
15
|
+
*
|
|
16
|
+
* For each affected US:
|
|
17
|
+
* 1. Look up GitHub issue link from spec.md frontmatter
|
|
18
|
+
* 2. Extract AC states for that US
|
|
19
|
+
* 3. Build progress comment
|
|
20
|
+
* 4. Post via `gh issue comment`
|
|
21
|
+
*
|
|
22
|
+
* Never throws — all errors are captured in result.errors.
|
|
23
|
+
*/
|
|
24
|
+
export async function postACProgressComments(incrementId, affectedUSIds, specPath, options) {
|
|
25
|
+
const result = { posted: [], errors: [] };
|
|
26
|
+
if (affectedUSIds.length === 0) {
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
let content;
|
|
30
|
+
try {
|
|
31
|
+
content = await readFile(specPath, 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
result.errors.push({
|
|
35
|
+
usId: affectedUSIds[0],
|
|
36
|
+
error: err instanceof Error ? err.message : String(err),
|
|
37
|
+
});
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
const issueLinks = parseIssueLinks(content);
|
|
41
|
+
const repoSlug = `${options.owner}/${options.repo}`;
|
|
42
|
+
const env = options.token ? { GH_TOKEN: options.token } : undefined;
|
|
43
|
+
for (const usId of affectedUSIds) {
|
|
44
|
+
const link = issueLinks[usId];
|
|
45
|
+
if (!link) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const acStates = parseACStatesForUS(content, usId);
|
|
49
|
+
const commentBody = buildProgressCommentForUS(incrementId, usId, acStates);
|
|
50
|
+
const execResult = await execFileNoThrow('gh', ['issue', 'comment', String(link.issueNumber), '--body', commentBody, '-R', repoSlug], env ? { env } : {});
|
|
51
|
+
if (execResult.success) {
|
|
52
|
+
result.posted.push({ usId, issueNumber: link.issueNumber });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
result.errors.push({
|
|
56
|
+
usId,
|
|
57
|
+
error: execResult.stderr || 'Unknown error posting comment',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Targeted push-sync: update issue body with current AC states
|
|
61
|
+
const usForSync = buildUserStoryForSync(content, usId, acStates, incrementId);
|
|
62
|
+
if (usForSync) {
|
|
63
|
+
try {
|
|
64
|
+
await pushSyncUserStories([usForSync], {
|
|
65
|
+
owner: options.owner,
|
|
66
|
+
repo: options.repo,
|
|
67
|
+
token: options.token,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Push-sync failure is non-blocking
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parse issue links from spec.md YAML frontmatter.
|
|
79
|
+
* Extracts externalLinks.github.userStories entries.
|
|
80
|
+
*/
|
|
81
|
+
function parseIssueLinks(content) {
|
|
82
|
+
const links = {};
|
|
83
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
84
|
+
if (!fmMatch)
|
|
85
|
+
return links;
|
|
86
|
+
const frontmatter = fmMatch[1];
|
|
87
|
+
// Parse userStories section from YAML frontmatter
|
|
88
|
+
const usBlockMatch = frontmatter.match(/userStories:\s*\n((?:\s{6,}[\s\S]*?)(?=\n\s{0,3}\S|$))/);
|
|
89
|
+
if (!usBlockMatch)
|
|
90
|
+
return links;
|
|
91
|
+
const usBlock = usBlockMatch[1];
|
|
92
|
+
const usEntries = usBlock.match(/^\s+(US-\d+):\s*\n((?:\s+\w[\s\S]*?)(?=\n\s+US-|\s*$))/gm);
|
|
93
|
+
if (!usEntries)
|
|
94
|
+
return links;
|
|
95
|
+
for (const entry of usEntries) {
|
|
96
|
+
const idMatch = entry.match(/(US-\d+):/);
|
|
97
|
+
const numMatch = entry.match(/issueNumber:\s*(\d+)/);
|
|
98
|
+
const urlMatch = entry.match(/issueUrl:\s*"([^"]+)"/);
|
|
99
|
+
if (idMatch && numMatch) {
|
|
100
|
+
links[idMatch[1]] = {
|
|
101
|
+
issueNumber: parseInt(numMatch[1], 10),
|
|
102
|
+
issueUrl: urlMatch ? urlMatch[1] : '',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return links;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Extract AC states for a specific user story from spec.md content.
|
|
110
|
+
*/
|
|
111
|
+
function parseACStatesForUS(content, usId) {
|
|
112
|
+
const states = [];
|
|
113
|
+
// AC IDs use unpadded US number: US-001 → AC-US1-XX
|
|
114
|
+
const usNum = String(parseInt(usId.replace('US-', ''), 10));
|
|
115
|
+
const acPattern = new RegExp(`- \\[([ x])\\] \\*\\*AC-US${usNum}-(\\d+)\\*\\*:\\s*(.+)`, 'g');
|
|
116
|
+
let match;
|
|
117
|
+
while ((match = acPattern.exec(content)) !== null) {
|
|
118
|
+
states.push({
|
|
119
|
+
id: `AC-US${usNum}-${match[2]}`,
|
|
120
|
+
description: match[3].trim(),
|
|
121
|
+
completed: match[1] === 'x',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return states;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build a UserStoryForSync object for targeted push-sync.
|
|
128
|
+
*/
|
|
129
|
+
function buildUserStoryForSync(content, usId, acStates, incrementId) {
|
|
130
|
+
// Extract US title from content
|
|
131
|
+
const usNum = String(parseInt(usId.replace('US-', ''), 10)).padStart(3, '0');
|
|
132
|
+
const titleMatch = content.match(new RegExp(`### US-${usNum}:\\s*(.+)`));
|
|
133
|
+
const title = titleMatch ? titleMatch[1].trim() : usId;
|
|
134
|
+
return {
|
|
135
|
+
id: usId,
|
|
136
|
+
title,
|
|
137
|
+
description: '',
|
|
138
|
+
priority: 'P1',
|
|
139
|
+
status: 'in-progress',
|
|
140
|
+
acceptanceCriteria: acStates.map(ac => ({
|
|
141
|
+
id: ac.id,
|
|
142
|
+
description: ac.description,
|
|
143
|
+
completed: ac.completed,
|
|
144
|
+
})),
|
|
145
|
+
specId: incrementId,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Build a progress comment for a specific user story.
|
|
150
|
+
* Follows ProgressCommentBuilder format: percentage, AC checkboxes, timestamp.
|
|
151
|
+
*/
|
|
152
|
+
function buildProgressCommentForUS(incrementId, usId, acStates) {
|
|
153
|
+
const total = acStates.length;
|
|
154
|
+
const completed = acStates.filter(ac => ac.completed).length;
|
|
155
|
+
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
156
|
+
let comment = `**Progress Update** — ${usId} (Increment ${incrementId})\n\n`;
|
|
157
|
+
comment += `**Status**: ${completed}/${total} ACs complete (${percentage}%)\n\n`;
|
|
158
|
+
if (completed > 0) {
|
|
159
|
+
comment += `**Completed**:\n`;
|
|
160
|
+
for (const ac of acStates.filter(a => a.completed)) {
|
|
161
|
+
comment += `- [x] **${ac.id}**: ${ac.description}\n`;
|
|
162
|
+
}
|
|
163
|
+
comment += '\n';
|
|
164
|
+
}
|
|
165
|
+
if (completed < total) {
|
|
166
|
+
comment += `**Remaining**:\n`;
|
|
167
|
+
for (const ac of acStates.filter(a => !a.completed)) {
|
|
168
|
+
comment += `- [ ] **${ac.id}**: ${ac.description}\n`;
|
|
169
|
+
}
|
|
170
|
+
comment += '\n';
|
|
171
|
+
}
|
|
172
|
+
comment += `---\n`;
|
|
173
|
+
comment += `Auto-synced by SpecWeave | ${new Date().toISOString().split('T')[0]}\n`;
|
|
174
|
+
return comment;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=github-ac-comment-poster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-ac-comment-poster.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-ac-comment-poster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Batch Sync — Sync all specs in workspace
|
|
3
|
+
*
|
|
4
|
+
* Discovers all spec files and syncs them sequentially
|
|
5
|
+
* using the GitHubSyncOrchestrator.
|
|
6
|
+
*
|
|
7
|
+
* @module github-batch-sync
|
|
8
|
+
*/
|
|
9
|
+
export interface BatchSyncConfig {
|
|
10
|
+
owner: string;
|
|
11
|
+
repo: string;
|
|
12
|
+
workspaceRoot: string;
|
|
13
|
+
token?: string;
|
|
14
|
+
dryRun?: boolean;
|
|
15
|
+
projectV2Enabled?: boolean;
|
|
16
|
+
projectV2Number?: number;
|
|
17
|
+
projectV2Id?: string;
|
|
18
|
+
statusFieldMapping?: Record<string, string>;
|
|
19
|
+
priorityFieldMapping?: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface BatchSyncResult {
|
|
22
|
+
specsProcessed: number;
|
|
23
|
+
specsFailed: number;
|
|
24
|
+
totalIssuesCreated: number;
|
|
25
|
+
totalIssuesUpdated: number;
|
|
26
|
+
errors: Array<{
|
|
27
|
+
specPath: string;
|
|
28
|
+
error: string;
|
|
29
|
+
}>;
|
|
30
|
+
summary: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Discover all specs and sync them sequentially.
|
|
34
|
+
*/
|
|
35
|
+
export declare function batchSyncAllSpecs(config: BatchSyncConfig): Promise<BatchSyncResult>;
|
|
36
|
+
//# sourceMappingURL=github-batch-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-batch-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-batch-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA0DzF"}
|