@reservine/dx 1.0.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,544 @@
1
+ ---
2
+ name: reservine-dx:new-feature-planning
3
+ description: >
4
+ Plan a new feature for the Reservine ecosystem. Supports three scopes:
5
+ FE-only, BE-only, or Full (both repos). Use prefix syntax to set scope:
6
+ "fe: description", "be: description", "full: description", or omit to choose.
7
+ Creates GitHub issues with questionnaire, milestone, and sub-issue linking.
8
+ Works from either repo (auto-detects FE vs BE).
9
+ Triggers: "plan new feature", "create feature issues", "new feature".
10
+ argument-hint: "[fe:|be:|full:] <feature-description>"
11
+ allowed-tools:
12
+ - Bash
13
+ - Read
14
+ - Write
15
+ - AskUserQuestion
16
+ - Agent
17
+ - Skill
18
+ ---
19
+
20
+ # Reservine — New Feature Planning
21
+
22
+ Creates structured GitHub issues for a new feature. Supports three scopes:
23
+
24
+ | Prefix | Scope | What happens |
25
+ |--------|-------|-------------|
26
+ | `fe:` | FE-only | Issue in FE repo, FE questionnaire only |
27
+ | `be:` | BE-only | Issue in BE repo, BE questionnaire only |
28
+ | `full:` | Both repos | Linked parent-child issues, all questions |
29
+ | *(none)* | Ask user | Presents scope selection with recommendation |
30
+
31
+ **Repo-agnostic** — works from either the FE or BE repo. Auto-detects which repo
32
+ it's running in and resolves the sibling repo from `.claude/config`.
33
+
34
+ **Questionnaire style** — follows `my:interactive-questionnaire` pattern: one question
35
+ per message, rich tradeoff descriptions, recommended option marked, acknowledge each
36
+ answer before moving to the next question.
37
+
38
+ ---
39
+
40
+ ## Step 1: Load Config & Resolve Repos
41
+
42
+ 1. Read `.claude/config` + `.claude/config.local`:
43
+ ```bash
44
+ cat .claude/config 2>/dev/null
45
+ cat .claude/config.local 2>/dev/null
46
+ ```
47
+ Extract: `GITHUB_REPO`, `DEVELOPMENT_BRANCH`
48
+
49
+ 2. **Auto-detect repo context** — determine if we're in FE or BE:
50
+ ```bash
51
+ if [[ -f "angular.json" ]] || [[ -f "nx.json" ]]; then
52
+ CURRENT_REPO="FE"
53
+ FE_GITHUB_REPO=$GITHUB_REPO
54
+ SIBLING_DIR=$(grep 'BACKEND_DIR' .claude/config | cut -d= -f2)
55
+ SIBLING_DIR_ABS=$(grep 'BACKEND_DIR_ABSOLUTE' .claude/config.local 2>/dev/null | cut -d= -f2)
56
+ [[ -n "$SIBLING_DIR_ABS" ]] && SIBLING_DIR="$SIBLING_DIR_ABS"
57
+ BE_GITHUB_REPO=$(grep 'GITHUB_REPO' "$SIBLING_DIR/.claude/config" 2>/dev/null | cut -d= -f2)
58
+ else
59
+ CURRENT_REPO="BE"
60
+ BE_GITHUB_REPO=$GITHUB_REPO
61
+ SIBLING_DIR=$(grep 'FRONTEND_DIR' .claude/config | cut -d= -f2)
62
+ SIBLING_DIR_ABS=$(grep 'FRONTEND_DIR_ABSOLUTE' .claude/config.local 2>/dev/null | cut -d= -f2)
63
+ [[ -n "$SIBLING_DIR_ABS" ]] && SIBLING_DIR="$SIBLING_DIR_ABS"
64
+ FE_GITHUB_REPO=$(grep 'GITHUB_REPO' "$SIBLING_DIR/.claude/config" 2>/dev/null | cut -d= -f2)
65
+ fi
66
+ ```
67
+
68
+ 3. **Fallback defaults** (if sibling config unreadable):
69
+ - `FE_GITHUB_REPO` defaults to `LEFTEQ/reservine`
70
+ - `BE_GITHUB_REPO` defaults to `genesiscz/ReservineBack`
71
+
72
+ ## Step 2: Parse Arguments & Determine Scope
73
+
74
+ 1. **Parse prefix** from `$ARGUMENTS` using pattern `^(fe|be|full):\s*(.+)$` (case-insensitive):
75
+ - Match found → set `SCOPE` and `FEATURE_DESCRIPTION`
76
+ - No match → set `FEATURE_DESCRIPTION = $ARGUMENTS` (or null), `SCOPE = null`
77
+
78
+ 2. **If SCOPE is null**, `AskUserQuestion` with three options.
79
+ Mark the option matching `CURRENT_REPO` as "(Recommended)":
80
+
81
+ **FE-only** *(Recommended if running from FE repo)* — Creates a single issue in the
82
+ Angular/FE repo. Only asks UI/UX architecture questions (page layout, state management,
83
+ forms, etc.). Best for features that don't need new API endpoints or data model changes:
84
+ UI polish, new admin pages consuming existing APIs, layout refactors. If backend changes
85
+ are discovered later, you can create a cross-plan intent file as a follow-up.
86
+
87
+ **BE-only** *(Recommended if running from BE repo)* — Creates a single issue in the
88
+ Laravel/BE repo. Only asks data model and API architecture questions (models, endpoints,
89
+ permissions, etc.). Best for new endpoints, migrations, background jobs, or API-only
90
+ features: webhook systems, cron jobs, data exports. If frontend changes are discovered
91
+ later, you can create a cross-plan intent file as a follow-up.
92
+
93
+ **Full (both repos)** — Creates linked parent-child issues in both repos (FE = parent,
94
+ BE = child with sub-issue link). Asks all architecture questions for both stacks (BE
95
+ first, then FE — because data model constrains UI decisions). Best for complete features
96
+ spanning both repos: new CRUD modules, new settings pages with new APIs. Most thorough
97
+ but takes longer to complete.
98
+
99
+ 3. Acknowledge the choice: "Scope: **<scope>**. I'll create issue(s) in <repo(s)> and ask
100
+ <FE/BE/all> architecture questions."
101
+
102
+ 4. **If FEATURE_DESCRIPTION is still null**, `AskUserQuestion` for:
103
+ - Feature name (short, kebab-case-friendly)
104
+ - Business problem it solves
105
+ - Desired outcome / success criteria
106
+
107
+ 5. Search for existing related issues in the relevant repo(s):
108
+ - `fe` scope: search FE repo only
109
+ - `be` scope: search BE repo only
110
+ - `full` scope: search both repos
111
+ ```bash
112
+ gh search issues "<feature-keyword>" --repo $REPO --json number,title,state --limit 5
113
+ ```
114
+ If related issues found, present them and ask if this is a duplicate.
115
+
116
+ ## Step 3: Complexity Assessment
117
+
118
+ `AskUserQuestion` with scope-specific complexity indicators:
119
+
120
+ ### If SCOPE == "fe"
121
+
122
+ - **Simple** (1-2 days, single component/page, consuming existing API endpoints) —
123
+ Skip questionnaire, create minimal issue directly
124
+ - **Medium** (3-5 days, 2-3 components, new state management or form flows) —
125
+ Abbreviated FE questionnaire (questions 1-5)
126
+ - **Complex** (1+ weeks, multiple pages/layers, new UI patterns or complex state) —
127
+ Full FE questionnaire (all 10 questions)
128
+
129
+ ### If SCOPE == "be"
130
+
131
+ - **Simple** (1-2 days, single endpoint, extending existing model) —
132
+ Skip questionnaire, create minimal issue directly
133
+ - **Medium** (3-5 days, CRUD set, new model with 1-2 relationships) —
134
+ Abbreviated BE questionnaire (questions 1-5)
135
+ - **Complex** (1+ weeks, multiple models, events, jobs, cross-service logic) —
136
+ Full BE questionnaire (all 10 questions)
137
+
138
+ ### If SCOPE == "full"
139
+
140
+ - **Simple** (1-2 days per side, straightforward CRUD with UI) —
141
+ Skip questionnaire, create issues directly
142
+ - **Medium** (3-5 days total, new model + new page) —
143
+ Abbreviated questionnaire (5 key questions per side, BE first)
144
+ - **Complex** (1+ weeks, multiple modules on both sides) —
145
+ Full questionnaire (all 20 questions, BE first then FE)
146
+
147
+ ## Step 4: Interactive Questionnaire (Medium/Complex only)
148
+
149
+ Present questions one-at-a-time via `AskUserQuestion`. Follow the `my:interactive-questionnaire`
150
+ pattern for every question:
151
+
152
+ 1. **One question per message** — never batch
153
+ 2. **Rich option descriptions** — each option explains WHY and tradeoffs, not just the label
154
+ 3. **Mark recommended option** — add "(Recommended)" to the best default choice
155
+ 4. **Acknowledge each answer** — after the user picks, briefly explain how it constrains the next decision
156
+ 5. **Show question progress** — format as `**N/M — Topic**`
157
+
158
+ ### Scope filtering
159
+
160
+ | Scope | Questions asked |
161
+ |-------|----------------|
162
+ | `fe` | FE Questions only (Q1-Q10 or Q1-Q5 for Medium) |
163
+ | `be` | BE Questions only (Q1-Q10 or Q1-Q5 for Medium) |
164
+ | `full` | BE Questions first (Q1-Q10), then FE Questions (Q1-Q10). BE first because data model/API constrains UI decisions. |
165
+
166
+ ### FE Questions
167
+
168
+ | # | Topic | Options (present with rich descriptions + tradeoffs) |
169
+ |---|-------|---------|
170
+ | 1 | **Page Architecture** | **New admin page** (Recommended) — top-level route with sidebar entry, best for distinct domains. Tradeoff: adds nav complexity / **New tab on existing page** — extends an existing settings/detail page, keeps nav clean. Tradeoff: existing page grows / **Extension of existing component** — modifies existing component, best for small additions. Tradeoff: component complexity / **Layer/drawer only** — modal or side drawer from contextual triggers. Tradeoff: not directly URL-navigable |
171
+ | 2 | **Layout Pattern** | **List + detail layer** (Recommended) — table/list with slide-in detail panel, most common admin pattern / **Card grid** — visual grid with filtering, good for media-heavy / **Split view** — side-by-side panels / **Dashboard widgets** — metric cards + charts / **Wizard/stepper** — multi-step linear flow |
172
+ | 3 | **Data Display** | **CDK table with sort/paginate** (Recommended) — full-featured table with column sorting, pagination, best for data-heavy lists / **Card grid with filters** — visual cards with filter sidebar / **Timeline/feed** — chronological entries / **Kanban board** — drag-and-drop columns |
173
+ | 4 | **Form Strategy** | **Single form section** — one `ui-form-section`, simplest / **Multi-section with tabs** — grouped settings-style / **Wizard steps** — multi-step with validation / **Inline editing** — click-to-edit cells / **Settings-style** — multiple independent sections with individual save |
174
+ | 5 | **State Management** | **TanStack Query** (Recommended) — automatic caching, invalidation, loading states. Best for API data / **Signal-based service** — manual signals for local component state / **RxJS streams** — for complex async orchestration / **resource() API** — Angular 21 resource primitive for simple fetch |
175
+ | 6 | **Empty States** | Illustration + CTA / Simple text + button / Onboarding guide / Contextual tips |
176
+ | 7 | **Loading Strategy** | Skeleton screens / Spinner / Progressive loading / Optimistic UI |
177
+ | 8 | **Mobile Approach** | Responsive table-to-cards / Dedicated mobile layout / Bottom sheet / Drawer navigation |
178
+ | 9 | **Interaction Patterns** | Click-to-edit / Drag-and-drop / Bulk select + actions / Inline quick actions |
179
+ | 10 | **Animation & Transitions** | None / Subtle (fade, slide) / Rich (stagger, spring) / Micro-interactions |
180
+
181
+ ### BE Questions
182
+
183
+ | # | Topic | Options (present with rich descriptions + tradeoffs) |
184
+ |---|-------|---------|
185
+ | 1 | **Data Model Strategy** | **New standalone model** (Recommended) — clean separation, own migration + factory. Best for new domain concepts / **Extend existing model** — add columns to existing table, reuse existing factory. Best for enhancements / **Polymorphic** — shared interface across types (morphMany). More flexible but complex queries / **JSON extras on existing model** — store in model's `extra` JSON column. Fast to add, but no query indexing |
186
+ | 2 | **API Scope** | **Admin-only** (Recommended) — behind auth + permission check. Most features start here / **Public-only** — no auth required, customer-facing / **Both** — separate admin + public endpoints / **Tenant-scoped public** — public but filtered by tenant context |
187
+ | 3 | **CRUD Operations** | (Multi-select) List / Detail / Create / Update (PATCH) / Delete / Bulk operations |
188
+ | 4 | **Authentication & Permissions** | **Existing permission** (Recommended) — reuse an existing PermissionEnum case / **New permission enum case** — add new case to PermissionEnum + seed / **Public (no auth)** — no guard / **Role-based guard** — check user role, not specific permission |
189
+ | 5 | **Relationship Complexity** | **Simple belongsTo/hasMany** (Recommended) — standard FK relationships / **Many-to-many pivot** — pivot table with optional extra columns / **Polymorphic morphMany** — shared ownership across types / **Self-referencing tree** — parent-child within same table |
190
+ | 6 | **Event-Driven Side Effects** | None / Queue job (email, SMS) / Event + Listener / Webhook / Real-time Pusher |
191
+ | 7 | **File/Media Handling** | None / Single file upload / Multiple files / Image with crop / Documents with categories |
192
+ | 8 | **Money & Pricing** | None / MoneyFactory pattern / Stripe integration / Custom pricing rules |
193
+ | 9 | **Multi-tenant Scope** | **Standard BelongsToTenant** (Recommended) / Cross-tenant (SuperAdmin) / Tenant + Branch scoped |
194
+ | 10 | **Migration Strategy** | **Fresh migration** (Recommended) — new table, clean start / Alter existing table / Seeder needed / Feature flag for rollout |
195
+
196
+ After all questions, compile into a **Technical Assessment** and present to user for confirmation.
197
+
198
+ ## Step 5: Priority, Effort & Milestone
199
+
200
+ `AskUserQuestion`:
201
+ - **Priority**: P0 (critical) / P1 (high) / P2 (medium) / P3 (low)
202
+ - **Impact**: Low / Medium / High
203
+ - **Effort**: Low / Medium / High
204
+
205
+ Then **select milestone** from the primary repo:
206
+
207
+ ```bash
208
+ # fe scope or full scope: milestones from FE repo
209
+ # be scope: milestones from BE repo
210
+ MILESTONE_REPO=$FE_GITHUB_REPO # default
211
+ if [[ "$SCOPE" == "be" ]]; then
212
+ MILESTONE_REPO=$BE_GITHUB_REPO
213
+ fi
214
+ gh api repos/$MILESTONE_REPO/milestones --jq '.[].title'
215
+ ```
216
+
217
+ `AskUserQuestion` with the available milestones as options + "No milestone" + "Other" (free text).
218
+
219
+ ## Step 6: Create Issues
220
+
221
+ ### 6a: FE-only Issue (SCOPE == "fe")
222
+
223
+ ```bash
224
+ gh issue create --repo $FE_GITHUB_REPO --title "<feature-title>" --body "$(cat <<'ISSUE_EOF'
225
+ - [ ] @LEFTEQ read this
226
+ - [ ] @genesiscz read this
227
+
228
+ ---
229
+
230
+ **Priority**: <priority> | **Impact**: <impact> | **Effort**: <effort>
231
+ **Scope**: FE-only
232
+
233
+ ## Problem
234
+ <business problem>
235
+
236
+ ## Current State
237
+ <what exists today>
238
+
239
+ ## Implementation Plan
240
+
241
+ ### Phase 1: <phase-name>
242
+ - [ ] <task 1>
243
+ - [ ] <task 2>
244
+
245
+ ### Phase 2: <phase-name> (if applicable)
246
+ <description>
247
+
248
+ ## Technical Assessment
249
+ <compiled FE questionnaire answers — page architecture, layout, state management, etc.>
250
+
251
+ ## Success Criteria
252
+ - [ ] <criterion 1>
253
+ - [ ] <criterion 2>
254
+
255
+ ## Implementation Checklist
256
+ - [ ] Build passes (0 errors)
257
+ - [ ] Lint passes (0 warnings added)
258
+ - [ ] E2E tests written and passing
259
+ - [ ] Responsive (desktop + tablet + mobile)
260
+ - [ ] Accessibility (keyboard nav + ARIA)
261
+ - [ ] i18n keys added (no hardcoded text)
262
+ - [ ] Loading states implemented
263
+ - [ ] Empty states implemented
264
+ - [ ] Error states implemented
265
+ - [ ] PR created and linked
266
+ ISSUE_EOF
267
+ )" --label "feature"
268
+ ```
269
+
270
+ ### 6b: BE-only Issue (SCOPE == "be")
271
+
272
+ ```bash
273
+ gh issue create --repo $BE_GITHUB_REPO --title "<feature-title>" --body "$(cat <<'ISSUE_EOF'
274
+ - [ ] @LEFTEQ read this
275
+ - [ ] @genesiscz read this
276
+
277
+ ---
278
+
279
+ **Priority**: <priority> | **Impact**: <impact> | **Effort**: <effort>
280
+ **Scope**: BE-only
281
+
282
+ ## Problem
283
+ <business problem>
284
+
285
+ ## Current State
286
+ <what exists today>
287
+
288
+ ## API Endpoints
289
+ | Method | Path | Description | Auth |
290
+ |--------|------|-------------|------|
291
+ | GET | `/api/...` | ... | Bearer |
292
+ | POST | `/api/...` | ... | Bearer |
293
+
294
+ ## Data Model
295
+ <new models, relationships, migrations — from questionnaire>
296
+
297
+ ## Technical Decisions
298
+ <from questionnaire — permissions, caching, events, multi-tenant scope>
299
+
300
+ ## Implementation Plan
301
+
302
+ ### Phase 1: <phase-name>
303
+ - [ ] <task 1>
304
+ - [ ] <task 2>
305
+
306
+ ### Phase 2: <phase-name> (if applicable)
307
+ <description>
308
+
309
+ ## Success Criteria
310
+ - [ ] <criterion 1>
311
+ - [ ] <criterion 2>
312
+
313
+ ## Implementation Checklist
314
+ - [ ] Migration created (reversible)
315
+ - [ ] Model + Factory created
316
+ - [ ] Service layer implemented
317
+ - [ ] Controller + Routes created
318
+ - [ ] DTOs (request + response) created
319
+ - [ ] PHPStan passes (0 errors)
320
+ - [ ] Tests passing (happy + edge + error paths)
321
+ - [ ] Code review passed
322
+ - [ ] Security audit passed (OWASP + GDPR + multi-tenant)
323
+ - [ ] PR created and linked
324
+ ISSUE_EOF
325
+ )" --label "feature"
326
+ ```
327
+
328
+ ### 6c: Full Mode — Both Issues (SCOPE == "full")
329
+
330
+ Create FE issue (parent) using the template from 6a but with **both** FE and BE sections in
331
+ the Implementation Plan:
332
+
333
+ ```
334
+ **Backend:**
335
+ - [ ] <task 1>
336
+
337
+ **Frontend:**
338
+ - [ ] <task 2>
339
+ ```
340
+
341
+ Then create BE issue (child) with the 6b template, adding a parent reference:
342
+
343
+ ```
344
+ > **Parent:** $FE_GITHUB_REPO#<fe-issue>
345
+ ```
346
+
347
+ And including cross-repo tasks in the checklist:
348
+ ```
349
+ - [ ] Generate TypeScript types (`sail a app:types` + `./bin/types`)
350
+ - [ ] Create FE intent file (cross-plan)
351
+ ```
352
+
353
+ ### Assign milestone (all scopes):
354
+ ```bash
355
+ if [[ -n "$MILESTONE" ]]; then
356
+ # fe scope: FE repo only
357
+ # be scope: BE repo only
358
+ # full scope: both repos
359
+ gh issue edit <issue> --repo $REPO --milestone "$MILESTONE"
360
+ fi
361
+ ```
362
+
363
+ ## Step 7: Link Issues via Sub-Issues (SCOPE == "full" only)
364
+
365
+ > **Skip entirely for `fe` and `be` scopes.**
366
+
367
+ ```bash
368
+ FE_OWNER=$(echo $FE_GITHUB_REPO | cut -d/ -f1)
369
+ FE_NAME=$(echo $FE_GITHUB_REPO | cut -d/ -f2)
370
+ FE_NODE_ID=$(gh api graphql -f query='
371
+ { repository(owner:"'"$FE_OWNER"'", name:"'"$FE_NAME"'") {
372
+ issue(number:<fe-issue>) { id }
373
+ } }' --jq '.data.repository.issue.id')
374
+
375
+ BE_OWNER=$(echo $BE_GITHUB_REPO | cut -d/ -f1)
376
+ BE_NAME=$(echo $BE_GITHUB_REPO | cut -d/ -f2)
377
+ BE_NODE_ID=$(gh api graphql -f query='
378
+ { repository(owner:"'"$BE_OWNER"'", name:"'"$BE_NAME"'") {
379
+ issue(number:<be-issue>) { id }
380
+ } }' --jq '.data.repository.issue.id')
381
+
382
+ gh api graphql -f query='
383
+ mutation {
384
+ addSubIssue(input: {
385
+ issueId: "'"$FE_NODE_ID"'"
386
+ subIssueId: "'"$BE_NODE_ID"'"
387
+ }) {
388
+ issue { id }
389
+ subIssue { id }
390
+ }
391
+ }'
392
+ ```
393
+
394
+ If the sub-issue API fails, fall back to cross-reference comments only.
395
+
396
+ ## Step 8: Cross-Reference Comments (SCOPE == "full" only)
397
+
398
+ > **Skip entirely for `fe` and `be` scopes.**
399
+
400
+ ```bash
401
+ gh issue comment <fe-issue> --repo $FE_GITHUB_REPO \
402
+ --body "**BE Issue:** $BE_GITHUB_REPO#<be-issue>
403
+ Linked as sub-issue for implementation tracking."
404
+
405
+ gh issue comment <be-issue> --repo $BE_GITHUB_REPO \
406
+ --body "**FE Parent:** $FE_GITHUB_REPO#<fe-issue>
407
+ This issue tracks the backend implementation."
408
+ ```
409
+
410
+ ## Step 9: Ensure Labels Exist
411
+
412
+ Create status labels (idempotent) in the **affected repos only**:
413
+
414
+ ```bash
415
+ declare -A LABELS=(
416
+ ["status:planning"]="FBCA04"
417
+ ["status:in-progress"]="1D76DB"
418
+ ["status:blocked"]="D93F0B"
419
+ ["status:architecture-decided"]="1D76DB"
420
+ ["status:design-decided"]="0E8A16"
421
+ ["status:build-passing"]="0E8A16"
422
+ ["status:tests-passing"]="0E8A16"
423
+ ["status:pr-ready"]="FBCA04"
424
+ ["status:review-passed"]="0E8A16"
425
+ )
426
+
427
+ # fe scope: FE repo only | be scope: BE repo only | full scope: both
428
+ for repo in <affected-repos>; do
429
+ for label in "${!LABELS[@]}"; do
430
+ gh label create "$label" --repo "$repo" --color "${LABELS[$label]}" 2>/dev/null || true
431
+ done
432
+ done
433
+ ```
434
+
435
+ Apply `status:planning` to the created issue(s).
436
+
437
+ ## Step 10: Output Summary
438
+
439
+ ### 10a: FE-only Summary (SCOPE == "fe")
440
+
441
+ ```
442
+ Feature Planning Complete
443
+ =========================
444
+
445
+ Scope: FE-only
446
+ FE Issue: $FE_GITHUB_REPO#<number> — <title>
447
+ https://github.com/$FE_GITHUB_REPO/issues/<number>
448
+
449
+ Milestone: <milestone or "None">
450
+ Labels: status:planning
451
+ Priority: <priority> | Impact: <impact> | Effort: <effort>
452
+
453
+ Next steps:
454
+ 1. Both @LEFTEQ and @genesiscz should read the issue and check their boxes
455
+ 2. To implement:
456
+ cd <FRONTEND_DIR>
457
+ /reservine-dx:implement-plan <fe-issue-number>
458
+ ```
459
+
460
+ Then `AskUserQuestion`:
461
+ - **Done** — finish here
462
+ - **Create BE cross-plan** — create a `.intent.md` in the BE repo if backend changes are needed later (invokes `reservine-dx:cross-plan`)
463
+ - **Run Apple Design Director critique** — screenshot related screens via Playwright MCP
464
+
465
+ ### 10b: BE-only Summary (SCOPE == "be")
466
+
467
+ ```
468
+ Feature Planning Complete
469
+ =========================
470
+
471
+ Scope: BE-only
472
+ BE Issue: $BE_GITHUB_REPO#<number> — <title>
473
+ https://github.com/$BE_GITHUB_REPO/issues/<number>
474
+
475
+ Milestone: <milestone or "None">
476
+ Labels: status:planning
477
+ Priority: <priority> | Impact: <impact> | Effort: <effort>
478
+
479
+ Next steps:
480
+ 1. Both @LEFTEQ and @genesiscz should read the issue and check their boxes
481
+ 2. To implement:
482
+ cd <BACKEND_DIR>
483
+ /reservine-dx:implement-plan <be-issue-number>
484
+ ```
485
+
486
+ Then `AskUserQuestion`:
487
+ - **Done** — finish here
488
+ - **Create FE cross-plan** — create a `.intent.md` in the FE repo if frontend changes are needed later (invokes `reservine-dx:cross-plan`)
489
+
490
+ ### 10c: Full Summary (SCOPE == "full")
491
+
492
+ ```
493
+ Feature Planning Complete
494
+ =========================
495
+
496
+ Scope: Full (both repos)
497
+ FE Issue (Parent): $FE_GITHUB_REPO#<number> — <title>
498
+ https://github.com/$FE_GITHUB_REPO/issues/<number>
499
+
500
+ BE Issue (Child): $BE_GITHUB_REPO#<number> — <title>
501
+ https://github.com/$BE_GITHUB_REPO/issues/<number>
502
+
503
+ Relationship: FE is parent, BE is sub-issue
504
+ Milestone: <milestone or "None">
505
+ Labels: status:planning (both repos)
506
+ Priority: <priority> | Impact: <impact> | Effort: <effort>
507
+
508
+ Next steps:
509
+ 1. Both @LEFTEQ and @genesiscz should read the issues and check their boxes
510
+ 2. To implement BE first:
511
+ cd <BACKEND_DIR>
512
+ /reservine-dx:implement-plan <be-issue-number>
513
+ 3. To implement FE:
514
+ cd <FRONTEND_DIR>
515
+ /reservine-dx:implement-plan <fe-issue-number>
516
+ ```
517
+
518
+ Then `AskUserQuestion`:
519
+ - **Done** — finish here
520
+ - **Run Apple Design Director critique** — screenshot related screens via Playwright MCP
521
+ - **Create intent file** — write a `.intent.md` cross-plan file for the BE repo
522
+
523
+ ---
524
+
525
+ ## Config Variables
526
+
527
+ | Variable | Source | Purpose |
528
+ |----------|--------|---------|
529
+ | `GITHUB_REPO` | `.claude/config` | Current repo for `gh` commands |
530
+ | `FRONTEND_DIR` / `BACKEND_DIR` | `.claude/config` | Path to sibling repo |
531
+ | `*_ABSOLUTE` variants | `.claude/config.local` | Worktree-safe absolute paths |
532
+ | Sibling `GITHUB_REPO` | `<sibling>/.claude/config` | Other repo for `gh` commands |
533
+
534
+ ## Error Recovery
535
+
536
+ | Step | Failure | Recovery |
537
+ |------|---------|----------|
538
+ | 1 | Sibling config not found | Use defaults: `LEFTEQ/reservine` (FE), `genesiscz/ReservineBack` (BE) |
539
+ | 1 | Can't detect FE vs BE | `AskUserQuestion`: "Which repo is this?" |
540
+ | 2 | Invalid scope prefix | Ignore prefix, treat entire string as description, ask for scope |
541
+ | 5 | No milestones found | Skip milestone assignment |
542
+ | 6 | Issue creation fails | Check `gh auth status`, verify repo access |
543
+ | 7 | Sub-issues API not available | Fall back to cross-reference comments only |
544
+ | 9 | Label creation fails | Labels may already exist — this is fine (idempotent) |