ima-claude 2.20.0 → 2.26.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.
Files changed (80) hide show
  1. package/README.md +74 -9
  2. package/dist/cli.js +2 -1
  3. package/package.json +1 -1
  4. package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
  5. package/plugins/ima-claude/agents/explorer.md +29 -15
  6. package/plugins/ima-claude/agents/implementer.md +58 -13
  7. package/plugins/ima-claude/agents/memory.md +19 -19
  8. package/plugins/ima-claude/agents/reviewer.md +84 -34
  9. package/plugins/ima-claude/agents/tester.md +59 -16
  10. package/plugins/ima-claude/agents/wp-developer.md +66 -21
  11. package/plugins/ima-claude/hooks/bootstrap.sh +42 -44
  12. package/plugins/ima-claude/hooks/prompt_coach_digest.md +14 -17
  13. package/plugins/ima-claude/hooks/prompt_coach_system.md +10 -12
  14. package/plugins/ima-claude/personalities/README.md +17 -6
  15. package/plugins/ima-claude/personalities/enable-efficient.md +61 -0
  16. package/plugins/ima-claude/personalities/enable-terse.md +71 -0
  17. package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +35 -71
  18. package/plugins/ima-claude/skills/architect/SKILL.md +54 -168
  19. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +41 -94
  20. package/plugins/ima-claude/skills/design-to-code/SKILL.md +43 -78
  21. package/plugins/ima-claude/skills/discourse/SKILL.md +79 -194
  22. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +41 -103
  23. package/plugins/ima-claude/skills/docs-organize/SKILL.md +63 -203
  24. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +90 -200
  25. package/plugins/ima-claude/skills/espocrm/SKILL.md +14 -23
  26. package/plugins/ima-claude/skills/espocrm-api/SKILL.md +79 -192
  27. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +33 -237
  28. package/plugins/ima-claude/skills/gh-cli/SKILL.md +26 -65
  29. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +71 -104
  30. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +32 -22
  31. package/plugins/ima-claude/skills/ima-brand/SKILL.md +18 -23
  32. package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +68 -179
  33. package/plugins/ima-claude/skills/ima-doc2pdf/SKILL.md +32 -102
  34. package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +38 -63
  35. package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +69 -114
  36. package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +16 -22
  37. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +21 -37
  38. package/plugins/ima-claude/skills/ima-git/SKILL.md +81 -0
  39. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +39 -120
  40. package/plugins/ima-claude/skills/jquery/SKILL.md +107 -233
  41. package/plugins/ima-claude/skills/js-fp/SKILL.md +75 -296
  42. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +52 -162
  43. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +47 -270
  44. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +55 -209
  45. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +59 -204
  46. package/plugins/ima-claude/skills/livecanvas/SKILL.md +19 -32
  47. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +92 -162
  48. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +32 -64
  49. package/plugins/ima-claude/skills/mcp-gitea/SKILL.md +98 -188
  50. package/plugins/ima-claude/skills/mcp-github/SKILL.md +60 -124
  51. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +1 -177
  52. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +58 -115
  53. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +32 -87
  54. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +54 -80
  55. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +40 -63
  56. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +75 -116
  57. package/plugins/ima-claude/skills/php-authnet/SKILL.md +32 -65
  58. package/plugins/ima-claude/skills/php-fp/SKILL.md +50 -129
  59. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +25 -73
  60. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +103 -463
  61. package/plugins/ima-claude/skills/playwright/SKILL.md +69 -220
  62. package/plugins/ima-claude/skills/prompt-starter/SKILL.md +33 -83
  63. package/plugins/ima-claude/skills/prompt-starter/references/code-review.md +38 -0
  64. package/plugins/ima-claude/skills/py-fp/SKILL.md +78 -384
  65. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +54 -255
  66. package/plugins/ima-claude/skills/quickstart/SKILL.md +7 -11
  67. package/plugins/ima-claude/skills/rails/SKILL.md +63 -184
  68. package/plugins/ima-claude/skills/resume-session/SKILL.md +14 -35
  69. package/plugins/ima-claude/skills/rg/SKILL.md +61 -146
  70. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +66 -163
  71. package/plugins/ima-claude/skills/save-session/SKILL.md +10 -39
  72. package/plugins/ima-claude/skills/scorecard/SKILL.md +42 -40
  73. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +42 -71
  74. package/plugins/ima-claude/skills/skill-creator/SKILL.md +79 -250
  75. package/plugins/ima-claude/skills/task-master/SKILL.md +11 -31
  76. package/plugins/ima-claude/skills/task-planner/SKILL.md +44 -153
  77. package/plugins/ima-claude/skills/task-runner/SKILL.md +61 -143
  78. package/plugins/ima-claude/skills/unit-testing/SKILL.md +59 -134
  79. package/plugins/ima-claude/skills/wp-ddev/SKILL.md +38 -120
  80. package/plugins/ima-claude/skills/wp-local/SKILL.md +26 -108
@@ -5,184 +5,113 @@ description: "Test workflow orchestration — decision tree routing to domain sk
5
5
 
6
6
  # Unit Testing - Orchestration Skill
7
7
 
8
- **"Test pure core, not impure shell. FP makes testing easy."**
8
+ Pure functions are trivially testable. Hard-to-test code is a design problem, not a test setup problem.
9
9
 
10
- This skill orchestrates test workflows by routing to the right domain skills. It does NOT duplicate domain-specific testing patterns — it coordinates them.
10
+ **Core rules:**
11
+ - Extract pure logic — separate decisions from effects
12
+ - Test behavior, not implementation
13
+ - Bottom-heavy pyramid: many unit, few integration, fewer E2E
14
+ - Mock only boundaries (DB, network, filesystem), not your own code
11
15
 
12
- ## Core Philosophy
13
-
14
- Pure functions are trivially testable. If something is hard to test, the problem is the code design, not the test setup.
15
-
16
- 1. **Extract pure logic** — separate decisions from effects
17
- 2. **Test behavior, not implementation** — what it does, not how
18
- 3. **Bottom-heavy pyramid** — many unit tests, few integration, fewer E2E
19
- 4. **Minimal mocking** — mock boundaries (DB, network, filesystem), not your own code
20
-
21
- ## Decision Tree: Which Skills to Use
16
+ ## Decision Tree: Which Skills
22
17
 
23
18
  ```
24
19
  What are you testing?
25
20
  ├── WordPress PHP plugin/theme?
26
21
  │ → phpunit-wp (primary) + php-fp + php-fp-wordpress
27
- │ → References: php-fp/references/testing-patterns.md
28
- │ php-fp-wordpress/references/testing-strategy.md
29
22
 
30
23
  ├── General PHP (non-WordPress)?
31
24
  │ → php-fp (primary)
32
- │ → References: php-fp/references/testing-patterns.md
33
25
 
34
26
  ├── JavaScript/TypeScript?
35
- │ ├── React components?
36
- → js-fp-react + js-fp
37
- ├── Vue components?
38
- │ │ → js-fp-vue + js-fp
39
- │ │ → References: js-fp-vue/references/testing.md
40
- │ └── General JS/TS?
41
- │ → js-fp (primary)
42
- │ → References: js-fp/references/testing-patterns.md
27
+ │ ├── React components? → js-fp-react + js-fp
28
+ ├── Vue components? → js-fp-vue + js-fp
29
+ └── General JS/TS? → js-fp (primary)
43
30
 
44
- ├── End-to-end / browser tests?
45
- │ → playwright (primary)
31
+ ├── End-to-end / browser? → playwright (primary)
46
32
 
47
33
  └── Unknown / mixed?
48
- Start with functional-programmer principles
49
- → Route to domain skill once context is clear
34
+ → functional-programmer → route to domain skill once clear
50
35
  ```
51
36
 
52
- **Always apply:** `functional-programmer` principles (pure functions, composition, immutability).
53
-
54
- ## Workflow: Adding Tests to Existing Code
37
+ ## Workflow: Adding Tests
55
38
 
56
- ### Step 1: Analyze
39
+ **Step 1 Analyze:** Read code under test. Identify pure functions vs impure boundaries. Map dependencies (DB, filesystem, network, global state).
57
40
 
58
- - Read the code under test
59
- - Identify pure functions vs impure boundaries
60
- - Map dependencies: what does this code touch? (DB, filesystem, network, global state)
61
-
62
- ### Step 2: Classify
41
+ **Step 2 Classify:**
63
42
 
64
43
  | Code Type | Test Type | Speed | Mocking |
65
44
  |-----------|-----------|-------|---------|
66
- | Pure function (no side effects) | Unit test | Fast (<10ms) | None |
67
- | Function with injected deps | Unit test | Fast | Stub the deps |
68
- | WordPress hook/filter callback | Unit or integration | Medium | Mock WP functions |
69
- | API endpoint handler | Integration test | Medium | Mock external services |
70
- | Full user workflow | E2E test | Slow | None (real browser) |
71
-
72
- ### Step 3: Structure
73
-
74
- Follow project conventions for test file location:
75
- - PHP: `tests/Unit/`, `tests/Integration/` (mirror `src/` structure)
76
- - JS/TS: colocated `*.test.ts` or `__tests__/` directory
45
+ | Pure function | Unit | Fast (<10ms) | None |
46
+ | Injected deps | Unit | Fast | Stub deps |
47
+ | WP hook/filter | Unit or integration | Medium | Mock WP functions |
48
+ | API endpoint | Integration | Medium | Mock external services |
49
+ | Full user workflow | E2E | Slow | None (real browser) |
50
+
51
+ **Step 3 Structure:**
52
+ - PHP: `tests/Unit/`, `tests/Integration/` (mirror `src/`)
53
+ - JS/TS: colocated `*.test.ts` or `__tests__/`
77
54
  - E2E: `tests/e2e/` or `e2e/`
78
55
 
79
- ### Step 4: Write
56
+ **Step 4 Write:** `Arrange → Act → Assert` (one behavior per test)
57
+ - Test name = behavior description: `it('returns empty array when no items match filter')`
58
+ - One assertion per concept; no logic in tests; minimal test data
80
59
 
81
- Apply the domain skill's patterns. General principles:
60
+ **Step 5 Verify:** Run suite, all green, no unexplained skips, coverage meets floor.
82
61
 
83
- ```
84
- Arrange → Act → Assert (one behavior per test)
85
- ```
86
-
87
- - **Test name = behavior description**: `it('returns empty array when no items match filter')`
88
- - **One assertion per concept** (multiple `expect` calls are fine if they verify one behavior)
89
- - **No logic in tests**: no conditionals, no loops, no try/catch
90
- - **Test data is minimal**: only include fields relevant to the behavior under test
91
-
92
- ### Step 5: Verify
93
-
94
- - Run the test suite: `composer test`, `npm test`, `npx vitest`, etc.
95
- - All tests pass (green)
96
- - No skipped or pending tests without a documented reason
97
- - Coverage meets project floor (if configured)
98
-
99
- ## Workflow: TDD (Test-Driven Development)
100
-
101
- ### Red-Green-Refactor
62
+ ## TDD: Red-Green-Refactor
102
63
 
103
64
  ```
104
- 1. RED — Write a failing test for the next behavior
105
- 2. GREEN — Write the minimum code to make it pass
106
- 3. REFACTOR — Clean up while keeping tests green
65
+ 1. RED — Write failing test for next behavior
66
+ 2. GREEN — Minimum code to pass
67
+ 3. REFACTOR — Clean up, keep green
107
68
  ```
108
69
 
109
- ### TDD with Pure Functions (Ideal Case)
110
-
111
- Pure functions + TDD = fast feedback loops. No setup, no teardown, no mocking.
112
-
113
- ```
114
- Test: add(2, 3) === 5
115
- Code: const add = (a, b) => a + b
116
- Done.
117
- ```
118
-
119
- ### TDD for Impure Boundaries
120
-
121
- When TDD hits an impure boundary (DB, network, filesystem):
122
-
123
- 1. **Define the interface** — what does the boundary need to provide?
124
- 2. **Stub the boundary** — test against the interface, not the implementation
125
- 3. **Wire up later** — connect the real implementation after the pure logic is tested
126
-
127
- ### When TDD Slows You Down
128
-
129
- TDD is a tool, not a religion. Skip it when:
130
- - Exploring/prototyping (you'll throw the code away)
131
- - The implementation is trivial and obvious
132
- - You're writing glue code with no logic
133
-
134
- See `references/tdd-workflow.md` for detailed mechanics.
70
+ Skip TDD when: exploring/prototyping, trivial/obvious implementation, pure glue code.
135
71
 
136
72
  ## Mock Decision Tree
137
73
 
138
74
  ```
139
75
  Is the dependency hard to test?
140
- ├── No (pure function, simple data) → Don't mock. Test directly.
141
- ├── Yes, but I own the code
76
+ ├── No → Don't mock. Test directly.
77
+ ├── Yes, I own the code
142
78
  │ ├── Can I extract pure logic? → Extract it. Test the pure part.
143
79
  │ └── Can I inject the dependency? → Inject it. Pass a stub.
144
- └── Yes, external service (DB, API, filesystem, time)
145
- → Mock it. Use the simplest mock type that works.
80
+ └── Yes, external (DB, API, filesystem, time) → Mock it.
146
81
  ```
147
82
 
148
- ### Mock Types (Simplest First)
149
-
150
- | Type | What it does | When to use |
151
- |------|-------------|-------------|
152
- | **Stub** | Returns canned data | Most cases. Default choice. |
153
- | **Spy** | Records calls for verification | When you need to verify a call was made |
154
- | **Fake** | Working simplified implementation | Complex interfaces (in-memory DB) |
155
- | **Full mock** | Strict expectations on calls | Almost never. Couples tests to implementation. |
156
-
157
- See `references/mock-patterns.md` for language-specific examples and anti-patterns.
83
+ | Mock Type | What it does | When |
84
+ |-----------|-------------|------|
85
+ | Stub | Returns canned data | Default choice |
86
+ | Spy | Records calls | When verifying a call was made |
87
+ | Fake | Working simplified impl | Complex interfaces (in-memory DB) |
88
+ | Full mock | Strict call expectations | Almost never |
158
89
 
159
- ## Test Quality Checklist
160
-
161
- Before considering tests "done":
90
+ ## Quality Checklist
162
91
 
163
92
  - [ ] Tests verify behavior, not implementation
164
- - [ ] Each test has a descriptive name explaining the scenario
165
- - [ ] No test depends on another test's state (isolation)
166
- - [ ] No flaky signals: no timers, no real network, no filesystem in unit tests
93
+ - [ ] Each test name describes the scenario
94
+ - [ ] No test depends on another's state
95
+ - [ ] No timers, real network, or filesystem in unit tests
167
96
  - [ ] Pure functions tested without mocking
168
- - [ ] Mocks used only at impure boundaries
169
- - [ ] Edge cases covered: empty input, null/undefined, boundary values
97
+ - [ ] Mocks only at impure boundaries
98
+ - [ ] Edge cases: empty input, null/undefined, boundary values
170
99
  - [ ] Error paths tested (not just happy path)
171
- - [ ] Test runs fast (unit suite < 10s for most projects)
100
+ - [ ] Unit suite runs < 10s
172
101
 
173
102
  ## Anti-Patterns
174
103
 
175
- | Anti-Pattern | Problem | Fix |
176
- |-------------|---------|-----|
177
- | Testing implementation details | Breaks on refactor | Test behavior/output instead |
178
- | Mocking everything | Tests prove nothing | Extract pure logic, mock only boundaries |
179
- | Giant test setup | Hard to understand | Simplify code under test or use factories |
180
- | Copy-paste test bodies | Maintenance nightmare | Use parameterized/table-driven tests |
181
- | Testing framework behavior | Wastes time | Trust the framework |
182
- | 100% coverage target | Diminishing returns | Set a floor, not a ceiling |
183
- | `sleep()` in tests | Flaky, slow | Use deterministic waits or fix the design |
104
+ | Anti-Pattern | Fix |
105
+ |-------------|-----|
106
+ | Testing implementation details | Test behavior/output instead |
107
+ | Mocking everything | Extract pure logic, mock only boundaries |
108
+ | Giant test setup | Simplify code under test or use factories |
109
+ | Copy-paste test bodies | Use parameterized/table-driven tests |
110
+ | Testing framework behavior | Trust the framework |
111
+ | 100% coverage target | Set a floor, not a ceiling |
112
+ | `sleep()` in tests | Use deterministic waits or fix the design |
184
113
 
185
- ## Integration: Domain Skill Reference
114
+ ## Domain Skill Reference
186
115
 
187
116
  | Context | Primary Skill | Reference Files |
188
117
  |---------|--------------|-----------------|
@@ -192,7 +121,3 @@ Before considering tests "done":
192
121
  | Vue.js | `js-fp-vue` | `js-fp-vue/references/testing.md` |
193
122
  | React | `js-fp-react` | `js-fp/references/testing-patterns.md` |
194
123
  | E2E / Browser | `playwright` | (self-contained skill) |
195
-
196
- ## The Final Word
197
-
198
- *"If it's hard to test, it's hard to use. Testability is a design signal, not a chore. Extract the pure, inject the impure, and the tests write themselves."*
@@ -7,34 +7,24 @@ description: "Run WordPress WP-CLI commands in DDEV environments. Database queri
7
7
 
8
8
  Execute WP-CLI commands in DDEV WordPress environments. Zero configuration — just be in a DDEV project directory.
9
9
 
10
- ## Quick Start
11
-
12
- **Prerequisites**: Docker + DDEV v1.25+ installed.
10
+ **Prerequisites**: Docker + DDEV v1.25+
13
11
 
14
12
  ```bash
15
- # Start your DDEV project
16
13
  ddev start
17
-
18
- # Run WP-CLI commands directly
19
14
  ddev wp plugin list
20
- ddev wp user list
21
15
  ddev wp db query "SELECT * FROM wp_posts LIMIT 5"
22
-
23
- # View project info (URLs, ports, credentials)
24
- ddev describe
16
+ ddev describe # URLs, ports, credentials
25
17
  ```
26
18
 
27
19
  ## How It Works
28
20
 
29
- 1. DDEV auto-detects `.ddev/config.yaml` in project directory
30
- 2. WP-CLI runs inside the web container with correct PHP, MySQL, and WordPress paths
31
- 3. No environment pollution host session stays clean
32
- 4. No UUIDs, no socket paths, no wrapper scripts
21
+ - DDEV auto-detects `.ddev/config.yaml`
22
+ - WP-CLI runs inside web container with correct PHP, MySQL, WordPress paths
23
+ - No host environment pollution, no UUIDs, no socket paths
33
24
 
34
25
  ## Common Commands
35
26
 
36
- ### Database Operations
37
- `ddev wp db query <sql>` · `ddev wp db export [file]` · `ddev wp db import <file>` · `ddev wp search-replace <old> <new>`
27
+ ### Database
38
28
  ```bash
39
29
  ddev wp db query "SELECT * FROM wp_users"
40
30
  ddev wp db export dump.sql
@@ -43,29 +33,23 @@ ddev wp search-replace 'old.com' 'new.com' --dry-run
43
33
  ddev wp search-replace 'old.com' 'new.com' --all-tables
44
34
  ```
45
35
 
46
- ### Plugin Management
47
- `ddev wp plugin list` · `ddev wp plugin activate <plugin>` · `ddev wp plugin deactivate <plugin>` · `ddev wp plugin install <plugin> [--activate]`
36
+ ### Plugins
48
37
  ```bash
49
- ddev wp plugin list
50
38
  ddev wp plugin list --status=active --format=json
51
39
  ddev wp plugin activate my-plugin
52
- ddev wp plugin deactivate my-plugin
53
40
  ddev wp plugin install contact-form-7 --activate
54
41
  ddev wp plugin is-installed woocommerce && echo "yes"
55
42
  ```
56
43
 
57
- ### User Operations
58
- `ddev wp user list` · `ddev wp user create <login> <email> [--role=<role>]` · `ddev wp user update <user> [--field=value]`
44
+ ### Users
59
45
  ```bash
60
- ddev wp user list
61
46
  ddev wp user list --role=administrator --format=table
62
47
  ddev wp user create testuser test@example.com --role=editor
63
48
  ddev wp user update 1 --display_name="Admin User"
64
49
  ddev wp user add-role 2 editor
65
50
  ```
66
51
 
67
- ### Theme Operations
68
- `ddev wp theme list` · `ddev wp theme activate <theme>` · `ddev wp theme status <theme>`
52
+ ### Themes
69
53
  ```bash
70
54
  ddev wp theme list
71
55
  ddev wp theme activate twentytwentyfour
@@ -73,16 +57,13 @@ ddev wp theme status flavor
73
57
  ```
74
58
 
75
59
  ### Cache & Transients
76
- `ddev wp cache flush` · `ddev wp transient delete --all` · `ddev wp transient get <key>`
77
60
  ```bash
78
61
  ddev wp cache flush
79
62
  ddev wp transient delete --all
80
63
  ddev wp transient get my_transient_key
81
- ddev wp transient list --format=table
82
64
  ```
83
65
 
84
66
  ### Options
85
- `ddev wp option get <key>` · `ddev wp option update <key> <value>` · `ddev wp option list [--search=<pattern>]`
86
67
  ```bash
87
68
  ddev wp option get siteurl
88
69
  ddev wp option update blogname "New Site Name"
@@ -90,20 +71,17 @@ ddev wp option list --search="woocommerce_*" --format=table
90
71
  ddev wp option delete my_old_option
91
72
  ```
92
73
 
93
- ### Post & Content
94
- `ddev wp post list [--post_type=<type>]` · `ddev wp post create` · `ddev wp post update <id>` · `ddev wp post delete <id>`
74
+ ### Posts
95
75
  ```bash
96
76
  ddev wp post list --post_type=page --format=table
97
77
  ddev wp post list --post_status=draft --fields=ID,post_title
98
78
  ddev wp post create --post_type=post --post_title="Test" --post_status=publish
99
79
  ddev wp post update 42 --post_title="Updated Title"
100
80
  ddev wp post delete 42 --force
101
- ddev wp post meta get 42 _thumbnail_id
102
81
  ddev wp post meta update 42 custom_field "new value"
103
82
  ```
104
83
 
105
- ### Taxonomy & Terms
106
- `ddev wp term list <taxonomy>` · `ddev wp term create <taxonomy> <term>` · `ddev wp term update <taxonomy> <term-id>`
84
+ ### Taxonomy
107
85
  ```bash
108
86
  ddev wp term list category --format=table
109
87
  ddev wp term create category "New Category" --slug=new-category
@@ -112,24 +90,19 @@ ddev wp term delete category 5
112
90
  ```
113
91
 
114
92
  ### Menu
115
- `ddev wp menu list` · `ddev wp menu item list <menu>` · `ddev wp menu item add-post <menu> <post-id>`
116
93
  ```bash
117
94
  ddev wp menu list --format=table
118
- ddev wp menu item list primary-menu
119
95
  ddev wp menu item add-post primary-menu 42
120
96
  ddev wp menu item add-custom primary-menu "Link" https://example.com
121
97
  ```
122
98
 
123
- ### Rewrite Rules
124
- `ddev wp rewrite flush` · `ddev wp rewrite list` · `ddev wp rewrite structure <structure>`
99
+ ### Rewrite
125
100
  ```bash
126
101
  ddev wp rewrite flush
127
- ddev wp rewrite list --format=csv
128
102
  ddev wp rewrite structure '/%postname%/'
129
103
  ```
130
104
 
131
105
  ### Scaffold
132
- `ddev wp scaffold plugin <slug>` · `ddev wp scaffold child-theme <slug>` · `ddev wp scaffold post-type <slug>`
133
106
  ```bash
134
107
  ddev wp scaffold plugin my-plugin --plugin_name="My Plugin"
135
108
  ddev wp scaffold post-type product --plugin=my-plugin
@@ -137,128 +110,73 @@ ddev wp scaffold taxonomy genre --post_types=product --plugin=my-plugin
137
110
  ddev wp scaffold child-theme flavor-child --parent_theme=flavor
138
111
  ```
139
112
 
140
- ### Eval & Shell
141
- `ddev wp eval <code>` · `ddev wp eval-file <file>`
113
+ ### Eval
142
114
  ```bash
143
115
  ddev wp eval "echo home_url();"
144
116
  ddev wp eval "var_dump(wp_get_current_user());"
145
- ddev wp eval "echo get_option('active_plugins') | print_r;"
146
117
  ddev wp eval-file test-script.php
147
118
  ```
148
119
 
149
120
  ## DDEV Project Commands
150
121
 
151
122
  ```bash
152
- # Lifecycle
153
123
  ddev start # Start containers
154
124
  ddev stop # Stop (preserves database)
155
125
  ddev restart # Restart after config changes
156
-
157
- # Information
158
126
  ddev describe # URLs, ports, DB credentials, PHP version
159
- ddev list # All DDEV projects on this machine
160
-
161
- # Shell & Exec
127
+ ddev list # All DDEV projects on machine
162
128
  ddev ssh # Interactive shell in web container
163
- ddev exec ls -la # Run any command in web container
164
-
165
- # Logs
129
+ ddev exec ls -la # Run command in web container
166
130
  ddev logs # Web server logs
167
- ddev logs -s db # Database server logs
168
-
169
- # Launch
131
+ ddev logs -s db # Database logs
170
132
  ddev launch # Open site in browser
171
133
  ddev launch wp-admin/ # Open WP admin
172
134
  ```
173
135
 
174
136
  ## IMA Addon Commands
175
137
 
176
- Commands provided by the `ima-ddev-wordpress` addon:
177
-
178
138
  ```bash
179
- # First-time bootstrap (idempotent — safe to re-run)
180
- ddev setup
181
-
182
- # Import wp-content assets from WPE site archive
183
- ddev import-assets ~/path/to/extracted-archive
184
-
185
- # Import database dump
186
- ddev import-db --file=~/path/to/dump.sql
187
-
188
- # Update the addon
189
- ddev add-on update ima-ddev-wordpress
139
+ ddev setup # First-time bootstrap (idempotent)
140
+ ddev import-assets ~/path/to/extracted-archive # Import wp-content from WPE archive
141
+ ddev import-db --file=~/path/to/dump.sql # Import database dump
142
+ ddev add-on update ima-ddev-wordpress # Update addon
190
143
  ```
191
144
 
192
145
  ## Supply Chain Security
193
146
 
194
- Always use `ddev npm`, `ddev composer` instead of bare host commands. Container isolation prevents compromised dependencies from accessing host SSH keys, env vars, and other projects.
147
+ Use `ddev npm`/`ddev composer` never bare host commands. Container isolation prevents compromised deps from accessing host SSH keys, env vars, other projects.
195
148
 
196
- | Instead of | Use | Why |
197
- |---|---|---|
198
- | `npm install` | `ddev npm install` | Container-isolated |
199
- | `composer install` | `ddev composer install` | Container-isolated |
200
- | `npm run composer:dev` | `ddev npm run composer:dev` | Container-isolated |
149
+ | Instead of | Use |
150
+ |---|---|
151
+ | `npm install` | `ddev npm install` |
152
+ | `composer install` | `ddev composer install` |
153
+ | `npm run composer:dev` | `ddev npm run composer:dev` |
201
154
 
202
- **Exception:** `npm run deploy` stays on host — needs SSH access for WP Engine push.
155
+ **Exception**: `npm run deploy` stays on host — needs SSH for WP Engine push.
203
156
 
204
157
  ## Global Flags
205
158
 
206
- These flags work with most WP-CLI commands:
207
-
208
159
  | Flag | Description |
209
160
  |---|---|
210
- | `--format=<format>` | Output: `table`, `csv`, `json`, `yaml`, `count`, `ids` |
211
- | `--fields=<fields>` | Comma-separated columns to display |
161
+ | `--format=<format>` | `table`, `csv`, `json`, `yaml`, `count`, `ids` |
162
+ | `--fields=<fields>` | Comma-separated columns |
212
163
  | `--quiet` | Suppress informational messages |
213
- | `--skip-themes` | Skip loading themes (faster execution) |
214
- | `--skip-plugins` | Skip loading all plugins (debug conflicts) |
215
- | `--skip-plugins=<plugin>` | Skip loading specific plugin |
164
+ | `--skip-themes` | Skip loading themes |
165
+ | `--skip-plugins` | Skip all plugins (debug conflicts) |
166
+ | `--skip-plugins=<plugin>` | Skip specific plugin |
216
167
  | `--debug` | Show debug output |
217
- | `--user=<id\|login>` | Run command as specific user |
218
-
219
- ## Finding More Commands
220
-
221
- The 12 categories above cover ~90% of daily dev usage. For everything else:
168
+ | `--user=<id\|login>` | Run as specific user |
222
169
 
223
170
  ```bash
224
171
  ddev wp help
225
172
  ddev wp help plugin
226
- ddev wp help post list
227
173
  ```
228
174
 
229
- See [`references/wp-cli-reference.md`](references/wp-cli-reference.md) for a comprehensive reference and [`references/ddev-commands.md`](references/ddev-commands.md) for DDEV-specific commands.
230
-
231
- ## Daily Workflow
232
-
233
- ```bash
234
- # Start your day
235
- ddev start
236
-
237
- # Develop — code changes auto-reflected via bind mounts
238
- # Test
239
- ddev wp plugin activate my-plugin
240
- ddev wp cache flush
241
- ddev launch
242
-
243
- # Stop when done
244
- ddev stop
245
- ```
246
-
247
- ## Integration
248
-
249
- **With php-fp-wordpress**: Test plugins during development, verify security functions, check database operations.
250
-
251
- **With js-fp-wordpress**: Test script enqueuing, verify AJAX endpoints, check jQuery availability.
252
-
253
- ```bash
254
- # Develop plugin with php-fp-wordpress patterns, test with DDEV
255
- ddev wp plugin activate my-new-plugin
256
- ddev wp eval "var_dump(current_user_can('edit_posts'));"
257
- ```
175
+ See [`references/wp-cli-reference.md`](references/wp-cli-reference.md) and [`references/ddev-commands.md`](references/ddev-commands.md).
258
176
 
259
177
  ## Quality Gates
260
178
 
261
- Before running destructive commands:
262
- - Correct project: `ddev describe` to verify you're in the right DDEV project
263
- - Backup if needed: `ddev export-db --file=backup.sql.gz` for database modifications
264
- - Containers running: `ddev start` (DDEV will tell you if already running)
179
+ Before destructive commands:
180
+ - Correct project: `ddev describe`
181
+ - Backup if needed: `ddev export-db --file=backup.sql.gz`
182
+ - Containers running: `ddev start`