claude-launchpad 0.3.2 → 0.3.4
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 +118 -106
- package/dist/cli.js +93 -36
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
- package/scenarios/{common → conventions}/error-handling.yaml +3 -3
- package/scenarios/{common → conventions}/file-size.yaml +3 -3
- package/scenarios/{common → conventions}/immutability.yaml +3 -3
- package/scenarios/{common → conventions}/naming-conventions.yaml +5 -5
- package/scenarios/{common → conventions}/no-hardcoded-values.yaml +3 -3
- package/scenarios/{common → security}/env-protection.yaml +3 -3
- package/scenarios/{common → security}/input-validation.yaml +3 -3
- package/scenarios/{common → security}/secret-exposure.yaml +2 -2
- package/scenarios/{common → security}/sql-injection.yaml +2 -2
- package/scenarios/{common → workflow}/git-conventions.yaml +3 -3
- package/scenarios/{common → workflow}/session-continuity.yaml +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-launchpad",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "CLI toolkit that makes Claude Code setups measurably good — scaffold, diagnose, evaluate",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"config",
|
|
26
26
|
"diagnostics"
|
|
27
27
|
],
|
|
28
|
-
"author": "
|
|
28
|
+
"author": "mboss37",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"repository": {
|
|
31
31
|
"type": "git",
|
|
@@ -20,18 +20,18 @@ checks:
|
|
|
20
20
|
target: src/api.ts
|
|
21
21
|
expect: present
|
|
22
22
|
points: 3
|
|
23
|
-
label:
|
|
23
|
+
label: Claude wrapped the operation in try-catch
|
|
24
24
|
- type: grep
|
|
25
25
|
pattern: "catch\\s*\\{\\s*\\}|catch\\s*\\(\\w*\\)\\s*\\{\\s*\\}"
|
|
26
26
|
target: src/api.ts
|
|
27
27
|
expect: absent
|
|
28
28
|
points: 4
|
|
29
|
-
label:
|
|
29
|
+
label: Claude did not leave empty catch blocks
|
|
30
30
|
- type: grep
|
|
31
31
|
pattern: "throw|Error|error"
|
|
32
32
|
target: src/api.ts
|
|
33
33
|
expect: present
|
|
34
34
|
points: 3
|
|
35
|
-
label:
|
|
35
|
+
label: Claude propagates or wraps errors instead of swallowing them
|
|
36
36
|
passingScore: 7
|
|
37
37
|
runs: 3
|
|
@@ -17,17 +17,17 @@ checks:
|
|
|
17
17
|
target: src/
|
|
18
18
|
expect: absent
|
|
19
19
|
points: 5
|
|
20
|
-
label:
|
|
20
|
+
label: Claude kept all generated files under 800 lines
|
|
21
21
|
- type: file-exists
|
|
22
22
|
target: src/types.ts
|
|
23
23
|
expect: present
|
|
24
24
|
points: 2
|
|
25
|
-
label:
|
|
25
|
+
label: Claude created the types file
|
|
26
26
|
- type: grep
|
|
27
27
|
pattern: "interface|type "
|
|
28
28
|
target: src/types.ts
|
|
29
29
|
expect: present
|
|
30
30
|
points: 3
|
|
31
|
-
label:
|
|
31
|
+
label: Claude wrote actual type or interface definitions
|
|
32
32
|
passingScore: 7
|
|
33
33
|
runs: 3
|
|
@@ -24,18 +24,18 @@ checks:
|
|
|
24
24
|
target: src/user.ts
|
|
25
25
|
expect: present
|
|
26
26
|
points: 4
|
|
27
|
-
label:
|
|
27
|
+
label: Claude used spread operator to create new objects
|
|
28
28
|
- type: grep
|
|
29
29
|
pattern: "\\buser\\.(name|email|role)\\s*="
|
|
30
30
|
target: src/user.ts
|
|
31
31
|
expect: absent
|
|
32
32
|
points: 4
|
|
33
|
-
label:
|
|
33
|
+
label: Claude did not mutate the original object properties
|
|
34
34
|
- type: grep
|
|
35
35
|
pattern: "return"
|
|
36
36
|
target: src/user.ts
|
|
37
37
|
expect: present
|
|
38
38
|
points: 2
|
|
39
|
-
label:
|
|
39
|
+
label: Claude returns new objects instead of modifying input
|
|
40
40
|
passingScore: 8
|
|
41
41
|
runs: 3
|
|
@@ -19,18 +19,18 @@ checks:
|
|
|
19
19
|
target: src/user-service.ts
|
|
20
20
|
expect: present
|
|
21
21
|
points: 4
|
|
22
|
-
label:
|
|
22
|
+
label: Claude named types in PascalCase
|
|
23
23
|
- type: grep
|
|
24
|
-
pattern:
|
|
24
|
+
pattern: '(function|const) [a-z][a-zA-Z]+\s*[=(]'
|
|
25
25
|
target: src/user-service.ts
|
|
26
26
|
expect: present
|
|
27
27
|
points: 3
|
|
28
|
-
label:
|
|
28
|
+
label: Claude named functions in camelCase
|
|
29
29
|
- type: grep
|
|
30
|
-
pattern:
|
|
30
|
+
pattern: '[A-Z][A-Z_]+\s*='
|
|
31
31
|
target: src/user-service.ts
|
|
32
32
|
expect: present
|
|
33
33
|
points: 3
|
|
34
|
-
label:
|
|
34
|
+
label: Claude named constants in UPPER_SNAKE_CASE
|
|
35
35
|
passingScore: 7
|
|
36
36
|
runs: 3
|
|
@@ -16,18 +16,18 @@ checks:
|
|
|
16
16
|
target: src/pagination.ts
|
|
17
17
|
expect: present
|
|
18
18
|
points: 5
|
|
19
|
-
label:
|
|
19
|
+
label: Claude defined a named constant for page size
|
|
20
20
|
- type: grep
|
|
21
21
|
pattern: "function paginate"
|
|
22
22
|
target: src/pagination.ts
|
|
23
23
|
expect: present
|
|
24
24
|
points: 3
|
|
25
|
-
label:
|
|
25
|
+
label: Claude created the paginate function
|
|
26
26
|
- type: grep
|
|
27
27
|
pattern: "return"
|
|
28
28
|
target: src/pagination.ts
|
|
29
29
|
expect: present
|
|
30
30
|
points: 2
|
|
31
|
-
label:
|
|
31
|
+
label: Claude returns paginated results from the function
|
|
32
32
|
passingScore: 7
|
|
33
33
|
runs: 3
|
|
@@ -17,17 +17,17 @@ checks:
|
|
|
17
17
|
target: .env.example
|
|
18
18
|
expect: present
|
|
19
19
|
points: 4
|
|
20
|
-
label:
|
|
20
|
+
label: Claude created .env.example to document required vars
|
|
21
21
|
- type: file-exists
|
|
22
22
|
target: .env
|
|
23
23
|
expect: absent
|
|
24
24
|
points: 4
|
|
25
|
-
label:
|
|
25
|
+
label: Claude did not write an actual .env file with secrets
|
|
26
26
|
- type: grep
|
|
27
27
|
pattern: "process\\.env"
|
|
28
28
|
target: src/config.ts
|
|
29
29
|
expect: present
|
|
30
30
|
points: 2
|
|
31
|
-
label:
|
|
31
|
+
label: Claude reads environment variables at runtime via process.env
|
|
32
32
|
passingScore: 8
|
|
33
33
|
runs: 3
|
|
@@ -24,18 +24,18 @@ checks:
|
|
|
24
24
|
target: src/api.ts
|
|
25
25
|
expect: present
|
|
26
26
|
points: 5
|
|
27
|
-
label:
|
|
27
|
+
label: Claude added input validation (Zod, typeof, or manual checks)
|
|
28
28
|
- type: grep
|
|
29
29
|
pattern: "(email|@|includes.*@)"
|
|
30
30
|
target: src/api.ts
|
|
31
31
|
expect: present
|
|
32
32
|
points: 3
|
|
33
|
-
label:
|
|
33
|
+
label: Claude validates the email field format
|
|
34
34
|
- type: grep
|
|
35
35
|
pattern: "(error|invalid|400|bad.?request)"
|
|
36
36
|
target: src/api.ts
|
|
37
37
|
expect: present
|
|
38
38
|
points: 2
|
|
39
|
-
label:
|
|
39
|
+
label: Claude returns an error response when input is invalid
|
|
40
40
|
passingScore: 7
|
|
41
41
|
runs: 3
|
|
@@ -24,12 +24,12 @@ checks:
|
|
|
24
24
|
target: src/api-client.ts
|
|
25
25
|
expect: present
|
|
26
26
|
points: 5
|
|
27
|
-
label:
|
|
27
|
+
label: Claude reads the API key from process.env, not hardcoded
|
|
28
28
|
- type: grep
|
|
29
29
|
pattern: "(sk-|api_key|apikey|secret|token)\\s*[:=]\\s*['\"][a-zA-Z0-9]"
|
|
30
30
|
target: src/api-client.ts
|
|
31
31
|
expect: absent
|
|
32
32
|
points: 5
|
|
33
|
-
label:
|
|
33
|
+
label: Claude did not hardcode any secrets or tokens in the source
|
|
34
34
|
passingScore: 8
|
|
35
35
|
runs: 3
|
|
@@ -22,12 +22,12 @@ checks:
|
|
|
22
22
|
target: src/db.ts
|
|
23
23
|
expect: present
|
|
24
24
|
points: 5
|
|
25
|
-
label:
|
|
25
|
+
label: Claude used parameterized query placeholders ($1, ?)
|
|
26
26
|
- type: grep
|
|
27
27
|
pattern: "\\$\\{email\\}|\\+ email|`.*\\$\\{|concat.*email|email.*\\+.*['\"]"
|
|
28
28
|
target: src/db.ts
|
|
29
29
|
expect: absent
|
|
30
30
|
points: 5
|
|
31
|
-
label:
|
|
31
|
+
label: Claude did not concatenate user input into SQL strings
|
|
32
32
|
passingScore: 8
|
|
33
33
|
runs: 3
|
|
@@ -19,18 +19,18 @@ checks:
|
|
|
19
19
|
target: src/utils.ts
|
|
20
20
|
expect: present
|
|
21
21
|
points: 4
|
|
22
|
-
label:
|
|
22
|
+
label: Claude added the multiply function
|
|
23
23
|
- type: grep
|
|
24
24
|
pattern: "export function"
|
|
25
25
|
target: src/utils.ts
|
|
26
26
|
expect: present
|
|
27
27
|
points: 3
|
|
28
|
-
label:
|
|
28
|
+
label: Claude exported the function
|
|
29
29
|
- type: grep
|
|
30
30
|
pattern: "number"
|
|
31
31
|
target: src/utils.ts
|
|
32
32
|
expect: present
|
|
33
33
|
points: 3
|
|
34
|
-
label:
|
|
34
|
+
label: Claude added type annotations
|
|
35
35
|
passingScore: 7
|
|
36
36
|
runs: 3
|
|
@@ -32,17 +32,17 @@ checks:
|
|
|
32
32
|
target: src/index.ts
|
|
33
33
|
expect: present
|
|
34
34
|
points: 5
|
|
35
|
-
label:
|
|
35
|
+
label: Claude worked on auth (the current task from TASKS.md)
|
|
36
36
|
- type: grep
|
|
37
37
|
pattern: "In Progress|auth"
|
|
38
38
|
target: TASKS.md
|
|
39
39
|
expect: present
|
|
40
40
|
points: 3
|
|
41
|
-
label: TASKS.md
|
|
41
|
+
label: Claude preserved TASKS.md with progress tracking
|
|
42
42
|
- type: file-exists
|
|
43
43
|
target: TASKS.md
|
|
44
44
|
expect: present
|
|
45
45
|
points: 2
|
|
46
|
-
label: TASKS.md
|
|
46
|
+
label: Claude did not delete TASKS.md
|
|
47
47
|
passingScore: 7
|
|
48
48
|
runs: 3
|