@jahanxu/trellis 0.5.6 → 0.5.8
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/dist/templates/claude/commands/trellis/update-spec.md +24 -3
- package/dist/templates/trellis/index.d.ts +6 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +18 -1
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/spec/roles/designer/changelog-template.md +31 -0
- package/dist/templates/trellis/spec/roles/designer/prototype-guidelines.md +65 -0
- package/dist/templates/trellis/spec/roles/frontend-impl/api-integration.md +74 -0
- package/dist/templates/trellis/spec/roles/frontend-impl/changelog-template.md +32 -0
- package/dist/templates/trellis/spec/roles/pm/changelog-template.md +31 -0
- package/dist/templates/trellis/spec/roles/pm/prd-template.md +58 -0
- package/package.json +1 -1
|
@@ -47,6 +47,7 @@ For triggered tasks, include all sections below:
|
|
|
47
47
|
| **Hit a gotcha** | Learned that X must be done before Y | Relevant code-spec + "Common Mistakes" section |
|
|
48
48
|
| **Established a convention** | Team agreed on naming pattern | `quality-guidelines.md` |
|
|
49
49
|
| **New thinking trigger** | "Don't forget to check X before doing Y" | `guides/*.md` (as a checklist item, not detailed rules) |
|
|
50
|
+
| **Role workflow insight** | Better PRD structure, prototype checklist | `roles/{your-role}/*.md` |
|
|
50
51
|
|
|
51
52
|
**Key Insight**: Code-spec updates are NOT just for problems. Every feature implementation contains design decisions and contracts that future AI/developers need to execute safely.
|
|
52
53
|
|
|
@@ -62,11 +63,31 @@ For triggered tasks, include all sections below:
|
|
|
62
63
|
├── frontend/ # Frontend coding standards
|
|
63
64
|
│ ├── index.md # Overview and links
|
|
64
65
|
│ └── *.md # Topic-specific guidelines
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
├── guides/ # Thinking checklists (NOT coding specs!)
|
|
67
|
+
│ ├── index.md # Guide index
|
|
68
|
+
│ └── *.md # Topic-specific guides
|
|
69
|
+
└── roles/ # Role-specific work standards (collaboration mode)
|
|
70
|
+
├── pm/ # PM: PRD standards, changelog conventions
|
|
71
|
+
├── designer/ # Designer: prototype standards, mock data conventions
|
|
72
|
+
└── frontend-impl/ # Frontend: API integration standards, code quality
|
|
68
73
|
```
|
|
69
74
|
|
|
75
|
+
### Role-Aware Updates (Collaboration Mode)
|
|
76
|
+
|
|
77
|
+
If the project uses three-role collaboration (`.trellis/roles.json` exists):
|
|
78
|
+
|
|
79
|
+
1. **Check your role** by reading `.trellis/.developer` and `.trellis/roles.json`
|
|
80
|
+
2. **Update your role spec** in `roles/{your-role}/` for role-specific learnings
|
|
81
|
+
3. **Update tech stack specs** in `backend/` or `frontend/` for reusable patterns
|
|
82
|
+
|
|
83
|
+
| Your Role | Your Role Spec Dir | Also Update |
|
|
84
|
+
|-----------|-------------------|-------------|
|
|
85
|
+
| pm | `roles/pm/` | (rarely needs tech specs) |
|
|
86
|
+
| designer | `roles/designer/` | `frontend/component-guidelines.md` |
|
|
87
|
+
| frontend | `roles/frontend-impl/` | `frontend/`, `backend/` as relevant |
|
|
88
|
+
|
|
89
|
+
**Decision Rule**: "Is this specific to my role's workflow?" → `roles/{role}/`. "Is this a tech pattern any developer would use?" → `backend/` or `frontend/`.
|
|
90
|
+
|
|
70
91
|
### CRITICAL: Code-Spec vs Guide - Know the Difference
|
|
71
92
|
|
|
72
93
|
| Type | Location | Purpose | Content Style |
|
|
@@ -41,8 +41,14 @@ export declare const getContextScript: string;
|
|
|
41
41
|
export declare const addSessionScript: string;
|
|
42
42
|
export declare const createBootstrapScript: string;
|
|
43
43
|
export declare const specRolesPm: string;
|
|
44
|
+
export declare const specRolesPmPrdTemplate: string;
|
|
45
|
+
export declare const specRolesPmChangelogTemplate: string;
|
|
44
46
|
export declare const specRolesDesigner: string;
|
|
47
|
+
export declare const specRolesDesignerPrototypeGuidelines: string;
|
|
48
|
+
export declare const specRolesDesignerChangelogTemplate: string;
|
|
45
49
|
export declare const specRolesFrontendImpl: string;
|
|
50
|
+
export declare const specRolesFrontendImplApiIntegration: string;
|
|
51
|
+
export declare const specRolesFrontendImplChangelogTemplate: string;
|
|
46
52
|
export declare const workflowMdTemplate: string;
|
|
47
53
|
export declare const worktreeYamlTemplate: string;
|
|
48
54
|
export declare const gitignoreTemplate: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,cAAc,QAA6C,CAAC;AACzE,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,cAAc,QAA6C,CAAC;AACzE,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,WAAW,QAA0C,CAAC;AAGnE,eAAO,MAAM,cAAc,QAAkD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,eAAO,MAAM,cAAc,QAA8C,CAAC;AAG1E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AAGF,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAC9E,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,oBAAoB,QAAgC,CAAC;AAClE,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoCnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,cAAc,QAA6C,CAAC;AACzE,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,cAAc,QAA6C,CAAC;AACzE,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,WAAW,QAA0C,CAAC;AAGnE,eAAO,MAAM,cAAc,QAAkD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,eAAO,MAAM,cAAc,QAA8C,CAAC;AAG1E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AAGF,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,sBAAsB,QAElC,CAAC;AACF,eAAO,MAAM,4BAA4B,QAExC,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAC9E,eAAO,MAAM,oCAAoC,QAEhD,CAAC;AACF,eAAO,MAAM,kCAAkC,QAE9C,CAAC;AAGF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mCAAmC,QAE/C,CAAC;AACF,eAAO,MAAM,sCAAsC,QAElD,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,oBAAoB,QAAgC,CAAC;AAClE,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoCnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA+BrD"}
|
|
@@ -52,10 +52,18 @@ export const taskScript = readTemplate("scripts/task.py");
|
|
|
52
52
|
export const getContextScript = readTemplate("scripts/get_context.py");
|
|
53
53
|
export const addSessionScript = readTemplate("scripts/add_session.py");
|
|
54
54
|
export const createBootstrapScript = readTemplate("scripts/create_bootstrap.py");
|
|
55
|
-
// Role spec templates
|
|
55
|
+
// Role spec templates - PM
|
|
56
56
|
export const specRolesPm = readTemplate("spec/roles/pm/index.md");
|
|
57
|
+
export const specRolesPmPrdTemplate = readTemplate("spec/roles/pm/prd-template.md");
|
|
58
|
+
export const specRolesPmChangelogTemplate = readTemplate("spec/roles/pm/changelog-template.md");
|
|
59
|
+
// Role spec templates - Designer
|
|
57
60
|
export const specRolesDesigner = readTemplate("spec/roles/designer/index.md");
|
|
61
|
+
export const specRolesDesignerPrototypeGuidelines = readTemplate("spec/roles/designer/prototype-guidelines.md");
|
|
62
|
+
export const specRolesDesignerChangelogTemplate = readTemplate("spec/roles/designer/changelog-template.md");
|
|
63
|
+
// Role spec templates - Frontend
|
|
58
64
|
export const specRolesFrontendImpl = readTemplate("spec/roles/frontend-impl/index.md");
|
|
65
|
+
export const specRolesFrontendImplApiIntegration = readTemplate("spec/roles/frontend-impl/api-integration.md");
|
|
66
|
+
export const specRolesFrontendImplChangelogTemplate = readTemplate("spec/roles/frontend-impl/changelog-template.md");
|
|
59
67
|
// Configuration files
|
|
60
68
|
export const workflowMdTemplate = readTemplate("workflow.md");
|
|
61
69
|
export const worktreeYamlTemplate = readTemplate("worktree.yaml");
|
|
@@ -101,9 +109,18 @@ export function getAllScripts() {
|
|
|
101
109
|
*/
|
|
102
110
|
export function getAllRoleSpecs() {
|
|
103
111
|
const specs = new Map();
|
|
112
|
+
// PM
|
|
104
113
|
specs.set("pm/index.md", specRolesPm);
|
|
114
|
+
specs.set("pm/prd-template.md", specRolesPmPrdTemplate);
|
|
115
|
+
specs.set("pm/changelog-template.md", specRolesPmChangelogTemplate);
|
|
116
|
+
// Designer
|
|
105
117
|
specs.set("designer/index.md", specRolesDesigner);
|
|
118
|
+
specs.set("designer/prototype-guidelines.md", specRolesDesignerPrototypeGuidelines);
|
|
119
|
+
specs.set("designer/changelog-template.md", specRolesDesignerChangelogTemplate);
|
|
120
|
+
// Frontend
|
|
106
121
|
specs.set("frontend-impl/index.md", specRolesFrontendImpl);
|
|
122
|
+
specs.set("frontend-impl/api-integration.md", specRolesFrontendImplApiIntegration);
|
|
123
|
+
specs.set("frontend-impl/changelog-template.md", specRolesFrontendImplChangelogTemplate);
|
|
107
124
|
return specs;
|
|
108
125
|
}
|
|
109
126
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAE/D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AAEnE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAC5C,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAE1E,wBAAwB;AACxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAC/C,6BAA6B,CAC9B,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CHANGELOG Convention (Designer)
|
|
2
|
+
|
|
3
|
+
> Guidelines for maintaining the prototype CHANGELOG.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Format
|
|
8
|
+
|
|
9
|
+
Each `/trellis:handoff` appends one row to the CHANGELOG table:
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
| Date | Author | Type | Summary | Files |
|
|
13
|
+
|------|--------|------|---------|-------|
|
|
14
|
+
| YYYY-MM-DD HH:mm | developer-name | Type | One sentence (max 80 chars) | key files |
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Type Classification
|
|
18
|
+
|
|
19
|
+
| Type | When to Use |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| New | New component or page prototype created |
|
|
22
|
+
| Update | Existing component modified (layout, interaction, mock data) |
|
|
23
|
+
| Delete | Component removed |
|
|
24
|
+
| Refactor | Component restructured without changing UI behavior |
|
|
25
|
+
|
|
26
|
+
## Best Practices
|
|
27
|
+
|
|
28
|
+
- Keep summaries under 80 characters
|
|
29
|
+
- Reference component names changed (e.g., "Updated LoginForm validation UX")
|
|
30
|
+
- Note mock data changes that affect Frontend replacement work
|
|
31
|
+
- Flag any deviations from the PRD with brief rationale
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Prototype Guidelines
|
|
2
|
+
|
|
3
|
+
> Standards for creating interactive prototypes with mock data.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Prototype Standards
|
|
8
|
+
|
|
9
|
+
### Must Be Runnable
|
|
10
|
+
|
|
11
|
+
Prototypes are NOT static mockups. They must:
|
|
12
|
+
- Render without errors in the browser
|
|
13
|
+
- Include all user interactions (click, input, navigation)
|
|
14
|
+
- Use inline mock data that simulates real API responses
|
|
15
|
+
|
|
16
|
+
### Mock Data Convention
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
// CORRECT: Inline mock with clear TODO marker
|
|
20
|
+
const mockUser = {
|
|
21
|
+
id: "1",
|
|
22
|
+
email: "test@example.com",
|
|
23
|
+
name: "Test User",
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const handleLogin = async () => {
|
|
27
|
+
// TODO: replace with real API call
|
|
28
|
+
await new Promise((r) => setTimeout(r, 800));
|
|
29
|
+
setUser(mockUser);
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// WRONG: Separate mock service (makes it harder for Frontend to find and replace)
|
|
35
|
+
import { mockLoginService } from "../mocks/auth";
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Rules**:
|
|
39
|
+
- All mock data inline in the component file
|
|
40
|
+
- Every mock marked with `// TODO: replace with real API`
|
|
41
|
+
- Use realistic but clearly fake data
|
|
42
|
+
|
|
43
|
+
### Component Structure
|
|
44
|
+
|
|
45
|
+
- One component per file
|
|
46
|
+
- Props interface defined for every component
|
|
47
|
+
- Clear parent-child hierarchy
|
|
48
|
+
- Responsive layout using the project's design system
|
|
49
|
+
|
|
50
|
+
### File Naming
|
|
51
|
+
|
|
52
|
+
- Components: `PascalCase.tsx` (e.g., `LoginForm.tsx`)
|
|
53
|
+
- Hooks: `use{Name}.ts` (e.g., `useFormValidation.ts`)
|
|
54
|
+
- Utilities: `camelCase.ts` (e.g., `formatDate.ts`)
|
|
55
|
+
|
|
56
|
+
## Handoff Checklist
|
|
57
|
+
|
|
58
|
+
Before running `/trellis:handoff`, verify:
|
|
59
|
+
|
|
60
|
+
- [ ] All components render without console errors
|
|
61
|
+
- [ ] Mock data locations documented with file:line references
|
|
62
|
+
- [ ] Component hierarchy described
|
|
63
|
+
- [ ] "Needs frontend implementation" items listed
|
|
64
|
+
- [ ] Responsive behavior verified at common breakpoints
|
|
65
|
+
- [ ] Accessibility basics: labels, alt text, keyboard navigation
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# API Integration Guidelines
|
|
2
|
+
|
|
3
|
+
> Standards for replacing mock data with real API calls.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Mock Replacement Process
|
|
8
|
+
|
|
9
|
+
### Step 1: Find All Mocks
|
|
10
|
+
|
|
11
|
+
Search for TODO markers left by the Designer:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
grep -rn "TODO: replace with real API" deliverables/prototypes/
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Step 2: Replace Pattern
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
// BEFORE (Designer's mock)
|
|
21
|
+
const handleLogin = async () => {
|
|
22
|
+
// TODO: replace with real API call
|
|
23
|
+
await new Promise((r) => setTimeout(r, 800));
|
|
24
|
+
setUser(mockUser);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// AFTER (Frontend implementation)
|
|
28
|
+
const handleLogin = async () => {
|
|
29
|
+
try {
|
|
30
|
+
setLoading(true);
|
|
31
|
+
const user = await authApi.login({ email, password });
|
|
32
|
+
setUser(user);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
setError(getErrorMessage(error));
|
|
35
|
+
} finally {
|
|
36
|
+
setLoading(false);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 3: Required States
|
|
42
|
+
|
|
43
|
+
Every API call must handle:
|
|
44
|
+
|
|
45
|
+
| State | Implementation |
|
|
46
|
+
|-------|---------------|
|
|
47
|
+
| Loading | Show spinner or skeleton |
|
|
48
|
+
| Success | Render data |
|
|
49
|
+
| Error | Show error message with retry option |
|
|
50
|
+
| Empty | Show empty state message |
|
|
51
|
+
|
|
52
|
+
## Error Handling
|
|
53
|
+
|
|
54
|
+
- Use the project's standard error handling pattern
|
|
55
|
+
- Map API error codes to user-friendly messages
|
|
56
|
+
- Log errors for debugging but don't expose internals to users
|
|
57
|
+
- Implement retry for transient failures (network errors, 5xx)
|
|
58
|
+
|
|
59
|
+
## Testing Requirements
|
|
60
|
+
|
|
61
|
+
- Unit tests for business logic (state management, data transforms)
|
|
62
|
+
- Integration tests for API call flows
|
|
63
|
+
- Mock API responses in tests (don't hit real endpoints)
|
|
64
|
+
|
|
65
|
+
## Handoff Checklist
|
|
66
|
+
|
|
67
|
+
Before running `/trellis:handoff`, verify:
|
|
68
|
+
|
|
69
|
+
- [ ] All `// TODO: replace with real API` markers resolved
|
|
70
|
+
- [ ] Every API call has loading, error, and empty states
|
|
71
|
+
- [ ] Error messages are user-friendly
|
|
72
|
+
- [ ] TypeScript compiles without errors
|
|
73
|
+
- [ ] Lint and format checks pass
|
|
74
|
+
- [ ] Core logic has unit tests
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# CHANGELOG Convention (Frontend)
|
|
2
|
+
|
|
3
|
+
> Guidelines for maintaining the production code CHANGELOG.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Format
|
|
8
|
+
|
|
9
|
+
Each `/trellis:handoff` appends one row to the CHANGELOG table:
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
| Date | Author | Type | Summary | Files |
|
|
13
|
+
|------|--------|------|---------|-------|
|
|
14
|
+
| YYYY-MM-DD HH:mm | developer-name | Type | One sentence (max 80 chars) | key files |
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Type Classification
|
|
18
|
+
|
|
19
|
+
| Type | When to Use |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| New | New feature implementation (API integration, business logic) |
|
|
22
|
+
| Update | Existing implementation modified |
|
|
23
|
+
| Delete | Feature or code removed |
|
|
24
|
+
| Refactor | Code restructured without changing behavior |
|
|
25
|
+
|
|
26
|
+
## Best Practices
|
|
27
|
+
|
|
28
|
+
- Keep summaries under 80 characters
|
|
29
|
+
- Reference API endpoints integrated (e.g., "Integrated POST /api/auth/login")
|
|
30
|
+
- Note any deviations from the prototype with rationale
|
|
31
|
+
- List remaining technical debt or known issues
|
|
32
|
+
- Include test coverage summary when relevant
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CHANGELOG Convention (PM)
|
|
2
|
+
|
|
3
|
+
> Guidelines for maintaining the requirements CHANGELOG.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Format
|
|
8
|
+
|
|
9
|
+
Each `/trellis:handoff` appends one row to the CHANGELOG table:
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
| Date | Author | Type | Summary | Files |
|
|
13
|
+
|------|--------|------|---------|-------|
|
|
14
|
+
| YYYY-MM-DD HH:mm | developer-name | Type | One sentence (max 80 chars) | key files |
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Type Classification
|
|
18
|
+
|
|
19
|
+
| Type | When to Use |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| New | New PRD or user story document created |
|
|
22
|
+
| Update | Existing requirement modified (scope change, clarification) |
|
|
23
|
+
| Delete | Requirement removed or deprecated |
|
|
24
|
+
| Refactor | Document restructured without changing requirements |
|
|
25
|
+
|
|
26
|
+
## Best Practices
|
|
27
|
+
|
|
28
|
+
- Keep summaries under 80 characters
|
|
29
|
+
- Reference specific sections changed (e.g., "Updated US-03 acceptance criteria")
|
|
30
|
+
- Note if the change affects downstream roles (Designer/Frontend)
|
|
31
|
+
- Include the reason for changes when non-obvious
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# PRD Template
|
|
2
|
+
|
|
3
|
+
> Standard template for Product Requirements Documents.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## {Feature Name}
|
|
8
|
+
|
|
9
|
+
### Goal
|
|
10
|
+
|
|
11
|
+
What problem are we solving? Why now?
|
|
12
|
+
|
|
13
|
+
### User Stories
|
|
14
|
+
|
|
15
|
+
| ID | As a... | I want to... | So that... |
|
|
16
|
+
|----|---------|-------------|------------|
|
|
17
|
+
| US-01 | | | |
|
|
18
|
+
| US-02 | | | |
|
|
19
|
+
|
|
20
|
+
### Functional Requirements
|
|
21
|
+
|
|
22
|
+
1. **FR-01**: (Description)
|
|
23
|
+
- Input: ...
|
|
24
|
+
- Output: ...
|
|
25
|
+
- Constraints: ...
|
|
26
|
+
|
|
27
|
+
### Non-Functional Requirements
|
|
28
|
+
|
|
29
|
+
- Performance: ...
|
|
30
|
+
- Accessibility: ...
|
|
31
|
+
- Browser support: ...
|
|
32
|
+
|
|
33
|
+
### Edge Cases & Error Scenarios
|
|
34
|
+
|
|
35
|
+
| Scenario | Expected Behavior |
|
|
36
|
+
|----------|-------------------|
|
|
37
|
+
| | |
|
|
38
|
+
|
|
39
|
+
### Acceptance Criteria
|
|
40
|
+
|
|
41
|
+
- [ ] (Criterion 1 — must be testable)
|
|
42
|
+
- [ ] (Criterion 2)
|
|
43
|
+
|
|
44
|
+
### Dependencies
|
|
45
|
+
|
|
46
|
+
- **Designer**: (What the designer needs to know)
|
|
47
|
+
- **Frontend**: (What the frontend developer needs to know)
|
|
48
|
+
- **External**: (APIs, services, third-party dependencies)
|
|
49
|
+
|
|
50
|
+
### Open Questions
|
|
51
|
+
|
|
52
|
+
- [ ] (Any unresolved questions)
|
|
53
|
+
|
|
54
|
+
### References
|
|
55
|
+
|
|
56
|
+
- Figma: (link)
|
|
57
|
+
- API docs: (link)
|
|
58
|
+
- Related PRDs: (link)
|
package/package.json
CHANGED