@snipcodeit/mgw 0.2.2 → 0.4.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,253 @@
1
+ ---
2
+ name: board:views
3
+ description: Create GitHub Projects v2 layout views (kanban, table, roadmap)
4
+ ---
5
+
6
+ <step name="subcommand_views">
7
+ **Execute 'views' subcommand:**
8
+
9
+ Only run if `$SUBCOMMAND = "views"`.
10
+
11
+ Creates GitHub Projects v2 layout views. Subcommand argument is the view type:
12
+ `kanban`, `table`, or `roadmap`. GitHub's API supports creating views but does NOT
13
+ support programmatic configuration of board grouping — that must be set in the UI.
14
+
15
+ ```bash
16
+ if [ "$SUBCOMMAND" = "views" ]; then
17
+ if [ "$BOARD_CONFIGURED" = "false" ]; then
18
+ echo "No board configured. Run /mgw:board create first."
19
+ exit 1
20
+ fi
21
+
22
+ VIEW_TYPE=$(echo "$ARGUMENTS" | awk '{print $2}')
23
+
24
+ if [ -z "$VIEW_TYPE" ]; then
25
+ echo "Usage: /mgw:board views <kanban|table|roadmap>"
26
+ echo ""
27
+ echo " kanban Create Board layout view (swimlanes by Status)"
28
+ echo " table Create Table layout view (flat list with all fields)"
29
+ echo " roadmap Create Roadmap layout view (timeline grouped by Milestone)"
30
+ echo ""
31
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
32
+ echo " VIEW SETUP GUIDE"
33
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
34
+ echo ""
35
+ echo "Open your project board and create these views:"
36
+ echo ""
37
+ echo "1. Pipeline (Board)"
38
+ echo " - Layout: Board | Column field: Status"
39
+ echo " - Visible fields: Phase, GSD Route, Milestone, Priority"
40
+ echo ""
41
+ echo "2. Sprint Table (Table)"
42
+ echo " - Layout: Table | Group by: Milestone"
43
+ echo " - Columns: Status, Phase, Priority, Plan Summary, Assignees"
44
+ echo " - Sort by: Priority (ascending)"
45
+ echo ""
46
+ echo "3. Roadmap (Roadmap)"
47
+ echo " - Layout: Roadmap | Date field: Start Date -> Target Date"
48
+ echo " - Group by: Milestone"
49
+ echo ""
50
+ echo "4. My Work (Table)"
51
+ echo " - Layout: Table | Filter: assignee:@me"
52
+ echo " - Columns: Status, Phase, Plan Summary, Priority"
53
+ exit 1
54
+ fi
55
+
56
+ case "$VIEW_TYPE" in
57
+ kanban|table|roadmap) ;;
58
+ *)
59
+ echo "Unknown view type: ${VIEW_TYPE}"
60
+ echo "Valid: kanban, table, roadmap"
61
+ exit 1
62
+ ;;
63
+ esac
64
+ ```
65
+
66
+ **Map view type to layout and name:**
67
+
68
+ ```bash
69
+ case "$VIEW_TYPE" in
70
+ kanban)
71
+ VIEW_NAME="Kanban — Pipeline Stages"
72
+ VIEW_LAYOUT="BOARD_LAYOUT"
73
+ VIEW_KEY="kanban"
74
+ ;;
75
+ table)
76
+ VIEW_NAME="Triage Table — Team Planning"
77
+ VIEW_LAYOUT="TABLE_LAYOUT"
78
+ VIEW_KEY="table"
79
+ ;;
80
+ roadmap)
81
+ VIEW_NAME="Roadmap — Milestone Timeline"
82
+ VIEW_LAYOUT="ROADMAP_LAYOUT"
83
+ VIEW_KEY="roadmap"
84
+ ;;
85
+ esac
86
+
87
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
88
+ echo " MGW ► BOARD VIEWS: ${VIEW_NAME}"
89
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
90
+ echo ""
91
+ echo "Board: #${BOARD_NUMBER} — ${BOARD_URL}"
92
+ echo "Creating ${VIEW_LAYOUT} view: '${VIEW_NAME}'..."
93
+ echo ""
94
+ ```
95
+
96
+ **Create the view via GraphQL:**
97
+
98
+ ```bash
99
+ CREATE_VIEW_RESULT=$(gh api graphql -f query='
100
+ mutation($projectId: ID!, $name: String!, $layout: ProjectV2ViewLayout!) {
101
+ createProjectV2View(input: {
102
+ projectId: $projectId
103
+ name: $name
104
+ layout: $layout
105
+ }) {
106
+ projectV2View {
107
+ id
108
+ name
109
+ layout
110
+ }
111
+ }
112
+ }
113
+ ' -f projectId="$BOARD_NODE_ID" \
114
+ -f name="$VIEW_NAME" \
115
+ -f layout="$VIEW_LAYOUT" 2>&1)
116
+
117
+ VIEW_ID=$(echo "$CREATE_VIEW_RESULT" | python3 -c "
118
+ import json,sys
119
+ d = json.load(sys.stdin)
120
+ print(d['data']['createProjectV2View']['projectV2View']['id'])
121
+ " 2>/dev/null)
122
+
123
+ VIEW_LAYOUT_RETURNED=$(echo "$CREATE_VIEW_RESULT" | python3 -c "
124
+ import json,sys
125
+ d = json.load(sys.stdin)
126
+ print(d['data']['createProjectV2View']['projectV2View']['layout'])
127
+ " 2>/dev/null)
128
+
129
+ if [ -z "$VIEW_ID" ]; then
130
+ echo "ERROR: Failed to create view."
131
+ echo "GraphQL response: ${CREATE_VIEW_RESULT}"
132
+ exit 1
133
+ fi
134
+
135
+ echo "View created:"
136
+ echo " Name: ${VIEW_NAME}"
137
+ echo " Layout: ${VIEW_LAYOUT_RETURNED}"
138
+ echo " ID: ${VIEW_ID}"
139
+ echo ""
140
+ ```
141
+
142
+ **Store view ID in project.json:**
143
+
144
+ ```bash
145
+ python3 << PYEOF
146
+ import json
147
+
148
+ with open('${MGW_DIR}/project.json') as f:
149
+ project = json.load(f)
150
+
151
+ # Ensure views dict exists under project_board
152
+ board = project.setdefault('project', {}).setdefault('project_board', {})
153
+ views = board.setdefault('views', {})
154
+
155
+ views['${VIEW_KEY}'] = {
156
+ 'view_id': '${VIEW_ID}',
157
+ 'name': '${VIEW_NAME}',
158
+ 'layout': '${VIEW_LAYOUT}'
159
+ }
160
+
161
+ with open('${MGW_DIR}/project.json', 'w') as f:
162
+ json.dump(project, f, indent=2)
163
+
164
+ print('project.json updated with view ID')
165
+ PYEOF
166
+ ```
167
+
168
+ **Output instructions and next steps:**
169
+
170
+ ```bash
171
+ echo "View ID stored in .mgw/project.json under project.project_board.views.${VIEW_KEY}"
172
+ echo ""
173
+
174
+ case "$VIEW_TYPE" in
175
+ kanban)
176
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
177
+ echo " NEXT STEP: Configure Group By in GitHub UI"
178
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
179
+ echo ""
180
+ echo "GitHub's API does not support setting board grouping programmatically."
181
+ echo "To create swimlanes by pipeline stage:"
182
+ echo ""
183
+ echo " 1. Open the board: ${BOARD_URL}"
184
+ echo " 2. Click '${VIEW_NAME}' in the view tabs"
185
+ echo " 3. Click the view settings (down-arrow next to view name)"
186
+ echo " 4. Select 'Group by' -> 'Status'"
187
+ echo ""
188
+ echo "Each pipeline stage will become a swimlane column:"
189
+ echo " New / Triaged / Planning / Executing / Verifying / PR Created / Done"
190
+ echo " + Needs Info / Needs Security Review / Discussing / Approved / Failed / Blocked"
191
+ echo ""
192
+ echo "See docs/BOARD-SCHEMA.md for full view configuration reference."
193
+ ;;
194
+ table)
195
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
196
+ echo " NEXT STEP: Configure Columns in GitHub UI"
197
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
198
+ echo ""
199
+ echo "Triage Table view created for team planning visibility."
200
+ echo "GitHub's API does not support setting table columns or sort order"
201
+ echo "programmatically — configure in the GitHub UI:"
202
+ echo ""
203
+ echo " 1. Open the board: ${BOARD_URL}"
204
+ echo " 2. Click '${VIEW_NAME}' in the view tabs"
205
+ echo " 3. Click the view settings (down-arrow next to view name)"
206
+ echo " 4. Add these columns in order:"
207
+ echo " Status (sort ascending — pipeline order)"
208
+ echo " Milestone"
209
+ echo " Phase"
210
+ echo " GSD Route"
211
+ echo " AI Agent State"
212
+ echo " 5. Set 'Sort by' -> 'Status' ascending"
213
+ echo ""
214
+ echo "This column order surfaces triage planning context:"
215
+ echo " Status first shows pipeline position at a glance."
216
+ echo " Milestone + Phase + GSD Route give scope and routing context."
217
+ echo " AI Agent State shows live execution activity."
218
+ echo ""
219
+ echo "See docs/BOARD-SCHEMA.md for full column and sort configuration reference."
220
+ ;;
221
+ roadmap)
222
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
223
+ echo " NEXT STEP: Configure Roadmap in GitHub UI"
224
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
225
+ echo ""
226
+ echo "Roadmap view created for milestone-based timeline visualization."
227
+ echo "GitHub's API does not support setting roadmap grouping or date fields"
228
+ echo "programmatically — configure in the GitHub UI:"
229
+ echo ""
230
+ echo " 1. Open the board: ${BOARD_URL}"
231
+ echo " 2. Click '${VIEW_NAME}' in the view tabs"
232
+ echo " 3. Click the view settings (down-arrow next to view name)"
233
+ echo " 4. Set 'Group by' -> 'Milestone'"
234
+ echo " Items will be grouped by the Milestone field value."
235
+ echo ""
236
+ echo "Timeline date field limitation:"
237
+ echo " GitHub Roadmap requires date fields (start date + end date) to render"
238
+ echo " items on the timeline. MGW uses iteration-based tracking without"
239
+ echo " explicit date fields — items will appear in the roadmap grouped by"
240
+ echo " Milestone but without timeline bars unless date fields are added."
241
+ echo ""
242
+ echo " To enable timeline bars, set milestone due dates via:"
243
+ echo " gh api repos/{owner}/{repo}/milestones/{number} --method PATCH \\"
244
+ echo " -f due_on='YYYY-MM-DDT00:00:00Z'"
245
+ echo " GitHub Projects v2 can read milestone due dates as a date source."
246
+ echo ""
247
+ echo "See docs/BOARD-SCHEMA.md for full roadmap configuration reference."
248
+ ;;
249
+ esac
250
+
251
+ fi # end views subcommand
252
+ ```
253
+ </step>