agentic-loop 3.7.1 → 3.7.3

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.
@@ -197,6 +197,8 @@ Ralph will work through each story, running tests and committing as it goes."
197
197
 
198
198
  ## Complete PRD JSON Schema
199
199
 
200
+ **Full working example:** See `templates/prd-example.json` for a complete, valid PRD.
201
+
200
202
  ```json
201
203
  {
202
204
  "feature": {
@@ -22,7 +22,7 @@
22
22
  # Security checks (blocking - these will fail the commit)
23
23
  - id: check-env-files
24
24
  name: Block .env files from commit
25
- entry: bash -c 'echo "ERROR: .env files should not be committed. Add to .gitignore." && exit 1'
25
+ entry: "bash -c 'echo ERROR: .env files should not be committed && exit 1'"
26
26
  language: system
27
27
  files: '\.env($|\.)'
28
28
  pass_filenames: false
package/README.md CHANGED
@@ -71,7 +71,7 @@ npx agentic-loop run # Execute PRDs autonomously
71
71
  ```
72
72
 
73
73
  **What's a PRD?**
74
- A JSON file (`.ralph/prd.json`) containing your feature broken into small stories. Each story has acceptance criteria, test steps, and a test URL. Ralph implements them one by one.
74
+ A JSON file (`.ralph/prd.json`) containing your feature broken into small stories. Each story has acceptance criteria, test steps, and a test URL. Ralph implements them one by one. See [`templates/prd-example.json`](templates/prd-example.json) for a complete example.
75
75
 
76
76
  **What are Signs?**
77
77
  Patterns Ralph learns from failures. If Ralph keeps making the same mistake, add a sign: `npx agentic-loop sign "Always use camelCase for API fields" backend`. Future stories will see this guidance.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-loop",
3
- "version": "3.7.1",
3
+ "version": "3.7.3",
4
4
  "description": "Autonomous AI coding loop - PRD-driven development with Claude Code",
5
5
  "author": "Allie Jones <allie@allthrive.ai>",
6
6
  "license": "MIT",
@@ -0,0 +1,134 @@
1
+ {
2
+ "feature": {
3
+ "name": "User Authentication",
4
+ "ideaFile": "docs/ideas/auth.md",
5
+ "branch": "feature/auth",
6
+ "status": "pending"
7
+ },
8
+
9
+ "originalContext": "docs/ideas/auth.md",
10
+
11
+ "techStack": {
12
+ "frontend": "React",
13
+ "backend": "Node.js",
14
+ "database": "PostgreSQL"
15
+ },
16
+
17
+ "testing": {
18
+ "approach": "TDD",
19
+ "unit": {
20
+ "frontend": "vitest",
21
+ "backend": "jest"
22
+ },
23
+ "integration": "playwright",
24
+ "e2e": "playwright"
25
+ },
26
+
27
+ "globalConstraints": [
28
+ "All API calls must have error handling",
29
+ "Use existing UI components from src/components/ui"
30
+ ],
31
+
32
+ "metadata": {
33
+ "createdAt": "2026-01-27T10:00:00Z",
34
+ "estimatedStories": 2,
35
+ "complexity": "medium"
36
+ },
37
+
38
+ "stories": [
39
+ {
40
+ "id": "TASK-001",
41
+ "type": "backend",
42
+ "title": "Create user registration endpoint",
43
+ "priority": 1,
44
+ "passes": false,
45
+
46
+ "files": {
47
+ "create": ["src/api/users.ts", "src/api/users.test.ts"],
48
+ "modify": ["src/api/index.ts"],
49
+ "reuse": ["src/db/client.ts"]
50
+ },
51
+
52
+ "acceptanceCriteria": [
53
+ "POST /api/users creates a new user with email and password",
54
+ "Returns 201 with user id and email (no password in response)",
55
+ "Returns 400 if email already exists"
56
+ ],
57
+
58
+ "errorHandling": [
59
+ "Duplicate email returns {error: 'Email already registered'}",
60
+ "Invalid email returns {error: 'Invalid email format'}"
61
+ ],
62
+
63
+ "testing": {
64
+ "types": ["unit", "integration"],
65
+ "approach": "TDD",
66
+ "files": {
67
+ "unit": ["src/api/users.test.ts"]
68
+ }
69
+ },
70
+
71
+ "testSteps": [
72
+ "curl -s -X POST {config.urls.backend}/api/users -H 'Content-Type: application/json' -d '{\"email\":\"test@example.com\",\"password\":\"secret123\"}' | jq -e '.id and .email'",
73
+ "curl -s -X POST {config.urls.backend}/api/users -H 'Content-Type: application/json' -d '{\"email\":\"test@example.com\",\"password\":\"secret123\"}' | jq -e '.error'",
74
+ "npm test -- --testPathPattern=users"
75
+ ],
76
+
77
+ "apiContract": {
78
+ "endpoint": "POST /api/users",
79
+ "request": {"email": "string", "password": "string"},
80
+ "response": {"id": "string", "email": "string"}
81
+ },
82
+
83
+ "notes": "Hash passwords with bcrypt before storing.",
84
+ "dependsOn": []
85
+ },
86
+ {
87
+ "id": "TASK-002",
88
+ "type": "frontend",
89
+ "title": "Create registration form",
90
+ "priority": 2,
91
+ "passes": false,
92
+
93
+ "files": {
94
+ "create": ["src/components/RegisterForm.tsx", "src/components/RegisterForm.test.tsx"],
95
+ "modify": ["src/pages/index.tsx"],
96
+ "reuse": ["src/components/ui/Button.tsx", "src/components/ui/Input.tsx"]
97
+ },
98
+
99
+ "acceptanceCriteria": [
100
+ "Form has email and password fields",
101
+ "Submit button calls POST /api/users",
102
+ "Shows success message on 201 response",
103
+ "Shows error message on 400 response"
104
+ ],
105
+
106
+ "errorHandling": [
107
+ "Network error shows 'Unable to connect' message",
108
+ "Validation errors display inline"
109
+ ],
110
+
111
+ "testing": {
112
+ "types": ["unit", "e2e"],
113
+ "approach": "TDD",
114
+ "files": {
115
+ "unit": ["src/components/RegisterForm.test.tsx"],
116
+ "e2e": ["tests/e2e/register.spec.ts"]
117
+ }
118
+ },
119
+
120
+ "testSteps": [
121
+ "npx tsc --noEmit",
122
+ "npm test -- --testPathPattern=RegisterForm",
123
+ "npx playwright test tests/e2e/register.spec.ts"
124
+ ],
125
+
126
+ "testUrl": "{config.urls.frontend}/register",
127
+
128
+ "mcp": ["playwright", "devtools"],
129
+
130
+ "notes": "Use existing Button and Input components from ui folder.",
131
+ "dependsOn": ["TASK-001"]
132
+ }
133
+ ]
134
+ }