forge-workflow 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.
@@ -0,0 +1,466 @@
1
+ # SonarCloud API Reference
2
+
3
+ Complete parameter and response documentation for all endpoints.
4
+
5
+ ## Issues (`/api/issues/search`)
6
+
7
+ ### Parameters
8
+
9
+ | Parameter | Description | Values |
10
+ | --------- | ----------- | ------ |
11
+ | `organization` | Org key | Required |
12
+ | `componentKeys` | Project key(s) | Comma-separated |
13
+ | `types` | Issue types | `BUG`, `VULNERABILITY`, `CODE_SMELL`, `SECURITY_HOTSPOT` |
14
+ | `severities` | Severity | `BLOCKER`, `CRITICAL`, `MAJOR`, `MINOR`, `INFO` |
15
+ | `statuses` | Status | `OPEN`, `CONFIRMED`, `REOPENED`, `RESOLVED`, `CLOSED` |
16
+ | `resolutions` | Resolution | `FALSE-POSITIVE`, `WONTFIX`, `FIXED`, `REMOVED` |
17
+ | `resolved` | Filter | `true`, `false` |
18
+ | `branch` | Branch name | String |
19
+ | `pullRequest` | PR number | String |
20
+ | `createdAfter` | Date filter | `YYYY-MM-DD` |
21
+ | `createdBefore` | Date filter | `YYYY-MM-DD` |
22
+ | `languages` | Languages | `java`, `typescript`, `python`, etc. |
23
+ | `rules` | Rule keys | Comma-separated |
24
+ | `tags` | Issue tags | Comma-separated |
25
+ | `assignees` | Assigned users | Comma-separated |
26
+ | `authors` | Code authors | Comma-separated |
27
+ | `scopes` | Scope | `MAIN`, `TEST` |
28
+ | `inNewCodePeriod` | New code only | `true`, `false` |
29
+ | `facets` | Aggregations | `severities`, `types`, `rules`, `tags` |
30
+ | `p` | Page number | Integer (1-based) |
31
+ | `ps` | Page size | Integer (max 500) |
32
+ | `s` | Sort field | `CREATION_DATE`, `UPDATE_DATE`, `SEVERITY` |
33
+ | `asc` | Sort order | `true`, `false` |
34
+
35
+ ### Response
36
+
37
+ ```json
38
+ {
39
+ "total": 150,
40
+ "paging": { "pageIndex": 1, "pageSize": 100, "total": 150 },
41
+ "issues": [{
42
+ "key": "AYx...",
43
+ "rule": "typescript:S1234",
44
+ "severity": "MAJOR",
45
+ "component": "my-project:src/file.ts",
46
+ "line": 42,
47
+ "message": "Remove this unused variable.",
48
+ "type": "CODE_SMELL",
49
+ "status": "OPEN",
50
+ "effort": "5min",
51
+ "tags": ["unused"],
52
+ "creationDate": "2024-01-15T10:30:00+0000"
53
+ }],
54
+ "facets": [{ "property": "severities", "values": [{ "val": "MAJOR", "count": 50 }] }]
55
+ }
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Metrics (`/api/measures/component`)
61
+
62
+ ### Parameters
63
+
64
+ | Parameter | Description |
65
+ | --------- | ----------- |
66
+ | `component` | Project key (required) |
67
+ | `metricKeys` | Metrics (comma-separated) |
68
+ | `branch` | Branch name |
69
+ | `pullRequest` | PR number |
70
+ | `additionalFields` | `metrics`, `periods` |
71
+
72
+ ### All Metric Keys
73
+
74
+ | Category | Keys |
75
+ | -------- | ---- |
76
+ | Size | `ncloc`, `lines`, `statements`, `functions`, `classes`, `files` |
77
+ | Complexity | `complexity`, `cognitive_complexity` |
78
+ | Coverage | `coverage`, `line_coverage`, `branch_coverage`, `tests`, `test_success_density`, `uncovered_lines`, `uncovered_conditions` |
79
+ | Duplication | `duplicated_lines`, `duplicated_lines_density`, `duplicated_blocks`, `duplicated_files` |
80
+ | Issues | `bugs`, `vulnerabilities`, `code_smells`, `security_hotspots` |
81
+ | Ratings | `sqale_rating`, `reliability_rating`, `security_rating`, `security_review_rating` (1=A to 5=E) |
82
+ | Debt | `sqale_index` (minutes), `sqale_debt_ratio` (%) |
83
+ | Quality Gate | `alert_status`, `quality_gate_details` |
84
+ | New Code | `new_bugs`, `new_vulnerabilities`, `new_code_smells`, `new_coverage`, `new_duplicated_lines_density` |
85
+
86
+ ### Response
87
+
88
+ ```json
89
+ {
90
+ "component": {
91
+ "key": "my-project",
92
+ "name": "My Project",
93
+ "measures": [
94
+ { "metric": "bugs", "value": "12" },
95
+ { "metric": "coverage", "value": "78.5" },
96
+ { "metric": "sqale_rating", "value": "2.0" }
97
+ ]
98
+ }
99
+ }
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Quality Gate (`/api/qualitygates/project_status`)
105
+
106
+ ### Parameters
107
+
108
+ | Parameter | Description |
109
+ | --------- | ----------- |
110
+ | `projectKey` | Project key (required) |
111
+ | `branch` | Branch name |
112
+ | `pullRequest` | PR number |
113
+
114
+ ### Response
115
+
116
+ ```json
117
+ {
118
+ "projectStatus": {
119
+ "status": "ERROR",
120
+ "conditions": [{
121
+ "status": "ERROR",
122
+ "metricKey": "new_coverage",
123
+ "comparator": "LT",
124
+ "errorThreshold": "80",
125
+ "actualValue": "65.3"
126
+ }],
127
+ "ignoredConditions": false
128
+ }
129
+ }
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Security Hotspots (`/api/hotspots/search`)
135
+
136
+ ### Parameters
137
+
138
+ | Parameter | Description | Values |
139
+ | --------- | ----------- | ------ |
140
+ | `projectKey` | Project key | Required |
141
+ | `branch` | Branch name | String |
142
+ | `pullRequest` | PR number | String |
143
+ | `status` | Status | `TO_REVIEW`, `REVIEWED` |
144
+ | `resolution` | Resolution | `FIXED`, `SAFE`, `ACKNOWLEDGED` |
145
+ | `inNewCodePeriod` | New code | `true`, `false` |
146
+ | `p` / `ps` | Pagination | Integer |
147
+
148
+ ### Response
149
+
150
+ ```json
151
+ {
152
+ "paging": { "total": 5 },
153
+ "hotspots": [{
154
+ "key": "...",
155
+ "component": "my-project:src/auth.ts",
156
+ "securityCategory": "sql-injection",
157
+ "vulnerabilityProbability": "HIGH",
158
+ "status": "TO_REVIEW",
159
+ "message": "Make sure this SQL query is safe.",
160
+ "line": 42
161
+ }]
162
+ }
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Projects (`/api/projects/search`)
168
+
169
+ ### Parameters
170
+
171
+ | Parameter | Description |
172
+ | --------- | ----------- |
173
+ | `organization` | Org key |
174
+ | `q` | Search query |
175
+ | `qualifiers` | `TRK` (project), `APP` |
176
+ | `p` / `ps` | Pagination |
177
+
178
+ ---
179
+
180
+ ## Analysis History (`/api/project_analyses/search`)
181
+
182
+ ### Parameters
183
+
184
+ | Parameter | Description |
185
+ | --------- | ----------- |
186
+ | `project` | Project key |
187
+ | `branch` | Branch name |
188
+ | `from` / `to` | Date range |
189
+ | `p` / `ps` | Pagination |
190
+
191
+ ### Response
192
+
193
+ ```json
194
+ {
195
+ "analyses": [{
196
+ "key": "AYx...",
197
+ "date": "2024-01-15T10:30:00+0000",
198
+ "projectVersion": "1.2.0",
199
+ "revision": "abc123def",
200
+ "events": [{ "category": "VERSION", "name": "1.2.0" }]
201
+ }]
202
+ }
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Metrics History (`/api/measures/search_history`)
208
+
209
+ ### Parameters
210
+
211
+ | Parameter | Description |
212
+ | --------- | ----------- |
213
+ | `component` | Project key |
214
+ | `metrics` | Metric keys |
215
+ | `from` / `to` | Date range (`YYYY-MM-DD`) |
216
+ | `branch` | Branch name |
217
+ | `p` / `ps` | Pagination |
218
+
219
+ ---
220
+
221
+ ## Component Tree (`/api/components/tree`)
222
+
223
+ ### Parameters
224
+
225
+ | Parameter | Description |
226
+ | --------- | ----------- |
227
+ | `component` | Project key |
228
+ | `branch` | Branch name |
229
+ | `qualifiers` | `FIL` (file), `DIR`, `UTS` (test) |
230
+ | `metricKeys` | Metrics per component |
231
+ | `strategy` | `children`, `leaves`, `all` |
232
+ | `q` | Search query |
233
+ | `s` / `asc` | Sort field / ascending |
234
+ | `metricSort` | Metric to sort by |
235
+
236
+ ---
237
+
238
+ ## Duplications (`/api/duplications/show`)
239
+
240
+ Get detailed duplicate code blocks for a specific file.
241
+
242
+ ### Parameters
243
+
244
+ | Parameter | Description |
245
+ | --------- | ----------- |
246
+ | `key` | File key (required) - format: `project-key:path/to/file.ts` |
247
+ | `branch` | Branch name |
248
+ | `pullRequest` | PR number |
249
+
250
+ ### Response
251
+
252
+ ```json
253
+ {
254
+ "duplications": [
255
+ {
256
+ "blocks": [
257
+ {
258
+ "from": 1,
259
+ "size": 20,
260
+ "_ref": "1"
261
+ },
262
+ {
263
+ "from": 50,
264
+ "size": 20,
265
+ "_ref": "2"
266
+ }
267
+ ]
268
+ }
269
+ ],
270
+ "files": {
271
+ "1": {
272
+ "key": "my-project:src/utils/helpers.ts",
273
+ "name": "helpers.ts",
274
+ "projectName": "My Project"
275
+ },
276
+ "2": {
277
+ "key": "my-project:src/utils/common.ts",
278
+ "name": "common.ts",
279
+ "projectName": "My Project"
280
+ }
281
+ }
282
+ }
283
+ ```
284
+
285
+ ### Workflow: Find All Duplicates
286
+
287
+ ```bash
288
+ # 1. Get files with most duplication
289
+ curl -H "Authorization: Bearer $TOKEN" \
290
+ "https://sonarcloud.io/api/components/tree?component=$PROJECT&qualifiers=FIL&metricKeys=duplicated_lines_density&s=metric&metricSort=duplicated_lines_density&asc=false&ps=20"
291
+
292
+ # 2. For each file, get duplicate blocks
293
+ curl -H "Authorization: Bearer $TOKEN" \
294
+ "https://sonarcloud.io/api/duplications/show?key=my-project:src/file.ts"
295
+ ```
296
+
297
+ ---
298
+
299
+ ## Rules (`/api/rules/search`)
300
+
301
+ ### Parameters
302
+
303
+ | Parameter | Description |
304
+ | --------- | ----------- |
305
+ | `languages` | Filter by language |
306
+ | `severities` | Filter by severity |
307
+ | `types` | Filter by type |
308
+ | `tags` | Filter by tags |
309
+ | `q` | Search query |
310
+ | `p` / `ps` | Pagination |
311
+
312
+ ---
313
+
314
+ ## Sources (`/api/sources/*`)
315
+
316
+ ### Raw Source Code (`/api/sources/raw`)
317
+
318
+ | Parameter | Description |
319
+ | --------- | ----------- |
320
+ | `key` | File key (required) - format: `project:path/to/file.ts` |
321
+ | `branch` | Branch name |
322
+
323
+ ```bash
324
+ curl -H "Authorization: Bearer $TOKEN" \
325
+ "https://sonarcloud.io/api/sources/raw?key=my-project:src/utils/helpers.ts"
326
+ ```
327
+
328
+ ### SCM Blame (`/api/sources/scm`)
329
+
330
+ | Parameter | Description |
331
+ | --------- | ----------- |
332
+ | `key` | File key (required) |
333
+ | `from` | Start line |
334
+ | `to` | End line |
335
+
336
+ ```bash
337
+ curl -H "Authorization: Bearer $TOKEN" \
338
+ "https://sonarcloud.io/api/sources/scm?key=my-project:src/utils/helpers.ts"
339
+ ```
340
+
341
+ **Response**: Returns author, date, and revision for each line.
342
+
343
+ ---
344
+
345
+ ## Compute Engine (`/api/ce/activity`)
346
+
347
+ Get background task status (analysis jobs).
348
+
349
+ | Parameter | Description |
350
+ | --------- | ----------- |
351
+ | `component` | Project key |
352
+ | `status` | `SUCCESS`, `FAILED`, `CANCELED`, `PENDING`, `IN_PROGRESS` |
353
+ | `type` | Task type (e.g., `REPORT`) |
354
+ | `minSubmittedAt` | Filter by submission date |
355
+ | `maxExecutedAt` | Filter by execution date |
356
+ | `p` / `ps` | Pagination |
357
+
358
+ ```bash
359
+ curl -H "Authorization: Bearer $TOKEN" \
360
+ "https://sonarcloud.io/api/ce/activity?component=my-project&status=FAILED"
361
+ ```
362
+
363
+ ---
364
+
365
+ ## Quality Profiles (`/api/qualityprofiles/search`)
366
+
367
+ | Parameter | Description |
368
+ | --------- | ----------- |
369
+ | `language` | Filter by language |
370
+ | `project` | Project key |
371
+ | `qualityProfile` | Profile name |
372
+
373
+ ```bash
374
+ curl -H "Authorization: Bearer $TOKEN" \
375
+ "https://sonarcloud.io/api/qualityprofiles/search?language=ts"
376
+ ```
377
+
378
+ ---
379
+
380
+ ## Languages (`/api/languages/list`)
381
+
382
+ List all supported languages.
383
+
384
+ ```bash
385
+ curl -H "Authorization: Bearer $TOKEN" \
386
+ "https://sonarcloud.io/api/languages/list"
387
+ ```
388
+
389
+ **Response**: `{ "languages": [{ "key": "ts", "name": "TypeScript" }, ...] }`
390
+
391
+ ---
392
+
393
+ ## Branches (`/api/project_branches/list`)
394
+
395
+ | Parameter | Description |
396
+ | --------- | ----------- |
397
+ | `project` | Project key (required) |
398
+
399
+ ```bash
400
+ curl -H "Authorization: Bearer $TOKEN" \
401
+ "https://sonarcloud.io/api/project_branches/list?project=my-project"
402
+ ```
403
+
404
+ **Response**: `{ "branches": [{ "name": "main", "isMain": true, "type": "LONG", "status": { "qualityGateStatus": "OK" } }] }`
405
+
406
+ ---
407
+
408
+ ## Badges (`/api/project_badges/*`)
409
+
410
+ ### Measure Badge (`/api/project_badges/measure`)
411
+
412
+ | Parameter | Description |
413
+ | --------- | ----------- |
414
+ | `project` | Project key |
415
+ | `metric` | `bugs`, `coverage`, `code_smells`, `vulnerabilities`, etc. |
416
+ | `branch` | Branch name |
417
+
418
+ Returns SVG badge image.
419
+
420
+ ```bash
421
+ curl "https://sonarcloud.io/api/project_badges/measure?project=my-project&metric=coverage"
422
+ ```
423
+
424
+ ### Quality Gate Badge (`/api/project_badges/quality_gate`)
425
+
426
+ | Parameter | Description |
427
+ | --------- | ----------- |
428
+ | `project` | Project key |
429
+ | `branch` | Branch name |
430
+
431
+ ```bash
432
+ curl "https://sonarcloud.io/api/project_badges/quality_gate?project=my-project"
433
+ ```
434
+
435
+ ---
436
+
437
+ ## Pagination Example
438
+
439
+ ```bash
440
+ PAGE=1
441
+ while true; do
442
+ R=$(curl -s -H "Authorization: Bearer $TOKEN" \
443
+ "https://sonarcloud.io/api/issues/search?organization=$ORG&componentKeys=$PROJECT&p=$PAGE&ps=500")
444
+ echo $R | jq '.issues[]'
445
+ [ $((PAGE * 500)) -ge $(echo $R | jq '.total') ] && break
446
+ PAGE=$((PAGE + 1))
447
+ done
448
+ ```
449
+
450
+ ---
451
+
452
+ ## Error Codes
453
+
454
+ | Code | Meaning | Fix |
455
+ | ---- | ------- | --- |
456
+ | 401 | Invalid token | Check `SONARCLOUD_TOKEN` |
457
+ | 403 | No permission | Verify project access |
458
+ | 404 | Not found | Check project/org key |
459
+ | 400 | Bad request | Check parameter values |
460
+
461
+ ---
462
+
463
+ ## References
464
+
465
+ - [SonarCloud Web API](https://sonarcloud.io/web_api)
466
+ - [SonarCloud Docs](https://docs.sonarsource.com/sonarcloud/)
package/README.md ADDED
@@ -0,0 +1,205 @@
1
+ # Forge
2
+
3
+ A 9-stage TDD-first workflow for Claude Code. Ship features with confidence using test-driven development, research-first planning, and comprehensive documentation.
4
+
5
+ ```
6
+ /status → /research → /plan → /dev → /check → /ship → /review → /merge → /verify
7
+ ```
8
+
9
+ ## Installation
10
+
11
+ ### Option 1: npm (Recommended)
12
+
13
+ ```bash
14
+ npm install forge-workflow
15
+ ```
16
+
17
+ ### Option 2: bun
18
+
19
+ ```bash
20
+ bun add forge-workflow
21
+ ```
22
+
23
+ ### Option 3: curl (No package manager)
24
+
25
+ ```bash
26
+ curl -fsSL https://raw.githubusercontent.com/harshanandak/forge/main/install.sh | bash
27
+ ```
28
+
29
+ ### Option 4: GitHub Template (New projects)
30
+
31
+ 1. Click "Use this template" on GitHub
32
+ 2. Clone your new repo
33
+ 3. Start with `/status`
34
+
35
+ ## The 9 Stages
36
+
37
+ | Stage | Command | What It Does |
38
+ |-------|---------|--------------|
39
+ | 1 | `/status` | Check current context, active work, recent completions |
40
+ | 2 | `/research` | Deep research with web search, document findings |
41
+ | 3 | `/plan` | Create implementation plan, branch, tracking |
42
+ | 4 | `/dev` | TDD development (RED-GREEN-REFACTOR cycles) |
43
+ | 5 | `/check` | Validation (type/lint/security/tests) |
44
+ | 6 | `/ship` | Create PR with full documentation |
45
+ | 7 | `/review` | Address ALL PR feedback |
46
+ | 8 | `/merge` | Update docs, merge, cleanup |
47
+ | 9 | `/verify` | Final documentation verification |
48
+
49
+ ## Quick Start
50
+
51
+ ```bash
52
+ # 1. Check what's happening
53
+ /status
54
+
55
+ # 2. Research your feature
56
+ /research user-authentication
57
+
58
+ # 3. Plan the implementation
59
+ /plan user-authentication
60
+
61
+ # 4. Develop with TDD
62
+ /dev
63
+
64
+ # 5. Validate everything
65
+ /check
66
+
67
+ # 6. Ship it
68
+ /ship
69
+ ```
70
+
71
+ ## Core Principles
72
+
73
+ ### TDD-First
74
+ - Write tests BEFORE implementation
75
+ - RED: Write failing test
76
+ - GREEN: Make it pass
77
+ - REFACTOR: Clean up
78
+ - Commit after each GREEN cycle
79
+
80
+ ### Research-First
81
+ - Understand before building
82
+ - Document decisions with evidence
83
+ - Use web research for best practices
84
+ - Create `docs/research/<feature>.md`
85
+
86
+ ### Security Built-In
87
+ - OWASP Top 10 analysis for every feature
88
+ - Security tests as part of TDD
89
+ - Automated scans + manual review
90
+
91
+ ### Documentation Progressive
92
+ - Update docs at each relevant stage
93
+ - Verify completeness with `/verify`
94
+ - Never accumulate doc debt
95
+
96
+ ## Directory Structure
97
+
98
+ After installation:
99
+
100
+ ```
101
+ your-project/
102
+ ├── .claude/
103
+ │ ├── commands/ # 9 workflow commands
104
+ │ │ ├── status.md
105
+ │ │ ├── research.md
106
+ │ │ ├── plan.md
107
+ │ │ ├── dev.md
108
+ │ │ ├── check.md
109
+ │ │ ├── ship.md
110
+ │ │ ├── review.md
111
+ │ │ ├── merge.md
112
+ │ │ └── verify.md
113
+ │ ├── rules/
114
+ │ │ └── workflow.md # Workflow rules
115
+ │ ├── skills/
116
+ │ │ ├── parallel-ai/ # Web research skill
117
+ │ │ └── sonarcloud/ # Code quality skill
118
+ │ └── scripts/
119
+ │ └── load-env.sh
120
+ └── docs/
121
+ ├── research/
122
+ │ └── TEMPLATE.md # Research doc template
123
+ └── WORKFLOW.md # Complete guide
124
+ ```
125
+
126
+ ## Configuration
127
+
128
+ Customize commands for your tech stack in your project's `CLAUDE.md`:
129
+
130
+ ```markdown
131
+ ## Build Commands
132
+ - Type check: `npm run typecheck`
133
+ - Lint: `npm run lint`
134
+ - Test: `npm run test`
135
+ - Security: `npm audit`
136
+ ```
137
+
138
+ ## Optional: Beads Issue Tracking
139
+
140
+ Forge integrates with [Beads](https://github.com/beads-ai/beads-cli) for persistent issue tracking across sessions:
141
+
142
+ ```bash
143
+ # Install Beads (optional)
144
+ npm install -g beads-cli
145
+
146
+ # Initialize in your project
147
+ bd init
148
+
149
+ # Create issues
150
+ bd create "Add user authentication"
151
+
152
+ # Track progress
153
+ bd update <id> --status in_progress
154
+ bd close <id>
155
+ ```
156
+
157
+ ## Workflow Visualization
158
+
159
+ ```
160
+ ┌─────────┐
161
+ │ /status │ → Check current stage & context
162
+ └────┬────┘
163
+
164
+ ┌────▼──────┐
165
+ │ /research │ → Deep research, save to docs/research/
166
+ └────┬──────┘
167
+
168
+ ┌────▼────┐
169
+ │ /plan │ → Create plan, branch, tracking
170
+ └────┬────┘
171
+
172
+ ┌────▼───┐
173
+ │ /dev │ → TDD implementation (RED-GREEN-REFACTOR)
174
+ └────┬───┘
175
+
176
+ ┌────▼────┐
177
+ │ /check │ → Validation (type/lint/tests/security)
178
+ └────┬────┘
179
+
180
+ ┌────▼────┐
181
+ │ /ship │ → Create PR with full documentation
182
+ └────┬────┘
183
+
184
+ ┌────▼─────┐
185
+ │ /review │ → Address ALL PR issues
186
+ └────┬─────┘
187
+
188
+ ┌────▼─────┐
189
+ │ /merge │ → Update docs, merge PR, cleanup
190
+ └────┬─────┘
191
+
192
+ ┌────▼──────┐
193
+ │ /verify │ → Final documentation check
194
+ └───────────┘
195
+
196
+ ✓ Complete
197
+ ```
198
+
199
+ ## License
200
+
201
+ MIT
202
+
203
+ ## Contributing
204
+
205
+ Contributions welcome! Please read the workflow guide at `docs/WORKFLOW.md` before submitting PRs.