x-ipe 1.0.19__py3-none-any.whl → 1.0.21__py3-none-any.whl

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.
x_ipe/cli/main.py CHANGED
@@ -175,8 +175,13 @@ def info(ctx: click.Context) -> None:
175
175
  is_flag=True,
176
176
  help="Skip copying skills from package.",
177
177
  )
178
+ @click.option(
179
+ "--no-mcp",
180
+ is_flag=True,
181
+ help="Skip MCP config merge prompt.",
182
+ )
178
183
  @click.pass_context
179
- def init(ctx: click.Context, force: bool, dry_run: bool, no_skills: bool) -> None:
184
+ def init(ctx: click.Context, force: bool, dry_run: bool, no_skills: bool, no_mcp: bool) -> None:
180
185
  """Initialize X-IPE in the current project.
181
186
 
182
187
  Creates the standard X-IPE folder structure:
@@ -208,6 +213,9 @@ def init(ctx: click.Context, force: bool, dry_run: bool, no_skills: bool) -> Non
208
213
  # Copy/merge copilot-instructions.md
209
214
  scaffold.copy_copilot_instructions()
210
215
 
216
+ # Copy MCP config (.github/copilot/mcp-config.json)
217
+ scaffold.copy_mcp_config()
218
+
211
219
  # Copy config files (copilot-prompt.json, tools.json, .env.example)
212
220
  scaffold.copy_config_files()
213
221
 
@@ -226,7 +234,7 @@ def init(ctx: click.Context, force: bool, dry_run: bool, no_skills: bool) -> Non
226
234
 
227
235
  # MCP config merge with user confirmation
228
236
  mcp_servers = scaffold.get_project_mcp_servers()
229
- if mcp_servers and not dry_run:
237
+ if mcp_servers and not dry_run and not no_mcp:
230
238
  click.echo("\n" + "-" * 40)
231
239
  click.echo("MCP Server Configuration")
232
240
  click.echo("-" * 40)
@@ -393,9 +401,14 @@ def serve(ctx: click.Context, host: Optional[str], port: Optional[int],
393
401
  default=None,
394
402
  help="Upgrade only the specified skill.",
395
403
  )
404
+ @click.option(
405
+ "--no-mcp",
406
+ is_flag=True,
407
+ help="Skip MCP config merge prompt.",
408
+ )
396
409
  @click.pass_context
397
410
  def upgrade(ctx: click.Context, force: bool, dry_run: bool,
398
- backup: bool, skill: Optional[str]) -> None:
411
+ backup: bool, skill: Optional[str], no_mcp: bool) -> None:
399
412
  """Upgrade skills from the X-IPE package.
400
413
 
401
414
  Syncs skills from the installed X-IPE package to the local
@@ -477,6 +490,44 @@ def upgrade(ctx: click.Context, force: bool, dry_run: bool,
477
490
 
478
491
  if backup and skills_to_warn:
479
492
  click.echo(f"\nBackups created in: {project_root / '.x-ipe' / 'backups'}")
493
+
494
+ # Copy/update MCP config from package, then merge to global
495
+ scaffold = ScaffoldManager(project_root, dry_run=dry_run, force=force)
496
+ scaffold.copy_mcp_config()
497
+
498
+ # MCP config merge with user confirmation
499
+ mcp_servers = scaffold.get_project_mcp_servers()
500
+ if mcp_servers and not dry_run and not no_mcp:
501
+ click.echo("\n" + "-" * 40)
502
+ click.echo("MCP Server Configuration")
503
+ click.echo("-" * 40)
504
+
505
+ # Show available servers
506
+ click.echo(f"\nFound {len(mcp_servers)} MCP server(s) in project config:")
507
+ for name in mcp_servers:
508
+ click.echo(f" • {name}")
509
+
510
+ # Confirm each server
511
+ servers_to_merge = []
512
+ for name in mcp_servers:
513
+ if click.confirm(f"\nAdd '{name}' to global MCP config?", default=True):
514
+ servers_to_merge.append(name)
515
+
516
+ if servers_to_merge:
517
+ # Confirm target path
518
+ default_path = Path.home() / ".copilot" / "mcp-config.json"
519
+ target_path = click.prompt(
520
+ "\nTarget MCP config path",
521
+ default=str(default_path),
522
+ type=click.Path(dir_okay=False, path_type=Path)
523
+ )
524
+
525
+ scaffold.merge_mcp_config(
526
+ servers_to_merge=servers_to_merge,
527
+ target_path=target_path
528
+ )
529
+
530
+ click.echo(f"\n✓ Merged {len(servers_to_merge)} MCP server(s) to {target_path}")
480
531
 
481
532
 
482
533
  def main() -> None:
x_ipe/core/scaffold.py CHANGED
@@ -145,6 +145,28 @@ class ScaffoldManager:
145
145
  shutil.copy2(source, target)
146
146
  self.created.append(target)
147
147
 
148
+ def copy_mcp_config(self) -> None:
149
+ """Copy mcp-config.json to .github/copilot/."""
150
+ source = self._get_resource_path("copilot")
151
+ if source is None or not source.exists():
152
+ return
153
+
154
+ source_file = source / "mcp-config.json"
155
+ if not source_file.exists():
156
+ return
157
+
158
+ target = self.project_root / ".github" / "copilot" / "mcp-config.json"
159
+
160
+ if target.exists():
161
+ if not self.force:
162
+ self.skipped.append(target)
163
+ return
164
+
165
+ if not self.dry_run:
166
+ target.parent.mkdir(parents=True, exist_ok=True)
167
+ shutil.copy2(source_file, target)
168
+ self.created.append(target)
169
+
148
170
  def get_project_mcp_servers(self) -> dict:
149
171
  """Get MCP servers from project's .github/copilot/mcp-config.json.
150
172
 
@@ -382,6 +404,7 @@ server:
382
404
  self.create_runtime_folder()
383
405
  self.copy_skills()
384
406
  self.copy_copilot_instructions()
407
+ self.copy_mcp_config()
385
408
  self.copy_config_files()
386
409
  self.copy_planning_templates()
387
410
  self.copy_themes()
@@ -0,0 +1,15 @@
1
+ {
2
+ "mcpServers": {
3
+ "chrome-devtools": {
4
+ "type": "local",
5
+ "command": "npx",
6
+ "tools": [
7
+ "*"
8
+ ],
9
+ "args": [
10
+ "-y",
11
+ "chrome-devtools-mcp@latest"
12
+ ]
13
+ }
14
+ }
15
+ }
@@ -74,7 +74,8 @@
74
74
  | Feature Refinement | `task-type-feature-refinement` | feature-stage | Technical Design | Yes |
75
75
  | Technical Design | `task-type-technical-design` | feature-stage | Test Generation | Yes |
76
76
  | Test Generation | `task-type-test-generation` | feature-stage | Code Implementation | No |
77
- | Code Implementation | `task-type-code-implementation` | feature-stage | Feature Closing | No |
77
+ | Code Implementation | `task-type-code-implementation` | feature-stage | Feature Acceptance Test | No |
78
+ | Feature Acceptance Test | `task-type-feature-acceptance-test` | Standalone OR feature-stage | Feature Closing | No |
78
79
  | Human Playground | `task-type-human-playground` | Standalone | - | Yes |
79
80
  | Feature Closing | `task-type-feature-closing` | feature-stage | User Manual | No |
80
81
  | Bug Fix | `task-type-bug-fix` | Standalone | - | Yes |
@@ -62,12 +62,14 @@ Task:
62
62
 
63
63
  | Task Type | Category |
64
64
  |-----------|----------|
65
- | `task-type-feature-refinement`, `task-type-technical-design`, `task-type-test-generation`, `task-type-code-implementation`, `task-type-feature-closing` | feature-stage |
65
+ | `task-type-feature-refinement`, `task-type-technical-design`, `task-type-test-generation`, `task-type-code-implementation`, `task-type-feature-acceptance-test`, `task-type-feature-closing` | feature-stage |
66
66
  | `task-type-ideation`, `task-type-idea-mockup`, `task-type-idea-to-architecture` | ideation-stage |
67
67
  | `task-type-requirement-gathering`, `task-type-feature-breakdown` | requirement-stage |
68
- | `task-type-bug-fix`, `task-type-change-request`, `task-type-project-init`, `task-type-dev-environment`, `task-type-user-manual`, `task-type-human-playground`, `task-type-share-idea` | Standalone |
68
+ | `task-type-bug-fix`, `task-type-change-request`, `task-type-project-init`, `task-type-dev-environment`, `task-type-user-manual`, `task-type-human-playground`, `task-type-share-idea`, `task-type-feature-acceptance-test` | Standalone |
69
69
  | `task-type-refactoring-analysis`, `task-type-improve-code-quality-before-refactoring`, `task-type-code-refactor-v2` | code-refactoring-stage |
70
70
 
71
+ > **Note:** `task-type-feature-acceptance-test` can be either feature-stage (in workflow) or Standalone (called directly).
72
+
71
73
  ### Task States
72
74
 
73
75
  | State | Terminal? | Description |
@@ -31,7 +31,7 @@ Implement code for a single feature by:
31
31
  |-----------|-------|
32
32
  | Task Type | Code Implementation |
33
33
  | Category | feature-stage |
34
- | Next Task Type | Feature Closing |
34
+ | Next Task Type | Feature Acceptance Test |
35
35
  | Require Human Review | No |
36
36
  | Feature Phase | Code Implementation |
37
37
 
@@ -53,7 +53,7 @@ This skill MUST return these attributes to the Task Data Model upon task complet
53
53
  Output:
54
54
  category: feature-stage
55
55
  status: completed | blocked
56
- next_task_type: Feature Closing
56
+ next_task_type: Feature Acceptance Test
57
57
  require_human_review: No
58
58
  auto_proceed: {from input Auto Proceed}
59
59
  task_output_links: [src/, tests/]
@@ -0,0 +1,500 @@
1
+ ---
2
+ name: task-type-feature-acceptance-test
3
+ description: Execute acceptance tests for features with web UI. Generates test cases from specification acceptance criteria, analyzes HTML for selectors, and runs tests via Chrome DevTools MCP. Use after Code Implementation for features with web UI. Triggers on requests like "run acceptance tests", "test feature UI", "execute acceptance tests".
4
+ ---
5
+
6
+ # Task Type: Feature Acceptance Test
7
+
8
+ ## Purpose
9
+
10
+ Execute acceptance tests for web UI features by:
11
+ 1. Checking if feature has web UI component (skip if backend-only)
12
+ 2. Generating acceptance test case plan from specification criteria
13
+ 3. Analyzing HTML to design precise test steps with selectors
14
+ 4. Reflecting and refining test cases for completeness
15
+ 5. Executing tests via Chrome DevTools MCP
16
+ 6. Reporting test results
17
+
18
+ ---
19
+
20
+ ## Important Notes
21
+
22
+ ### Skill Prerequisite
23
+ - If you HAVE NOT learned `task-execution-guideline` skill, please learn it first before executing this skill.
24
+
25
+ **Important:** If Agent DO NOT have skill capability, can directly go to `.github/skills/` folder to learn skills. And SKILL.md file is the entry point to understand each skill.
26
+
27
+ ### Web UI Only
28
+ This skill is **ONLY for features with web UI**. If the feature is:
29
+ - Backend API only → Skip this skill, proceed to Feature Closing
30
+ - CLI tool only → Skip this skill, proceed to Feature Closing
31
+ - Library/SDK only → Skip this skill, proceed to Feature Closing
32
+
33
+ ### MCP Requirement
34
+ This skill requires Chrome DevTools MCP for test execution. If MCP is not available, generate test cases but mark execution as blocked.
35
+
36
+ ---
37
+
38
+ ## Task Type Default Attributes
39
+
40
+ | Attribute | Value |
41
+ |-----------|-------|
42
+ | Task Type | Feature Acceptance Test |
43
+ | Category | Standalone OR feature-stage |
44
+ | Next Task Type | Feature Closing (if feature-stage) |
45
+ | Require Human Review | No |
46
+ | Feature Phase | Acceptance Testing |
47
+
48
+ **Category Behavior:**
49
+ - **Standalone**: Called directly to test any web UI (no feature board interaction)
50
+ - **feature-stage**: Called as part of feature workflow (after Code Implementation)
51
+
52
+ ---
53
+
54
+ ## Task Type Required Input Attributes
55
+
56
+ | Attribute | Default Value |
57
+ |-----------|---------------|
58
+ | Auto Proceed | False |
59
+ | feature_id | Required (feature-stage) OR Optional (standalone) |
60
+ | target_url | Required (standalone) OR from feature (feature-stage) |
61
+
62
+ ---
63
+
64
+ ## Skill/Task Completion Output Attributes
65
+
66
+ This skill MUST return these attributes to the Task Data Model upon task completion:
67
+
68
+ ```yaml
69
+ Output:
70
+ category: Standalone | feature-stage # Based on how skill was invoked
71
+ status: completed | blocked | skipped
72
+ next_task_type: Feature Closing | null # null if standalone
73
+ require_human_review: No
74
+ auto_proceed: {from input}
75
+ task_output_links: [x-ipe-docs/requirements/FEATURE-XXX/acceptance-test-cases.md] | [{output_path}]
76
+
77
+ # Feature-stage specific (only if category=feature-stage)
78
+ feature_id: FEATURE-XXX
79
+ feature_title: {title}
80
+ feature_version: {version}
81
+ feature_phase: Acceptance Testing
82
+
83
+ # Acceptance test specific
84
+ skip_reason: "No web UI" | null
85
+ test_cases_created: {count}
86
+ tests_passed: {count}
87
+ tests_failed: {count}
88
+ pass_rate: "{X}%"
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Definition of Ready (DoR)
94
+
95
+ | # | Checkpoint | Required |
96
+ |---|------------|----------|
97
+ | 1 | Feature exists on feature board | Yes |
98
+ | 2 | Feature status is "Implemented" or "Test Generation Complete" | Yes |
99
+ | 3 | Code implementation is complete | Yes |
100
+ | 4 | Specification with acceptance criteria exists | Yes |
101
+ | 5 | Feature is deployed and accessible via URL | Yes |
102
+
103
+ ---
104
+
105
+ ## Execution Flow
106
+
107
+ Execute Feature Acceptance Test by following these steps in order:
108
+
109
+ | Step | Name | Action | Gate to Next |
110
+ |------|------|--------|--------------|
111
+ | 1 | Check UI Scope | Determine if feature has web UI | Has web UI OR skip |
112
+ | 2 | Generate Plan | Create test cases from acceptance criteria | Test cases defined |
113
+ | 3 | Analyze HTML | Extract element selectors from UI code | Selectors identified |
114
+ | 4 | Test Data Prep | Ask user for test data (if auto_proceed=false) | Data collected OR skipped |
115
+ | 5 | Reflect & Refine | Review and update test cases | Cases validated |
116
+ | 6 | Execute Tests | Run tests via Chrome DevTools MCP | Tests complete |
117
+ | 7 | Report Results | Document test results | Results documented |
118
+
119
+ **⛔ BLOCKING RULES:**
120
+ - Step 1: If no web UI → output status=skipped, proceed to next_task_type
121
+ - Step 4: If auto_proceed=true → skip this step, use placeholder/generated data
122
+ - Step 6: If MCP unavailable → output status=blocked, test cases ready for manual execution
123
+
124
+ ---
125
+
126
+ ## Execution Procedure
127
+
128
+ ### Step 1: Check UI Scope
129
+
130
+ **Action:** Determine if feature has web UI component
131
+
132
+ ```
133
+ 1. QUERY feature board for Feature Data Model:
134
+ - feature_id
135
+ - specification_link
136
+ - technical_design_link
137
+
138
+ 2. READ technical design → Check "Technical Scope" section:
139
+
140
+ IF scope includes [Frontend] OR [Full Stack]:
141
+ - Proceed to Step 2
142
+
143
+ ELSE (Backend, API Only, Database, CLI):
144
+ - SET status = "skipped"
145
+ - SET skip_reason = "No web UI"
146
+ - RETURN to task-execution-guideline with:
147
+ next_task_type: Feature Closing
148
+ status: skipped
149
+
150
+ 3. VERIFY feature is accessible:
151
+ - Check if playground/demo URL exists
152
+ - Confirm feature can be triggered via web UI
153
+ ```
154
+
155
+ **Output:** Decision to proceed or skip
156
+
157
+ ---
158
+
159
+ ### Step 2: Generate Acceptance Test Plan
160
+
161
+ **Action:** Create test cases from specification acceptance criteria
162
+
163
+ ```
164
+ 1. READ specification.md for feature:
165
+ Location: x-ipe-docs/requirements/FEATURE-XXX/specification.md
166
+
167
+ 2. EXTRACT all acceptance criteria (AC-X):
168
+ - Note the exact wording of each criterion
169
+ - Identify testable conditions
170
+ - Note any edge cases mentioned
171
+
172
+ 3. CREATE acceptance-test-cases.md:
173
+ Location: x-ipe-docs/requirements/FEATURE-XXX/acceptance-test-cases.md
174
+ Template: Use templates/acceptance-test-cases.md
175
+
176
+ 4. FOR EACH acceptance criterion:
177
+ - Create at least one test case (TC-XXX)
178
+ - Map TC to AC reference
179
+ - Define priority (P0/P1/P2)
180
+ - Write high-level test steps (without selectors yet)
181
+ - Define expected outcomes
182
+
183
+ 5. PRIORITIZE test cases:
184
+ P0 (Critical): Core functionality, must pass
185
+ P1 (High): Important flows, should pass
186
+ P2 (Medium): Edge cases, nice to pass
187
+ ```
188
+
189
+ **Output:** Initial acceptance-test-cases.md with test case outlines
190
+
191
+ ---
192
+
193
+ ### Step 3: Analyze HTML for Selectors
194
+
195
+ **Action:** Extract precise CSS/XPath selectors from UI code
196
+
197
+ ```
198
+ 1. LOCATE UI implementation files:
199
+ - Templates: src/x_ipe/templates/*.html
200
+ - Static JS: src/x_ipe/static/js/*.js
201
+ - Components: (project-specific paths)
202
+
203
+ 2. FOR EACH test case, identify UI elements:
204
+
205
+ ELEMENT IDENTIFICATION PRIORITY:
206
+ 1. data-testid attribute (preferred)
207
+ 2. id attribute
208
+ 3. aria-label for accessibility
209
+ 4. Unique class combinations
210
+ 5. CSS selector path (last resort)
211
+
212
+ 3. UPDATE test steps with selectors:
213
+
214
+ | Step | Action | Element Selector | Input Data | Expected Result |
215
+ |------|--------|------------------|------------|-----------------|
216
+ | 1 | Click | `[data-testid="submit-btn"]` | - | Form submits |
217
+ | 2 | Enter | `#email-input` | "test@example.com" | Value appears |
218
+ | 3 | Verify | `.success-message` | - | Contains "Saved" |
219
+
220
+ 4. VERIFY selectors are:
221
+ - Unique on the page
222
+ - Stable (not dynamically generated IDs)
223
+ - Descriptive of element purpose
224
+ ```
225
+
226
+ **Selector Best Practices:**
227
+ ```
228
+ PREFER:
229
+ - [data-testid="..."] # Explicit test hooks
230
+ - #unique-id # Stable IDs
231
+ - [aria-label="..."] # Accessibility labels
232
+ - form[name="..."] # Named forms
233
+
234
+ AVOID:
235
+ - .class1.class2.class3 # Fragile class chains
236
+ - div > div > span # Position-dependent
237
+ - [id^="auto_"] # Auto-generated IDs
238
+ ```
239
+
240
+ ---
241
+
242
+ ### Step 4: Test Data Preparation (Conditional)
243
+
244
+ **Action:** Collect test data from user when auto_proceed is false
245
+
246
+ ```
247
+ IF auto_proceed = true:
248
+ - SKIP this step
249
+ - Use placeholder/generated test data
250
+ - Proceed to Step 5
251
+
252
+ IF auto_proceed = false:
253
+ - PAUSE and ask user for test data
254
+ ```
255
+
256
+ **Data Collection Process:**
257
+
258
+ ```
259
+ 1. ANALYZE each test case for data requirements:
260
+
261
+ DATA TYPES (per test case):
262
+ - Input: Values to enter in forms, fields
263
+ - Selection: Options to select from dropdowns
264
+ - Expected: Expected text, values to verify
265
+ - Compare: Before/after values for validation
266
+
267
+ 2. ASK user for each test case:
268
+
269
+ "For TC-001 ({title}):
270
+ - Input for '{field}': ___
271
+ - Expected result: ___"
272
+
273
+ 3. UPDATE Test Data table in each test case:
274
+
275
+ | Type | Field/Element | Value | Notes |
276
+ |------|---------------|-------|-------|
277
+ | Input | email | "user@test.com" | Valid email |
278
+ | Expected | success-msg | "Saved" | Contains |
279
+ ```
280
+
281
+ **Output:** Test Data table populated in each test case section
282
+
283
+ ---
284
+
285
+ ### Step 5: Reflect and Refine Test Cases
286
+
287
+ **Action:** Review each test case for completeness and accuracy
288
+
289
+ ```
290
+ FOR EACH test case:
291
+
292
+ 1. VALIDATION CHECKLIST:
293
+ □ Does test case cover the AC completely?
294
+ □ Are preconditions clearly defined?
295
+ □ Are all steps actionable?
296
+ □ Are selectors verified to exist?
297
+ □ Is expected result specific and measurable?
298
+ □ Are edge cases covered?
299
+
300
+ 2. REFLECTION QUESTIONS:
301
+ - What could cause this test to fail incorrectly?
302
+ - Are there missing steps between actions?
303
+ - Is the expected result too vague?
304
+ - Should this be split into multiple tests?
305
+
306
+ 3. REFINE based on reflection:
307
+ - Add missing steps
308
+ - Clarify expected results
309
+ - Add wait conditions if needed
310
+ - Handle dynamic content loading
311
+
312
+ 4. UPDATE acceptance-test-cases.md with refinements
313
+ ```
314
+
315
+ **Common Refinements:**
316
+ - Add explicit wait steps for async operations
317
+ - Add verification steps between major actions
318
+ - Split complex tests into focused smaller tests
319
+ - Add cleanup/reset steps if needed
320
+
321
+ ---
322
+
323
+ ### Step 6: Execute Tests via Chrome DevTools MCP
324
+
325
+ **Action:** Run acceptance tests using Chrome DevTools MCP
326
+
327
+ ```
328
+ 1. CHECK MCP availability:
329
+
330
+ IF Chrome DevTools MCP available:
331
+ - Proceed with execution
332
+ ELSE:
333
+ - SET status = "blocked"
334
+ - Document: "Test cases ready for manual execution"
335
+ - RETURN results with test_cases_created count
336
+
337
+ 2. FOR EACH test case (ordered by priority):
338
+
339
+ a. SETUP:
340
+ - Navigate to test URL
341
+ - Verify page loaded
342
+
343
+ b. EXECUTE steps:
344
+ - Perform each action via MCP
345
+ - Capture results after each step
346
+ - Take screenshot on failure
347
+
348
+ c. VERIFY expected outcomes:
349
+ - Check element states
350
+ - Validate text content
351
+ - Confirm UI changes
352
+
353
+ d. RECORD result:
354
+ - Status: Pass | Fail | Blocked
355
+ - Execution time
356
+ - Failure reason (if any)
357
+ - Screenshot link (if failure)
358
+
359
+ 3. CONTINUE with remaining tests even if some fail
360
+ ```
361
+
362
+ **MCP Commands Pattern:**
363
+ ```javascript
364
+ // Navigate
365
+ await page.goto('{URL}');
366
+
367
+ // Click element
368
+ await page.click('{selector}');
369
+
370
+ // Enter text
371
+ await page.fill('{selector}', '{value}');
372
+
373
+ // Verify text content
374
+ const text = await page.textContent('{selector}');
375
+ assert(text.includes('{expected}'));
376
+
377
+ // Wait for element
378
+ await page.waitForSelector('{selector}');
379
+ ```
380
+
381
+ ---
382
+
383
+ ### Step 7: Report Test Results
384
+
385
+ **Action:** Document comprehensive test results
386
+
387
+ ```
388
+ 1. UPDATE acceptance-test-cases.md:
389
+
390
+ - Set status for each test case (✅ Pass | ❌ Fail | ⬜ Not Run)
391
+ - Add execution notes
392
+ - Fill in Execution Results section:
393
+ - Execution date
394
+ - Environment
395
+ - Pass/Fail counts
396
+ - Pass rate percentage
397
+
398
+ 2. DOCUMENT failures:
399
+
400
+ | Test Case | Failure Reason | Recommended Action |
401
+ |-----------|----------------|-------------------|
402
+ | TC-003 | Button not found | Verify selector |
403
+ | TC-007 | Timeout waiting | Check async loading |
404
+
405
+ 3. CALCULATE metrics:
406
+ - Total tests
407
+ - Passed count
408
+ - Failed count
409
+ - Blocked count
410
+ - Pass rate = (passed / total) * 100
411
+
412
+ 4. RETURN task output with results
413
+ ```
414
+
415
+ ---
416
+
417
+ ## Definition of Done (DoD)
418
+
419
+ | # | Checkpoint | Required |
420
+ |---|------------|----------|
421
+ | 1 | Feature checked for web UI scope | Yes |
422
+ | 2 | Acceptance test cases created from ACs | Yes (if has UI) |
423
+ | 3 | HTML analyzed for element selectors | Yes (if has UI) |
424
+ | 4 | Test data collected from user (if auto_proceed=false) | Conditional |
425
+ | 5 | Test cases reflected and refined | Yes (if has UI) |
426
+ | 6 | Tests executed via MCP (or marked blocked) | Yes (if has UI) |
427
+ | 7 | Test results documented | Yes (if has UI) |
428
+ | 8 | acceptance-test-cases.md saved to feature folder | Yes (if has UI) |
429
+
430
+ **Important:** After completing this skill, always return to `task-execution-guideline` skill to continue the task execution flow and validate the DoD defined there.
431
+
432
+ ---
433
+
434
+ ## Patterns
435
+
436
+ ### Pattern: Form Submission Test
437
+
438
+ **When:** Feature includes form input and submission
439
+ **Then:**
440
+ ```
441
+ 1. Test empty form submission (validation)
442
+ 2. Test invalid input formats
443
+ 3. Test valid submission → success state
444
+ 4. Verify success message/redirect
445
+ ```
446
+
447
+ ### Pattern: CRUD Operations Test
448
+
449
+ **When:** Feature includes Create/Read/Update/Delete
450
+ **Then:**
451
+ ```
452
+ 1. Test Create → verify appears in list
453
+ 2. Test Read → verify data displayed correctly
454
+ 3. Test Update → verify changes persisted
455
+ 4. Test Delete → verify removed from list
456
+ ```
457
+
458
+ ### Pattern: Navigation/Routing Test
459
+
460
+ **When:** Feature includes page navigation
461
+ **Then:**
462
+ ```
463
+ 1. Test direct URL access
464
+ 2. Test navigation via links/buttons
465
+ 3. Verify correct page renders
466
+ 4. Test back/forward browser navigation
467
+ ```
468
+
469
+ ---
470
+
471
+ ## Anti-Patterns
472
+
473
+ | Anti-Pattern | Why Bad | Do Instead |
474
+ |--------------|---------|------------|
475
+ | Test without selectors | Tests will fail to find elements | Analyze HTML first |
476
+ | Skip reflection step | Miss edge cases and errors | Always reflect on each TC |
477
+ | Test implementation details | Brittle tests | Test user-visible behavior |
478
+ | One massive test | Hard to debug failures | Split into focused tests |
479
+ | Ignore async loading | Flaky tests | Add explicit wait steps |
480
+ | Hard-coded test data | Hard to maintain | Use variables/fixtures |
481
+
482
+ ---
483
+
484
+ ## Example
485
+
486
+ See [references/examples.md](references/examples.md) for concrete execution examples including:
487
+ - Standard feature acceptance test flow
488
+ - Skipped execution (no web UI)
489
+ - Blocked execution (no MCP available)
490
+
491
+ ---
492
+
493
+ ## Notes
494
+
495
+ - This skill is specifically for **web UI acceptance testing**
496
+ - Backend/API testing is handled by Test Generation skill
497
+ - Test cases should map 1:1 with acceptance criteria
498
+ - Prioritize stable selectors (data-testid > id > class)
499
+ - MCP execution is preferred but manual execution fallback exists
500
+ - All test artifacts go in the feature folder alongside specification
@@ -0,0 +1,390 @@
1
+ # Feature Acceptance Test Examples
2
+
3
+ This document provides concrete execution examples for the Feature Acceptance Test skill.
4
+
5
+ ---
6
+
7
+ ## Example 1: Standard Feature Acceptance Test
8
+
9
+ **Context:** FEATURE-022-C: Feedback Capture & Panel has been implemented and needs acceptance testing.
10
+
11
+ ### Step 1: Check UI Scope
12
+
13
+ ```
14
+ Query feature board:
15
+ feature_id: FEATURE-022-C
16
+ status: Implemented
17
+
18
+ Read technical design:
19
+ Technical Scope: [Frontend, Backend]
20
+
21
+ Decision: Has web UI → Proceed to Step 2
22
+ ```
23
+
24
+ ### Step 2: Generate Test Plan
25
+
26
+ Read specification.md acceptance criteria:
27
+ ```
28
+ AC-1: User can right-click any element to open context menu
29
+ AC-2: Context menu shows "Capture Feedback" option
30
+ AC-3: Clicking capture opens feedback panel
31
+ AC-4: Panel displays screenshot preview
32
+ AC-5: User can enter feedback description
33
+ AC-6: Submit button saves feedback
34
+ ```
35
+
36
+ Generated acceptance-test-cases.md:
37
+ ```markdown
38
+ ### TC-001: Context Menu Opens on Right-Click
39
+
40
+ **Acceptance Criteria Reference:** AC-1
41
+
42
+ **Priority:** P0
43
+
44
+ **Preconditions:**
45
+ - User is on proxy page with injected inspector
46
+
47
+ **Test Steps:**
48
+
49
+ | Step | Action | Element Selector | Input Data | Expected Result |
50
+ |------|--------|------------------|------------|-----------------|
51
+ | 1 | Navigate to | - | /proxy/preview?url=... | Page loads |
52
+ | 2 | Right-click | `body` | - | Context menu appears |
53
+ | 3 | Verify | `.feedback-context-menu` | - | Menu is visible |
54
+
55
+ **Expected Outcome:** Context menu appears on right-click
56
+ ```
57
+
58
+ ### Step 3: Analyze HTML
59
+
60
+ Reviewed src/x_ipe/static/js/uiux-feedback.js:
61
+ ```javascript
62
+ // Found context menu implementation
63
+ const contextMenu = document.createElement('div');
64
+ contextMenu.className = 'feedback-context-menu';
65
+ contextMenu.id = 'feedback-context-menu';
66
+
67
+ // Found feedback panel
68
+ const panel = document.createElement('div');
69
+ panel.id = 'feedback-panel';
70
+ panel.innerHTML = `
71
+ <textarea id="feedback-description"></textarea>
72
+ <button id="submit-feedback">Submit</button>
73
+ `;
74
+ ```
75
+
76
+ Updated selectors:
77
+ ```
78
+ - Context menu: #feedback-context-menu
79
+ - Capture option: .capture-feedback-btn
80
+ - Feedback panel: #feedback-panel
81
+ - Description input: #feedback-description
82
+ - Submit button: #submit-feedback
83
+ ```
84
+
85
+ ### Step 4: Test Data Preparation
86
+
87
+ **Context:** auto_proceed = false, so user is asked for test data.
88
+
89
+ Agent asks:
90
+ ```markdown
91
+ ## Test Data Required for FEATURE-022-C
92
+
93
+ ### TC-005: Submit Feedback Successfully
94
+ - **Feedback description text:** (text to enter in textarea)
95
+ - **Expected success message:** (exact text to verify after submit)
96
+
97
+ ### TC-006: Submit Feedback with Screenshot
98
+ - **Feedback description:** (text to enter)
99
+ - **Expected confirmation:** (what should appear after submission)
100
+
101
+ Please provide the test data, or type "use defaults" to use placeholder values.
102
+ ```
103
+
104
+ User provides:
105
+ ```
106
+ TC-005:
107
+ - Feedback description: "The button color is too light, hard to see"
108
+ - Expected success message: "Feedback submitted successfully"
109
+
110
+ TC-006:
111
+ - Feedback description: "Navigation menu overlaps content"
112
+ - Expected confirmation: "Feedback with screenshot saved"
113
+ ```
114
+
115
+ Updated in each test case's Test Data table:
116
+ ```markdown
117
+ ### TC-005: Submit Feedback Successfully
118
+ ...
119
+ **Test Data:**
120
+ > Data Source: User Provided
121
+
122
+ | Type | Field/Element | Value | Notes |
123
+ |------|---------------|-------|-------|
124
+ | Input | feedback-description | "The button color is too light, hard to see" | User provided |
125
+ | Expected | success-message | "Feedback submitted successfully" | Contains |
126
+
127
+ ---
128
+
129
+ ### TC-006: Submit Feedback with Screenshot
130
+ ...
131
+ **Test Data:**
132
+ > Data Source: User Provided
133
+
134
+ | Type | Field/Element | Value | Notes |
135
+ |------|---------------|-------|-------|
136
+ | Input | feedback-description | "Navigation menu overlaps content" | User provided |
137
+ | Expected | success-message | "Feedback with screenshot saved" | Contains |
138
+ ```
139
+
140
+ ### Step 5: Reflect & Refine
141
+
142
+ Reflection on TC-001:
143
+ - ✅ Covers AC-1 completely
144
+ - ⚠️ Missing: Wait for context menu animation
145
+ - ⚠️ Missing: Verify menu position near click
146
+
147
+ Refined TC-001:
148
+ ```markdown
149
+ | Step | Action | Element Selector | Input Data | Expected Result |
150
+ |------|--------|------------------|------------|-----------------|
151
+ | 1 | Navigate to | - | /proxy/preview?url=... | Page loads |
152
+ | 2 | Wait | `body` | 500ms | Page interactive |
153
+ | 3 | Right-click | `body` at (200, 200) | - | Click registered |
154
+ | 4 | Wait for | `#feedback-context-menu` | 300ms | Menu appears |
155
+ | 5 | Verify visible | `#feedback-context-menu` | - | Menu is visible |
156
+ | 6 | Verify position | `#feedback-context-menu` | - | Near click coords |
157
+ ```
158
+
159
+ ### Step 6: Execute via Chrome DevTools MCP
160
+
161
+ ```javascript
162
+ // TC-001 Execution
163
+ await page.goto('http://localhost:5000/proxy/preview?url=https://example.com');
164
+ await page.waitForTimeout(500);
165
+ await page.click('body', { button: 'right', position: { x: 200, y: 200 } });
166
+ await page.waitForSelector('#feedback-context-menu', { timeout: 1000 });
167
+
168
+ const menuVisible = await page.isVisible('#feedback-context-menu');
169
+ assert(menuVisible === true); // PASS
170
+
171
+ // TC-002 Execution
172
+ await page.click('.capture-feedback-btn');
173
+ await page.waitForSelector('#feedback-panel');
174
+
175
+ const panelVisible = await page.isVisible('#feedback-panel');
176
+ assert(panelVisible === true); // PASS
177
+ ```
178
+
179
+ ### Step 7: Report Results
180
+
181
+ ```markdown
182
+ ## Execution Results
183
+
184
+ **Execution Date:** 01-28-2026
185
+ **Executed By:** Cipher
186
+ **Environment:** dev (localhost:5000)
187
+
188
+ | Metric | Value |
189
+ |--------|-------|
190
+ | Total Tests | 6 |
191
+ | Passed | 6 |
192
+ | Failed | 0 |
193
+ | Blocked | 0 |
194
+ | Pass Rate | 100% |
195
+ ```
196
+
197
+ ### Final Output
198
+
199
+ ```yaml
200
+ Output:
201
+ category: feature-stage
202
+ status: completed
203
+ next_task_type: Feature Closing
204
+ require_human_review: No
205
+ task_output_links: [x-ipe-docs/requirements/FEATURE-022-C/acceptance-test-cases.md]
206
+ feature_id: FEATURE-022-C
207
+ feature_title: Feedback Capture & Panel
208
+ feature_version: v1.0
209
+ feature_phase: Acceptance Testing
210
+ test_cases_created: 6
211
+ tests_passed: 6
212
+ tests_failed: 0
213
+ pass_rate: "100%"
214
+ ```
215
+
216
+ ---
217
+
218
+ ## Example 2: Skipped Execution (No Web UI)
219
+
220
+ **Context:** FEATURE-018: CLI Tool has been implemented.
221
+
222
+ ### Step 1: Check UI Scope
223
+
224
+ ```
225
+ Query feature board:
226
+ feature_id: FEATURE-018
227
+ status: Implemented
228
+
229
+ Read technical design:
230
+ Technical Scope: [CLI]
231
+
232
+ Decision: No web UI → Skip acceptance test
233
+ ```
234
+
235
+ ### Final Output
236
+
237
+ ```yaml
238
+ Output:
239
+ category: feature-stage
240
+ status: skipped
241
+ next_task_type: Feature Closing
242
+ require_human_review: No
243
+ task_output_links: []
244
+ feature_id: FEATURE-018
245
+ feature_title: X-IPE CLI Tool
246
+ feature_version: v1.0
247
+ feature_phase: Acceptance Testing
248
+ skip_reason: "No web UI - CLI tool only"
249
+ test_cases_created: 0
250
+ tests_passed: 0
251
+ tests_failed: 0
252
+ pass_rate: "N/A"
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Example 3: Blocked Execution (No MCP)
258
+
259
+ **Context:** FEATURE-008: Idea Viewer needs acceptance testing but Chrome DevTools MCP is not configured.
260
+
261
+ ### Steps 1-4: Complete as normal
262
+
263
+ Test cases generated and refined in acceptance-test-cases.md.
264
+
265
+ ### Step 5: Execute Blocked
266
+
267
+ ```
268
+ CHECK MCP availability:
269
+ Chrome DevTools MCP: Not configured
270
+
271
+ ACTION:
272
+ - Mark execution as blocked
273
+ - Document test cases are ready for manual execution
274
+ ```
275
+
276
+ ### Step 6: Report Results
277
+
278
+ ```markdown
279
+ ## Execution Results
280
+
281
+ **Execution Date:** 01-30-2026
282
+ **Executed By:** Cipher
283
+ **Environment:** N/A (MCP not available)
284
+
285
+ | Metric | Value |
286
+ |--------|-------|
287
+ | Total Tests | 8 |
288
+ | Passed | 0 |
289
+ | Failed | 0 |
290
+ | Blocked | 8 |
291
+ | Pass Rate | N/A |
292
+
293
+ **Note:** Test cases ready for manual execution. Chrome DevTools MCP required for automated execution.
294
+ ```
295
+
296
+ ### Final Output
297
+
298
+ ```yaml
299
+ Output:
300
+ category: feature-stage
301
+ status: blocked
302
+ next_task_type: Feature Closing
303
+ require_human_review: Yes # Human should manually test or configure MCP
304
+ task_output_links: [x-ipe-docs/requirements/FEATURE-008/acceptance-test-cases.md]
305
+ feature_id: FEATURE-008
306
+ feature_title: Idea Viewer
307
+ feature_version: v1.4
308
+ feature_phase: Acceptance Testing
309
+ test_cases_created: 8
310
+ tests_passed: 0
311
+ tests_failed: 0
312
+ pass_rate: "N/A"
313
+ blocked_reason: "Chrome DevTools MCP not available"
314
+ ```
315
+
316
+ ---
317
+
318
+ ## Example 4: Partial Test Failure
319
+
320
+ **Context:** FEATURE-010: Dashboard has some failing tests.
321
+
322
+ ### Step 5: Execute with Failures
323
+
324
+ ```javascript
325
+ // TC-001: Dashboard loads - PASS
326
+ await page.goto('/dashboard');
327
+ const title = await page.textContent('h1');
328
+ assert(title === 'Dashboard'); // PASS
329
+
330
+ // TC-002: Chart renders - PASS
331
+ await page.waitForSelector('.chart-container');
332
+ // PASS
333
+
334
+ // TC-003: Export button works - FAIL
335
+ await page.click('#export-btn');
336
+ await page.waitForSelector('.export-modal', { timeout: 3000 });
337
+ // TIMEOUT - Modal never appeared
338
+
339
+ // TC-004: Data refresh works - PASS
340
+ await page.click('#refresh-btn');
341
+ // PASS
342
+ ```
343
+
344
+ ### Step 6: Report with Failures
345
+
346
+ ```markdown
347
+ ## Test Execution Summary
348
+
349
+ | Test Case | Title | Priority | Status | Notes |
350
+ |-----------|-------|----------|--------|-------|
351
+ | TC-001 | Dashboard loads | P0 | ✅ Pass | |
352
+ | TC-002 | Chart renders | P0 | ✅ Pass | |
353
+ | TC-003 | Export button works | P1 | ❌ Fail | Modal timeout |
354
+ | TC-004 | Data refresh works | P1 | ✅ Pass | |
355
+
356
+ ## Execution Results
357
+
358
+ | Metric | Value |
359
+ |--------|-------|
360
+ | Total Tests | 4 |
361
+ | Passed | 3 |
362
+ | Failed | 1 |
363
+ | Blocked | 0 |
364
+ | Pass Rate | 75% |
365
+
366
+ ### Failed Tests
367
+
368
+ | Test Case | Failure Reason | Recommended Action |
369
+ |-----------|----------------|-------------------|
370
+ | TC-003 | Timeout waiting for .export-modal | Check export modal implementation |
371
+ ```
372
+
373
+ ### Final Output
374
+
375
+ ```yaml
376
+ Output:
377
+ category: feature-stage
378
+ status: completed # Tests ran, even with failures
379
+ next_task_type: Feature Closing
380
+ require_human_review: Yes # Due to test failures
381
+ task_output_links: [x-ipe-docs/requirements/FEATURE-010/acceptance-test-cases.md]
382
+ feature_id: FEATURE-010
383
+ feature_title: Dashboard
384
+ feature_version: v1.0
385
+ feature_phase: Acceptance Testing
386
+ test_cases_created: 4
387
+ tests_passed: 3
388
+ tests_failed: 1
389
+ pass_rate: "75%"
390
+ ```
@@ -0,0 +1,135 @@
1
+ # Acceptance Test Cases
2
+
3
+ > Feature: {FEATURE-XXX} - {Feature Title}
4
+ > Generated: {date}
5
+ > Status: Draft | Ready for Execution | Executed
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ | Attribute | Value |
12
+ |-----------|-------|
13
+ | Feature ID | {FEATURE-XXX} |
14
+ | Feature Title | {title} |
15
+ | Total Test Cases | {count} |
16
+ | Priority | P0 (Critical) / P1 (High) / P2 (Medium) |
17
+ | Target URL | {base URL for testing} |
18
+
19
+ ---
20
+
21
+ ## Prerequisites
22
+
23
+ - [ ] Feature is deployed and accessible
24
+ - [ ] Test environment is ready
25
+ - [ ] Chrome DevTools MCP is available
26
+
27
+ ---
28
+
29
+ ## Test Cases
30
+
31
+ ### TC-001: {Test Case Title}
32
+
33
+ **Acceptance Criteria Reference:** AC-{X} from specification.md
34
+
35
+ **Priority:** P0 | P1 | P2
36
+
37
+ **Preconditions:**
38
+ - {precondition 1}
39
+ - {precondition 2}
40
+
41
+ **Test Data:**
42
+ > Data Source: User Provided | Generated Defaults
43
+
44
+ | Type | Field/Element | Value | Notes |
45
+ |------|---------------|-------|-------|
46
+ | Input | {field_name} | "{value}" | {notes} |
47
+ | Input | {field_name} | "{value}" | {notes} |
48
+ | Selection | {dropdown} | "{option}" | {notes} |
49
+ | Expected | {element} | "{expected_text}" | Match: Exact/Contains |
50
+ | Compare | {counter} | Before: X, After: Y | {notes} |
51
+
52
+ **Test Steps:**
53
+
54
+ | Step | Action | Element Selector | Input Data | Expected Result |
55
+ |------|--------|------------------|------------|-----------------|
56
+ | 1 | Navigate to | - | {URL} | Page loads successfully |
57
+ | 2 | Click | `{CSS selector}` | - | {expected behavior} |
58
+ | 3 | Enter text | `{CSS selector}` | "{input value}" | Text appears in field |
59
+ | 4 | Click | `{CSS selector}` | - | {expected behavior} |
60
+ | 5 | Verify | `{CSS selector}` | - | Element contains "{expected text}" |
61
+
62
+ **Expected Outcome:** {overall expected result}
63
+
64
+ **Status:** ⬜ Not Run | ✅ Pass | ❌ Fail
65
+
66
+ **Execution Notes:** {notes after execution}
67
+
68
+ ---
69
+
70
+ ### TC-002: {Test Case Title}
71
+
72
+ **Acceptance Criteria Reference:** AC-{X} from specification.md
73
+
74
+ **Priority:** P0 | P1 | P2
75
+
76
+ **Preconditions:**
77
+ - {precondition 1}
78
+
79
+ **Test Data:**
80
+ > Data Source: User Provided | Generated Defaults
81
+
82
+ | Type | Field/Element | Value | Notes |
83
+ |------|---------------|-------|-------|
84
+ | Input | {field_name} | "{value}" | {notes} |
85
+ | Expected | {element} | "{expected_value}" | Match: Exact |
86
+
87
+ **Test Steps:**
88
+
89
+ | Step | Action | Element Selector | Input Data | Expected Result |
90
+ |------|--------|------------------|------------|-----------------|
91
+ | 1 | Navigate to | - | {URL} | Page loads successfully |
92
+ | 2 | {action} | `{selector}` | {input} | {expected} |
93
+
94
+ **Expected Outcome:** {overall expected result}
95
+
96
+ **Status:** ⬜ Not Run | ✅ Pass | ❌ Fail
97
+
98
+ **Execution Notes:** {notes after execution}
99
+
100
+ ---
101
+
102
+ ## Test Execution Summary
103
+
104
+ | Test Case | Title | Priority | Status | Notes |
105
+ |-----------|-------|----------|--------|-------|
106
+ | TC-001 | {title} | P0 | ⬜ Not Run | |
107
+ | TC-002 | {title} | P1 | ⬜ Not Run | |
108
+
109
+ ---
110
+
111
+ ## Execution Results
112
+
113
+ **Execution Date:** {date}
114
+ **Executed By:** {agent nickname}
115
+ **Environment:** {dev/staging/prod}
116
+
117
+ | Metric | Value |
118
+ |--------|-------|
119
+ | Total Tests | {X} |
120
+ | Passed | {X} |
121
+ | Failed | {X} |
122
+ | Blocked | {X} |
123
+ | Pass Rate | {X}% |
124
+
125
+ ### Failed Tests
126
+
127
+ | Test Case | Failure Reason | Screenshot | Recommended Action |
128
+ |-----------|----------------|------------|-------------------|
129
+ | TC-XXX | {reason} | {link if any} | {action} |
130
+
131
+ ---
132
+
133
+ ## Notes
134
+
135
+ - {any additional notes about testing}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: x-ipe
3
- Version: 1.0.19
3
+ Version: 1.0.21
4
4
  Summary: X-IPE: AI-powered development framework
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -4,12 +4,12 @@ x_ipe/app.py,sha256=EkOYKxF-nKnRG2ev6tC-Fw5EHikWJyVxO7hfLAouJPE,5262
4
4
  x_ipe/app.py.bak,sha256=WRuPkrHkS77BAMFYV5uVS2Xl2-QDwQE0KdgTyJHxMpk,45732
5
5
  x_ipe/config.py,sha256=NYLhpfhxVMZETHW2SNej3sVoUutuPzTGrQTsJTuie80,1685
6
6
  x_ipe/cli/__init__.py,sha256=yAg0J4ULFDPnVbtFOORPAcWT_SwjW4CK9bNDd-c2xPg,80
7
- x_ipe/cli/main.py,sha256=ZX0zNh5k2dV897K3YWD_OJcKABkGR4zLX2CQuU6gpCw,14788
7
+ x_ipe/cli/main.py,sha256=NA0Fn7t6tjrYczASydcE0qPsA-y89pYPxBv8faiyURs,16596
8
8
  x_ipe/core/__init__.py,sha256=aB6UCmjC3QRrJfHPTV0uBqGHnnnQncX6rl4i6PKI5oo,556
9
9
  x_ipe/core/config.py,sha256=9JmWcVqBvfcqwkWnfx4WvmSi65JVnfhERE5w6pBZSRI,5590
10
10
  x_ipe/core/hashing.py,sha256=brF5W8fHZVxADkRqztoBg9yNkN8PpbLI7WWrsRY54Zg,3573
11
11
  x_ipe/core/paths.py,sha256=bTXouYy0-_k7A1mNaRg2MLWnfDuzZesPlsY9Rg6nMOo,2562
12
- x_ipe/core/scaffold.py,sha256=-Jw6jI6oMcwWJ5JMB2iENXxK2ywDhAsx-ADjrd6K2Lo,14337
12
+ x_ipe/core/scaffold.py,sha256=64jB8jYmm9oU_7l3PUjRzLyudb8NxZ9mDwgHb8WytVI,15107
13
13
  x_ipe/core/skills.py,sha256=sZSk-eDLYxvpa9J1a7HIv3xuwrDLinvL7tLIcmTXixc,8535
14
14
  x_ipe/handlers/__init__.py,sha256=asR3VNYqVYbOowET6Nxn82S7hM52ySEuCmqAaKaZ78E,359
15
15
  x_ipe/handlers/terminal_handlers.py,sha256=1vc34FAdaBL2J_wi3BSlGKw6HmWADXf83O-ECTO8Ov0,4463
@@ -17,6 +17,7 @@ x_ipe/handlers/voice_handlers.py,sha256=Eo5qzQR4WIbG-Jm5zmQHro4kAb-1mbnUPIDnGcop
17
17
  x_ipe/resources/config/.env.example,sha256=uG9RiX2q9wd-RS-2kg8gqiYrZwNtYHjJINzrIIk3_1I,1192
18
18
  x_ipe/resources/config/copilot-prompt.json,sha256=R6aG7x63Kw_YHIZgs0QVNMA1w4DBY8ilTWBhSYTrAxo,709
19
19
  x_ipe/resources/config/tools.json,sha256=WilFs7YfsbPEhml10ksFcba61F1OU-iMqYocogqTefE,595
20
+ x_ipe/resources/copilot/mcp-config.json,sha256=cSjfY0a1ewqwnTMbTJNYk1UOZrPKCS43xKvOwP7DcjQ,216
20
21
  x_ipe/resources/planning/features.md,sha256=NhWPI3eeC7EN5yqWwR-7pKbLrbBJ5JVKDtWoiYOOiAY,981
21
22
  x_ipe/resources/planning/task-board.md,sha256=y_TZ7SZxCZCRUTs-g04BWewSb3CnX_lXY3UP7_5vkF4,2028
22
23
  x_ipe/resources/themes/theme-default/component-visualization.html,sha256=0Ykm6QxVsEyk4Xpt7uNggZnqD1UxAR0vN3qtLbb3OLk,27908
@@ -95,7 +96,7 @@ x_ipe/templates/index.html,sha256=jwkix2HceZpryi-nIpqSrKa1Yu_zTW9i6V2gBiWnB-g,68
95
96
  x_ipe/templates/settings.html,sha256=sWre7dVeDkmRimMZuQDnVvmHHXBStBQAmW-sRIHgRQY,28132
96
97
  x_ipe/templates/uiux-feedbacks.html,sha256=MbFtkXowyrVfPCthU0FZ8lCrnCJ2W82EqqfsWZnzpgE,3429
97
98
  x_ipe/templates/workplace.html,sha256=URmVTLMFJ4oyEdfAV3UA6RTaSzieUoJJVmGydzroyFw,4652
98
- x_ipe/resources/copilot-instructions.md,sha256=Xkg4u09KtgNiFFlnYX-9vUa2n3Xme_usyLDztfNvHns,7443
99
+ x_ipe/resources/copilot-instructions.md,sha256=ZDEQwxmE68zJfh5oDgmzDKI-R6zq90V_eJz-XUUSkXo,7570
99
100
  x_ipe/resources/skills/feature-stage+feature-board-management/SKILL.md,sha256=dKezRiU4rMu0rxjxtzbSejwQKVxiNMZ1T3Z6S77_0gI,12692
100
101
  x_ipe/resources/skills/feature-stage+feature-board-management/templates/features.md,sha256=i2GgcZLAXJtatsabctlYDY30H81Mf3Ux0WQXVOORygQ,996
101
102
  x_ipe/resources/skills/frontend-design/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
@@ -1134,7 +1135,7 @@ x_ipe/resources/skills/requirement-stage+requirement-board-management/SKILL.md,s
1134
1135
  x_ipe/resources/skills/task-board-management/SKILL.md,sha256=MHlMd5v9d_zf-91NZApmwWJhyTfrTg_Wpk6XIKyV8hY,10713
1135
1136
  x_ipe/resources/skills/task-board-management/templates/task-board.md,sha256=BqTpI7EThVho2uOl43pweRsRLEmgC5fZ8X-lfANFFAQ,1947
1136
1137
  x_ipe/resources/skills/task-board-management/templates/task-record.yaml,sha256=jPuGTpvJtGVXvYk1kAS2ISo37kfwZ4u5I4eP2lItGBM,3060
1137
- x_ipe/resources/skills/task-execution-guideline/SKILL.md,sha256=jjuNB9ughJqR-jitJo2Ui-6vC3G6w1pDhQIrxlp0NQQ,15696
1138
+ x_ipe/resources/skills/task-execution-guideline/SKILL.md,sha256=_-I8ERVjQarxiTEm66MuKa9uTpW45muV5FVXbVCeWqI,15894
1138
1139
  x_ipe/resources/skills/task-execution-guideline/templates/task-board.md,sha256=YDfhiTU7XBeyjfvtvIjgazHdj3W4X-7RJYElrT-DqXY,1465
1139
1140
  x_ipe/resources/skills/task-execution-guideline/templates/task-record.yaml,sha256=KeqVfE9G0kdL1hdyjLMQERDR2sEW84JFpccOMssohk0,3158
1140
1141
  x_ipe/resources/skills/task-type-bug-fix/SKILL.md,sha256=LmdhaSYghwKfad3vSs8dRYIFsNjvDDcJiXhfls7Xu1c,10026
@@ -1142,7 +1143,7 @@ x_ipe/resources/skills/task-type-change-request/SKILL.md,sha256=D4hVF8ag_oe8OLX_
1142
1143
  x_ipe/resources/skills/task-type-change-request/references/examples.md,sha256=_flkdNdgyUSEMfSb51zxeL1QhdXLvQANPAJUdZlvnDw,4633
1143
1144
  x_ipe/resources/skills/task-type-change-request/references/patterns.md,sha256=c-Iz0mncfb2dHVhmqXXaRSvWMiCZzxs8COUHGN60jIQ,4754
1144
1145
  x_ipe/resources/skills/task-type-change-request/templates/change-request.md,sha256=mWHPbkpeAY6QB7XBBLNZ-PXcgP88h7BEAyXBAGFdSrI,1980
1145
- x_ipe/resources/skills/task-type-code-implementation/SKILL.md,sha256=Rjff9SWkYMRGAxrnRIWpaw6aTyH_ep4BUd57vrbcT7c,15334
1146
+ x_ipe/resources/skills/task-type-code-implementation/SKILL.md,sha256=wqUn0mYJkn0E0b6EGTIEmD6aeK1Wx--76ZmRX9vNBys,15350
1146
1147
  x_ipe/resources/skills/task-type-code-implementation/references/examples.md,sha256=CKRqR2pn4wWTZ3MDkf575wf2zEsIoOaNJWgPFCmsugY,4071
1147
1148
  x_ipe/resources/skills/task-type-code-refactor-v2/SKILL.md,sha256=3toyHNxuaCCL1qdT2AVCXCzwJR0DLyvMNCzCqO5CKt4,15974
1148
1149
  x_ipe/resources/skills/task-type-code-refactor-v2/references/examples.md,sha256=1lv-Q5-_qFiLMEFpEaa2SLcukxI7zfriCMKcdQidR1I,7359
@@ -1151,6 +1152,9 @@ x_ipe/resources/skills/task-type-dev-environment/references/examples.md,sha256=6
1151
1152
  x_ipe/resources/skills/task-type-dev-environment/templates/setup-nodejs.md,sha256=jWOp1CfnaTKfQa7hB6xrk2PbZ_P_SjMuMSyu6oLuXLA,7196
1152
1153
  x_ipe/resources/skills/task-type-dev-environment/templates/setup-python.md,sha256=qSilVbgXjfta7zkjlM1IBIbMCMoTgiW-g2EVps5iX5w,4985
1153
1154
  x_ipe/resources/skills/task-type-doc-viewer/SKILL.md,sha256=dn3WKRTjsQSbW6vMLWBbqKOIVPK9AelSb_mihErtX3c,7058
1155
+ x_ipe/resources/skills/task-type-feature-acceptance-test/SKILL.md,sha256=sR_1kgcvLev2rpfVxYaGdtd1upf9nI63Mu0Ov1R_8xQ,14678
1156
+ x_ipe/resources/skills/task-type-feature-acceptance-test/references/examples.md,sha256=DCKPEIRPkS-EWA7B13tenWo9oYwOCXj9YG5e-8Pgh50,9886
1157
+ x_ipe/resources/skills/task-type-feature-acceptance-test/templates/acceptance-test-cases.md,sha256=iTB-TOPSLy-7GXAnJoPwmodIRHA7o6AlAYoOXdy-W04,3330
1154
1158
  x_ipe/resources/skills/task-type-feature-breakdown/SKILL.md,sha256=94K4Z8fP95Xsou-B5H97lMvjapbdKJw6SmaqI8HqHyQ,17718
1155
1159
  x_ipe/resources/skills/task-type-feature-breakdown/references/examples.md,sha256=4coUx5BBSTMTFZmBNAJbqc_KWLp35EKLDzYe1h5INRY,4848
1156
1160
  x_ipe/resources/skills/task-type-feature-breakdown/templates/features.md,sha256=SBHkJqspofvytOL5KsbHlwqHUa40ZfWQgLAXshhjn8s,252
@@ -1240,8 +1244,8 @@ x_ipe/resources/skills/x-ipe-skill-creator/templates/references/examples.md,sha2
1240
1244
  x_ipe/resources/skills/xlsx/LICENSE.txt,sha256=efbY9bQnJS-jscEezb22v2ELlE91MLTeePdw84dBz6o,1467
1241
1245
  x_ipe/resources/skills/xlsx/SKILL.md,sha256=AgzNtZMiV7ZsY47BFX6iSNV_pSyMAfH2i1WbWXDH3zU,10632
1242
1246
  x_ipe/resources/skills/xlsx/recalc.py,sha256=qx7wyUU2uyO2xqPTJ2mwQB7DzIXnPCR9V03YTsc68V0,6408
1243
- x_ipe-1.0.19.dist-info/METADATA,sha256=dLATENpbAnlU4_JMD_N82OphD1-enFXv1fDRQaDiDiw,637
1244
- x_ipe-1.0.19.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1245
- x_ipe-1.0.19.dist-info/entry_points.txt,sha256=b787rsvZAIjLgjBzB87D_BE8yu6DCqBqv9zv4F6_j6M,41
1246
- x_ipe-1.0.19.dist-info/licenses/LICENSE,sha256=8lS-M88bBvSI9_8kauYvQRu03WEMnj1Q5KoxOFKFnhc,1062
1247
- x_ipe-1.0.19.dist-info/RECORD,,
1247
+ x_ipe-1.0.21.dist-info/METADATA,sha256=oknwRHE940fbvhPbPU1g4GA-bJX5gSV_mqhZmPE8Huo,637
1248
+ x_ipe-1.0.21.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1249
+ x_ipe-1.0.21.dist-info/entry_points.txt,sha256=b787rsvZAIjLgjBzB87D_BE8yu6DCqBqv9zv4F6_j6M,41
1250
+ x_ipe-1.0.21.dist-info/licenses/LICENSE,sha256=8lS-M88bBvSI9_8kauYvQRu03WEMnj1Q5KoxOFKFnhc,1062
1251
+ x_ipe-1.0.21.dist-info/RECORD,,
File without changes