@jahanxu/trellis 0.5.0 → 0.5.5

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.
Files changed (49) hide show
  1. package/dist/cli/index.js +1 -0
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/init.d.ts +1 -0
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +98 -5
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/configurators/workflow.d.ts.map +1 -1
  8. package/dist/configurators/workflow.js +8 -58
  9. package/dist/configurators/workflow.js.map +1 -1
  10. package/dist/constants/paths.d.ts +0 -17
  11. package/dist/constants/paths.d.ts.map +1 -1
  12. package/dist/constants/paths.js +0 -19
  13. package/dist/constants/paths.js.map +1 -1
  14. package/dist/templates/claude/commands/trellis/handoff.md +56 -122
  15. package/dist/templates/claude/hooks/enforce-output-dir.py +115 -0
  16. package/dist/templates/claude/hooks/session-start.py +87 -166
  17. package/dist/templates/claude/settings.json +10 -0
  18. package/dist/templates/iflow/hooks/session-start.py +0 -171
  19. package/dist/templates/markdown/index.d.ts +0 -9
  20. package/dist/templates/markdown/index.d.ts.map +1 -1
  21. package/dist/templates/markdown/index.js +0 -10
  22. package/dist/templates/markdown/index.js.map +1 -1
  23. package/dist/templates/trellis/index.d.ts +9 -1
  24. package/dist/templates/trellis/index.d.ts.map +1 -1
  25. package/dist/templates/trellis/index.js +17 -2
  26. package/dist/templates/trellis/index.js.map +1 -1
  27. package/dist/templates/trellis/scripts/common/__init__.py +11 -0
  28. package/dist/templates/trellis/scripts/common/paths.py +1 -49
  29. package/dist/templates/trellis/scripts/common/roles.py +252 -0
  30. package/dist/templates/trellis/spec/roles/designer/index.md +49 -0
  31. package/dist/templates/trellis/spec/roles/frontend-impl/index.md +52 -0
  32. package/dist/templates/trellis/spec/roles/pm/index.md +44 -0
  33. package/dist/utils/template-hash.d.ts.map +1 -1
  34. package/dist/utils/template-hash.js +2 -0
  35. package/dist/utils/template-hash.js.map +1 -1
  36. package/package.json +2 -2
  37. package/dist/templates/claude/commands/trellis/pick-task.md +0 -145
  38. package/dist/templates/iflow/commands/trellis/handoff.md +0 -148
  39. package/dist/templates/iflow/commands/trellis/pick-task.md +0 -145
  40. package/dist/templates/markdown/spec/roles/designer/index.md.txt +0 -57
  41. package/dist/templates/markdown/spec/roles/designer/mock-data-standards.md.txt +0 -63
  42. package/dist/templates/markdown/spec/roles/designer/prototype-guidelines.md.txt +0 -49
  43. package/dist/templates/markdown/spec/roles/frontend-impl/api-integration.md.txt +0 -63
  44. package/dist/templates/markdown/spec/roles/frontend-impl/index.md.txt +0 -57
  45. package/dist/templates/markdown/spec/roles/frontend-impl/prototype-to-production.md.txt +0 -57
  46. package/dist/templates/markdown/spec/roles/pm/index.md.txt +0 -45
  47. package/dist/templates/markdown/spec/roles/pm/prd-template.md.txt +0 -64
  48. package/dist/templates/markdown/spec/roles/pm/requirement-checklist.md.txt +0 -43
  49. package/dist/templates/trellis/scripts/pool.py +0 -322
@@ -0,0 +1,252 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Role management utilities for three-role collaboration pipeline.
4
+
5
+ Provides:
6
+ parse_role_from_username - Parse role prefix from username
7
+ load_roles_json - Load roles.json
8
+ save_roles_json - Save roles.json
9
+ get_upstream_dirs - Get upstream directories for a role
10
+ upsert_developer_role - Add or update developer role mapping
11
+ resolve_role_constraint - Resolve role and output directory
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ import sys
18
+ from pathlib import Path
19
+
20
+ from .paths import (
21
+ DIR_WORKFLOW,
22
+ FILE_ROLES_JSON,
23
+ FILE_TASK_JSON,
24
+ get_repo_root,
25
+ get_current_task,
26
+ get_developer,
27
+ )
28
+
29
+
30
+ # =============================================================================
31
+ # Constants
32
+ # =============================================================================
33
+
34
+ KNOWN_ROLES = {"pm", "designer", "frontend"}
35
+
36
+
37
+ # =============================================================================
38
+ # JSON Helpers (per-module convention)
39
+ # =============================================================================
40
+
41
+ def _read_json_file(path: Path) -> dict | None:
42
+ """Read and parse a JSON file."""
43
+ try:
44
+ return json.loads(path.read_text(encoding="utf-8"))
45
+ except (FileNotFoundError, json.JSONDecodeError, OSError):
46
+ return None
47
+
48
+
49
+ def _write_json_file(path: Path, data: dict) -> bool:
50
+ """Write dict to JSON file."""
51
+ try:
52
+ path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
53
+ return True
54
+ except (OSError, IOError):
55
+ return False
56
+
57
+
58
+ # =============================================================================
59
+ # Role Parsing
60
+ # =============================================================================
61
+
62
+ def parse_role_from_username(username: str) -> tuple[str | None, str]:
63
+ """Parse role from -u parameter prefix.
64
+
65
+ Splits username on the first hyphen. If the prefix is a known role,
66
+ returns it alongside the full name; otherwise returns None.
67
+
68
+ Args:
69
+ username: Developer username (e.g., "pm-alice", "bob").
70
+
71
+ Returns:
72
+ Tuple of (role, full_name). role is None if no known prefix found.
73
+ """
74
+ if not username:
75
+ return None, username or ""
76
+ parts = username.split("-", 1)
77
+ if len(parts) == 2 and parts[0] in KNOWN_ROLES:
78
+ return parts[0], username
79
+ return None, username
80
+
81
+
82
+ # =============================================================================
83
+ # roles.json I/O
84
+ # =============================================================================
85
+
86
+ def load_roles_json(repo_root: Path | None = None) -> dict | None:
87
+ """Load .trellis/roles.json.
88
+
89
+ Args:
90
+ repo_root: Repository root path. Defaults to auto-detected.
91
+
92
+ Returns:
93
+ Parsed dict or None if file doesn't exist or is invalid.
94
+ """
95
+ if repo_root is None:
96
+ repo_root = get_repo_root()
97
+
98
+ roles_file = repo_root / DIR_WORKFLOW / FILE_ROLES_JSON
99
+ return _read_json_file(roles_file)
100
+
101
+
102
+ def save_roles_json(data: dict, repo_root: Path | None = None) -> bool:
103
+ """Save roles.json.
104
+
105
+ Args:
106
+ data: Dictionary to write.
107
+ repo_root: Repository root path. Defaults to auto-detected.
108
+
109
+ Returns:
110
+ True on success, False on error.
111
+ """
112
+ if repo_root is None:
113
+ repo_root = get_repo_root()
114
+
115
+ roles_file = repo_root / DIR_WORKFLOW / FILE_ROLES_JSON
116
+ return _write_json_file(roles_file, data)
117
+
118
+
119
+ # =============================================================================
120
+ # Upstream Directory Resolution
121
+ # =============================================================================
122
+
123
+ def get_upstream_dirs(role: str, roles_json: dict) -> list[str]:
124
+ """Get upstream directories (all dirs NOT owned by current role).
125
+
126
+ Args:
127
+ role: Current developer's role.
128
+ roles_json: Parsed roles.json dict.
129
+
130
+ Returns:
131
+ List of directory paths owned by other roles.
132
+ """
133
+ directories = roles_json.get("directories", {})
134
+ return [d for d, r in directories.items() if r != role]
135
+
136
+
137
+ # =============================================================================
138
+ # Developer Role Upsert
139
+ # =============================================================================
140
+
141
+ def upsert_developer_role(
142
+ name: str,
143
+ role: str,
144
+ output_dir: str,
145
+ repo_root: Path | None = None,
146
+ ) -> bool:
147
+ """Add or update developer role mapping in roles.json.
148
+
149
+ Creates roles.json if it doesn't exist. Appends to existing if it does.
150
+ Rejects if output_dir is already bound to a DIFFERENT role.
151
+ Overwrites if same developer re-inits (with warning).
152
+
153
+ Args:
154
+ name: Developer name.
155
+ role: Developer role (e.g., "pm", "designer", "frontend").
156
+ output_dir: Output directory path.
157
+ repo_root: Repository root path. Defaults to auto-detected.
158
+
159
+ Returns:
160
+ True on success, False on conflict.
161
+ """
162
+ if repo_root is None:
163
+ repo_root = get_repo_root()
164
+
165
+ data = load_roles_json(repo_root)
166
+ if data is None:
167
+ data = {"developers": {}, "directories": {}}
168
+
169
+ developers = data.get("developers", {})
170
+ directories = data.get("directories", {})
171
+
172
+ # Check conflict: output_dir already bound to a different role
173
+ if output_dir in directories and directories[output_dir] != role:
174
+ existing_role = directories[output_dir]
175
+ print(
176
+ f"Error: directory '{output_dir}' is already bound to role "
177
+ f"'{existing_role}', cannot assign to '{role}'",
178
+ file=sys.stderr,
179
+ )
180
+ return False
181
+
182
+ # Check re-init: same developer name already exists
183
+ if name in developers:
184
+ print(
185
+ f"Warning: developer '{name}' already exists, overwriting",
186
+ file=sys.stderr,
187
+ )
188
+
189
+ # Upsert
190
+ developers[name] = {"role": role, "output_dir": output_dir}
191
+ directories[output_dir] = role
192
+ data["developers"] = developers
193
+ data["directories"] = directories
194
+
195
+ return save_roles_json(data, repo_root)
196
+
197
+
198
+ # =============================================================================
199
+ # Role Constraint Resolution
200
+ # =============================================================================
201
+
202
+ def resolve_role_constraint(
203
+ repo_root: Path | None = None,
204
+ ) -> tuple[str | None, str | None]:
205
+ """Three-layer fallback to resolve role and output directory.
206
+
207
+ L1: .current-task -> task.json.role / output_dir (highest priority)
208
+ L2: .developer name -> roles.json[name] (persistent fallback)
209
+ L3: (None, None) - no constraint
210
+
211
+ Args:
212
+ repo_root: Repository root path. Defaults to auto-detected.
213
+
214
+ Returns:
215
+ Tuple of (role, output_dir). Both None if no constraint found.
216
+ """
217
+ if repo_root is None:
218
+ repo_root = get_repo_root()
219
+
220
+ # L1: current task -> task.json
221
+ current_task = get_current_task(repo_root)
222
+ if current_task:
223
+ task_json = _read_json_file(repo_root / current_task / FILE_TASK_JSON)
224
+ if task_json:
225
+ task_role = task_json.get("role")
226
+ task_output = task_json.get("output_dir")
227
+ if task_role and task_output:
228
+ return task_role, task_output
229
+
230
+ # L2: developer name -> roles.json
231
+ developer = get_developer(repo_root)
232
+ if developer:
233
+ roles_data = load_roles_json(repo_root)
234
+ if roles_data:
235
+ dev_entry = roles_data.get("developers", {}).get(developer)
236
+ if dev_entry:
237
+ return dev_entry.get("role"), dev_entry.get("output_dir")
238
+
239
+ # L3: no constraint
240
+ return None, None
241
+
242
+
243
+ # =============================================================================
244
+ # Main Entry (for testing)
245
+ # =============================================================================
246
+
247
+ if __name__ == "__main__":
248
+ repo = get_repo_root()
249
+ print(f"Repository root: {repo}")
250
+ print(f"Roles JSON: {load_roles_json(repo)}")
251
+ role, output_dir = resolve_role_constraint(repo)
252
+ print(f"Role constraint: role={role}, output_dir={output_dir}")
@@ -0,0 +1,49 @@
1
+ # Designer Role Specification
2
+
3
+ > Work standards and constraints for the Interaction Designer role.
4
+
5
+ ---
6
+
7
+ ## Role Definition
8
+
9
+ - **Role ID**: designer
10
+ - **Primary Output**: Interactive prototypes with mock data
11
+ - **Output Directory**: Bound via `trellis init -d`
12
+
13
+ ## Work Standards
14
+
15
+ ### Prototype Requirements
16
+ - All prototypes must be runnable (not static mockups)
17
+ - Use inline mock data with `// TODO: replace with real API` markers
18
+ - Follow the project's existing component library and design system
19
+
20
+ ### Mock Data Convention
21
+ - Inline mock data in component files (not separate mock files)
22
+ - Mark every mock with: `// TODO: replace with real API`
23
+ - Use realistic but clearly fake data (e.g., "test@example.com")
24
+
25
+ ### Component Structure
26
+ - One component per file
27
+ - Clear component hierarchy documented in HANDOFF.md
28
+ - Props interface defined for each component
29
+
30
+ ### Quality Checklist
31
+ - [ ] Prototype renders without errors
32
+ - [ ] All mock data marked with TODO comments
33
+ - [ ] Component hierarchy documented
34
+ - [ ] Responsive layout considered
35
+ - [ ] Accessibility basics covered (labels, alt text)
36
+
37
+ ## Handoff Guidelines
38
+
39
+ When running `/trellis:handoff`:
40
+ - List all components created with brief descriptions
41
+ - Document mock data locations (file:line)
42
+ - Create "needs frontend implementation" checklist
43
+ - Note any design decisions that differ from PRD
44
+
45
+ ## Constraints
46
+
47
+ - Only write files within your bound output directory
48
+ - Do not modify requirements or production code
49
+ - Mock data must be inline, not in separate services
@@ -0,0 +1,52 @@
1
+ # Frontend Implementation Role Specification
2
+
3
+ > Work standards and constraints for the Frontend Developer role.
4
+
5
+ ---
6
+
7
+ ## Role Definition
8
+
9
+ - **Role ID**: frontend
10
+ - **Primary Output**: Production-ready frontend code
11
+ - **Output Directory**: Bound via `trellis init -d`
12
+
13
+ ## Work Standards
14
+
15
+ ### Implementation Guidelines
16
+ - Replace all mock data with real API calls
17
+ - Follow the project's existing patterns for API integration
18
+ - Preserve prototype's component structure unless refactoring is justified
19
+
20
+ ### API Integration
21
+ - Use the project's standard HTTP client
22
+ - Implement proper error handling for all API calls
23
+ - Add loading states for async operations
24
+ - Handle empty states and error states
25
+
26
+ ### Code Quality
27
+ - TypeScript strict mode compliance
28
+ - No `any` types without justification
29
+ - Unit tests for business logic
30
+ - Integration tests for API calls
31
+
32
+ ### Quality Checklist
33
+ - [ ] All `// TODO: replace with real API` markers resolved
34
+ - [ ] Error handling implemented for all API calls
35
+ - [ ] Loading and empty states handled
36
+ - [ ] TypeScript compiles without errors
37
+ - [ ] Lint passes
38
+ - [ ] Core business logic has unit tests
39
+
40
+ ## Handoff Guidelines
41
+
42
+ When running `/trellis:handoff`:
43
+ - List API integrations completed
44
+ - Document any deviations from prototype
45
+ - Note remaining technical debt or known issues
46
+ - Include test coverage summary
47
+
48
+ ## Constraints
49
+
50
+ - Only write files within your bound output directory
51
+ - Do not modify requirements or prototype code
52
+ - Preserve prototype component interfaces unless explicitly agreed
@@ -0,0 +1,44 @@
1
+ # PM Role Specification
2
+
3
+ > Work standards and constraints for the Product Manager role.
4
+
5
+ ---
6
+
7
+ ## Role Definition
8
+
9
+ - **Role ID**: pm
10
+ - **Primary Output**: Requirements documents (PRD, user stories, acceptance criteria)
11
+ - **Output Directory**: Bound via `trellis init -d`
12
+
13
+ ## Work Standards
14
+
15
+ ### Document Structure
16
+ - Every feature must have a PRD with: Goal, User Stories, Acceptance Criteria
17
+ - Use markdown format with clear headings and numbered lists
18
+ - Include edge cases and error scenarios
19
+
20
+ ### Naming Conventions
21
+ - PRD files: `prd-<feature-name>.md`
22
+ - User stories: `user-stories-<feature-name>.md`
23
+ - Use kebab-case for all filenames
24
+
25
+ ### Quality Checklist
26
+ - [ ] PRD has clear goal statement
27
+ - [ ] User stories follow "As a... I want... So that..." format
28
+ - [ ] Acceptance criteria are testable
29
+ - [ ] Edge cases documented
30
+ - [ ] Dependencies on other roles noted
31
+
32
+ ## Handoff Guidelines
33
+
34
+ When running `/trellis:handoff`:
35
+ - Ensure all PRD sections are complete
36
+ - Flag any open questions or assumptions
37
+ - List dependencies for Designer role
38
+ - Include reference links (Figma, API docs, etc.)
39
+
40
+ ## Constraints
41
+
42
+ - Only write files within your bound output directory
43
+ - Do not modify prototype or production code
44
+ - Do not make technical implementation decisions (leave to Designer/Frontend)
@@ -1 +1 @@
1
- {"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AASD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAGpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAmBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,OAAO,CAST;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtB;AAoED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBpD"}
1
+ {"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AASD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAGpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAmBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,OAAO,CAST;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtB;AAsED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBpD"}
@@ -164,7 +164,9 @@ const EXCLUDE_FROM_HASH = [
164
164
  ".current-task", // Current task marker (file, not directory)
165
165
  "spec/frontend/", // User-filled spec files
166
166
  "spec/backend/", // User-filled spec files
167
+ "spec/roles/", // Role spec templates (user-customizable)
167
168
  ".backup-", // Backup directories
169
+ "roles.json", // Role mapping file (user data)
168
170
  ];
169
171
  /**
170
172
  * Check if a path should be excluded from hash tracking
@@ -1 +1 @@
1
- {"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jahanxu/trellis",
3
- "version": "0.5.0",
3
+ "version": "0.5.5",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,7 +24,7 @@
24
24
  "memory",
25
25
  "trellis"
26
26
  ],
27
- "author": "jahanxu",
27
+ "author": "Mindfold LLC",
28
28
  "license": "AGPL-3.0-only",
29
29
  "dependencies": {
30
30
  "chalk": "^5.3.0",
@@ -1,145 +0,0 @@
1
- # Pick Task - Select Upstream Deliverable and Start Working
2
-
3
- Pick a deliverable from an upstream pool, create a task directory, and inject upstream context.
4
-
5
- ---
6
-
7
- ## Usage
8
-
9
- ```
10
- /trellis:pick-task <pool> <id>
11
- ```
12
-
13
- - `<pool>`: `requirements` (for Designers) or `prototypes` (for Frontend)
14
- - `<id>`: deliverable ID to pick (e.g., `user-login`)
15
-
16
- ---
17
-
18
- ## Process `[AI]`
19
-
20
- ### Step 1: Validate Role
21
-
22
- ```bash
23
- python3 ./.trellis/scripts/get_context.py
24
- ```
25
-
26
- Read the developer name from `.developer` file. Parse role from `{role}-{name}` convention.
27
-
28
- Validate role-pool match:
29
- - `designer` can pick from `requirements`
30
- - `frontend` / `frontend-impl` can pick from `prototypes`
31
- - `pm` should NOT pick from pools (PMs create tasks directly)
32
-
33
- If role cannot be parsed, warn but continue (soft detection).
34
-
35
- ### Step 2: Check Pool Availability
36
-
37
- ```bash
38
- python3 ./.trellis/scripts/pool.py status <pool> <id>
39
- ```
40
-
41
- Verify the item:
42
- - Exists in the pool
43
- - Status is `available` (not `consumed`)
44
-
45
- If not available, list what IS available:
46
- ```bash
47
- python3 ./.trellis/scripts/pool.py list <pool>
48
- ```
49
-
50
- ### Step 3: Check Current Task
51
-
52
- If there is already a current task set, ask:
53
- > "You have an active task: `<current-task>`. Would you like to finish it first, or switch to the new task?"
54
-
55
- If user wants to continue, proceed.
56
-
57
- ### Step 4: Create Task Directory
58
-
59
- Determine task suffix based on pool:
60
- - `requirements` pool -> `{id}-prototype`
61
- - `prototypes` pool -> `{id}-impl`
62
-
63
- ```bash
64
- TASK_DIR=$(python3 ./.trellis/scripts/task.py create "<title>" --slug <id>-<suffix>)
65
- ```
66
-
67
- ### Step 5: Write source.json
68
-
69
- Create `source.json` in the task directory to reference upstream:
70
-
71
- ```json
72
- {
73
- "based_on": {
74
- "type": "<requirement|prototype>",
75
- "id": "<id>",
76
- "path": "<deliverable path>",
77
- "handoff_doc": "<path>/HANDOFF.md"
78
- }
79
- }
80
- ```
81
-
82
- Write this file:
83
- ```bash
84
- cat > "$TASK_DIR/source.json" << 'EOF'
85
- {content}
86
- EOF
87
- ```
88
-
89
- ### Step 6: Configure Context (JSONL)
90
-
91
- Initialize context files for the task:
92
-
93
- ```bash
94
- python3 ./.trellis/scripts/task.py init-context "$TASK_DIR" frontend
95
- ```
96
-
97
- Add upstream deliverable files and role specs to context:
98
-
99
- ```bash
100
- # Add role spec
101
- python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement ".trellis/spec/roles/<role>/index.md" "Role guidelines"
102
-
103
- # Add upstream HANDOFF doc
104
- python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<handoff_doc>" "Upstream handoff document"
105
-
106
- # Add upstream deliverable directory files
107
- # (add each significant file from the upstream output)
108
- python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<upstream_file>" "Upstream deliverable"
109
- ```
110
-
111
- ### Step 7: Consume from Pool
112
-
113
- ```bash
114
- python3 ./.trellis/scripts/pool.py consume <pool> <id> <developer>
115
- ```
116
-
117
- ### Step 8: Activate Task
118
-
119
- ```bash
120
- python3 ./.trellis/scripts/task.py start "$TASK_DIR"
121
- ```
122
-
123
- ### Step 9: Read Upstream Context
124
-
125
- Read and summarize the upstream deliverables for the user:
126
-
127
- 1. Read the HANDOFF.md document
128
- 2. List all upstream files
129
- 3. Summarize key points the user should know
130
-
131
- ### Step 10: Report
132
-
133
- ```
134
- Task picked and ready!
135
- - Task: <task-dir>
136
- - Based on: <pool>/<id>
137
- - Upstream: <deliverable-path>
138
- - Role specs loaded: .trellis/spec/roles/<role>/
139
-
140
- Key points from upstream HANDOFF:
141
- - (summary point 1)
142
- - (summary point 2)
143
-
144
- What would you like to work on first?
145
- ```