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.
- package/README.md +74 -9
- package/dist/cli.js +2 -1
- package/package.json +1 -1
- package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
- package/plugins/ima-claude/agents/explorer.md +29 -15
- package/plugins/ima-claude/agents/implementer.md +58 -13
- package/plugins/ima-claude/agents/memory.md +19 -19
- package/plugins/ima-claude/agents/reviewer.md +84 -34
- package/plugins/ima-claude/agents/tester.md +59 -16
- package/plugins/ima-claude/agents/wp-developer.md +66 -21
- package/plugins/ima-claude/hooks/bootstrap.sh +42 -44
- package/plugins/ima-claude/hooks/prompt_coach_digest.md +14 -17
- package/plugins/ima-claude/hooks/prompt_coach_system.md +10 -12
- package/plugins/ima-claude/personalities/README.md +17 -6
- package/plugins/ima-claude/personalities/enable-efficient.md +61 -0
- package/plugins/ima-claude/personalities/enable-terse.md +71 -0
- package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +35 -71
- package/plugins/ima-claude/skills/architect/SKILL.md +54 -168
- package/plugins/ima-claude/skills/compound-bridge/SKILL.md +41 -94
- package/plugins/ima-claude/skills/design-to-code/SKILL.md +43 -78
- package/plugins/ima-claude/skills/discourse/SKILL.md +79 -194
- package/plugins/ima-claude/skills/discourse-admin/SKILL.md +41 -103
- package/plugins/ima-claude/skills/docs-organize/SKILL.md +63 -203
- package/plugins/ima-claude/skills/ember-discourse/SKILL.md +90 -200
- package/plugins/ima-claude/skills/espocrm/SKILL.md +14 -23
- package/plugins/ima-claude/skills/espocrm-api/SKILL.md +79 -192
- package/plugins/ima-claude/skills/functional-programmer/SKILL.md +33 -237
- package/plugins/ima-claude/skills/gh-cli/SKILL.md +26 -65
- package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +71 -104
- package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +32 -22
- package/plugins/ima-claude/skills/ima-brand/SKILL.md +18 -23
- package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +68 -179
- package/plugins/ima-claude/skills/ima-doc2pdf/SKILL.md +32 -102
- package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +38 -63
- package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +69 -114
- package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +16 -22
- package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +21 -37
- package/plugins/ima-claude/skills/ima-git/SKILL.md +81 -0
- package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +39 -120
- package/plugins/ima-claude/skills/jquery/SKILL.md +107 -233
- package/plugins/ima-claude/skills/js-fp/SKILL.md +75 -296
- package/plugins/ima-claude/skills/js-fp-api/SKILL.md +52 -162
- package/plugins/ima-claude/skills/js-fp-react/SKILL.md +47 -270
- package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +55 -209
- package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +59 -204
- package/plugins/ima-claude/skills/livecanvas/SKILL.md +19 -32
- package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +92 -162
- package/plugins/ima-claude/skills/mcp-context7/SKILL.md +32 -64
- package/plugins/ima-claude/skills/mcp-gitea/SKILL.md +98 -188
- package/plugins/ima-claude/skills/mcp-github/SKILL.md +60 -124
- package/plugins/ima-claude/skills/mcp-memory/SKILL.md +1 -177
- package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +58 -115
- package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +32 -87
- package/plugins/ima-claude/skills/mcp-serena/SKILL.md +54 -80
- package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +40 -63
- package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +75 -116
- package/plugins/ima-claude/skills/php-authnet/SKILL.md +32 -65
- package/plugins/ima-claude/skills/php-fp/SKILL.md +50 -129
- package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +25 -73
- package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +103 -463
- package/plugins/ima-claude/skills/playwright/SKILL.md +69 -220
- package/plugins/ima-claude/skills/prompt-starter/SKILL.md +33 -83
- package/plugins/ima-claude/skills/prompt-starter/references/code-review.md +38 -0
- package/plugins/ima-claude/skills/py-fp/SKILL.md +78 -384
- package/plugins/ima-claude/skills/quasar-fp/SKILL.md +54 -255
- package/plugins/ima-claude/skills/quickstart/SKILL.md +7 -11
- package/plugins/ima-claude/skills/rails/SKILL.md +63 -184
- package/plugins/ima-claude/skills/resume-session/SKILL.md +14 -35
- package/plugins/ima-claude/skills/rg/SKILL.md +61 -146
- package/plugins/ima-claude/skills/ruby-fp/SKILL.md +66 -163
- package/plugins/ima-claude/skills/save-session/SKILL.md +10 -39
- package/plugins/ima-claude/skills/scorecard/SKILL.md +42 -40
- package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +42 -71
- package/plugins/ima-claude/skills/skill-creator/SKILL.md +79 -250
- package/plugins/ima-claude/skills/task-master/SKILL.md +11 -31
- package/plugins/ima-claude/skills/task-planner/SKILL.md +44 -153
- package/plugins/ima-claude/skills/task-runner/SKILL.md +61 -143
- package/plugins/ima-claude/skills/unit-testing/SKILL.md +59 -134
- package/plugins/ima-claude/skills/wp-ddev/SKILL.md +38 -120
- package/plugins/ima-claude/skills/wp-local/SKILL.md +26 -108
|
@@ -5,23 +5,17 @@ description: "Headless phase files and standards for Jira-triggered agentic cont
|
|
|
5
5
|
|
|
6
6
|
# Agentic Workflows
|
|
7
7
|
|
|
8
|
-
Headless workflow system for Jira-triggered content creation. Not
|
|
8
|
+
Headless workflow system for Jira-triggered content creation. Not interactive. External Node.js agent-consumer reads these files and composes them into `claude -p` prompts.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## What This Is
|
|
10
|
+
## Consumer Flow
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
1. Read Jira issue → identify content type and source material
|
|
13
|
+
2. Select matching recipe (e.g., `webinar-summary`)
|
|
14
|
+
3. Compose prompt: phase file + recipe overrides + standards + previous phase output + source material
|
|
15
|
+
4. Run `claude -p` with that prompt
|
|
16
|
+
5. Parse YAML frontmatter from output → advance to next phase
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
2. Selects the matching recipe (e.g., `webinar-summary`)
|
|
18
|
-
3. Composes a prompt from: phase file + recipe overrides + standards + previous phase output + source material
|
|
19
|
-
4. Runs `claude -p` with that prompt
|
|
20
|
-
5. Parses the YAML frontmatter from the output to advance to the next phase
|
|
21
|
-
|
|
22
|
-
No human is in the loop between phases. Each phase is a single, self-contained `claude -p` call.
|
|
23
|
-
|
|
24
|
-
---
|
|
18
|
+
No human in loop between phases. Each phase is a stateless, self-contained `claude -p` call.
|
|
25
19
|
|
|
26
20
|
## Directory Layout
|
|
27
21
|
|
|
@@ -38,60 +32,37 @@ references/
|
|
|
38
32
|
outline-format.md # Structural rules for outlines
|
|
39
33
|
draft-format.md # Structural rules for drafts
|
|
40
34
|
templates/ # Production templates (local-only, not committed)
|
|
41
|
-
avada-construction-guide.md
|
|
42
|
-
avada-webinar-example.txt
|
|
43
|
-
cta-block-catalog.md
|
|
44
|
-
espo-email-preparation.md
|
|
45
|
-
webinar-recap-email-espo.html
|
|
46
|
-
webinar-reminder-email-espo.html
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Recipes live in `references/workflows/` organized by content family:
|
|
50
|
-
|
|
51
|
-
```
|
|
35
|
+
avada-construction-guide.md
|
|
36
|
+
avada-webinar-example.txt
|
|
37
|
+
cta-block-catalog.md
|
|
38
|
+
espo-email-preparation.md
|
|
39
|
+
webinar-recap-email-espo.html
|
|
40
|
+
webinar-reminder-email-espo.html
|
|
52
41
|
workflows/
|
|
53
42
|
editorial/
|
|
54
43
|
webinar-summary.md # Webinar → blog post recipe
|
|
55
44
|
```
|
|
56
45
|
|
|
57
|
-
Each recipe declares which standards files to inject and provides content-type-specific overrides for each phase. The consumer reads these files and composes them into prompts.
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
46
|
## Phase Sequence
|
|
62
47
|
|
|
63
48
|
```
|
|
64
49
|
gather → outline → draft → review → deliver
|
|
65
50
|
```
|
|
66
51
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## How the Consumer Composes Prompts
|
|
72
|
-
|
|
73
|
-
For each phase, the consumer builds a prompt like:
|
|
52
|
+
## Prompt Composition (per phase)
|
|
74
53
|
|
|
75
54
|
```
|
|
76
|
-
[phase file contents]
|
|
77
|
-
[recipe overrides for phase]
|
|
78
|
-
[standards files declared by recipe]
|
|
79
|
-
[template files declared by recipe]
|
|
55
|
+
[phase file contents] ← system prompt
|
|
56
|
+
[recipe overrides for phase] ← content-type-specific rules (optional)
|
|
57
|
+
[standards files declared by recipe] ← quality criteria
|
|
58
|
+
[template files declared by recipe] ← production markup (deliver phase only)
|
|
80
59
|
---
|
|
81
|
-
Previous phase output:
|
|
82
|
-
[YAML + markdown from previous phase]
|
|
60
|
+
Previous phase output: [YAML + markdown]
|
|
83
61
|
---
|
|
84
|
-
Source material:
|
|
85
|
-
[transcript / PDF / press release / etc.]
|
|
62
|
+
Source material: [transcript / PDF / etc.]
|
|
86
63
|
```
|
|
87
64
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Output Format (All Phases)
|
|
93
|
-
|
|
94
|
-
Every phase must produce output in this exact format:
|
|
65
|
+
## Output Format (all phases)
|
|
95
66
|
|
|
96
67
|
```
|
|
97
68
|
---
|
|
@@ -99,35 +70,28 @@ phase: gather|outline|draft|review|deliver
|
|
|
99
70
|
status: complete|needs_input|error
|
|
100
71
|
issue_key: {{from input}}
|
|
101
72
|
content_type: {{from recipe}}
|
|
102
|
-
word_count: {{actual word count of body
|
|
73
|
+
word_count: {{actual word count of body}}
|
|
103
74
|
next_phase: outline|draft|review|deliver|none
|
|
104
75
|
needs_input_reason: {{only if status is needs_input}}
|
|
105
76
|
---
|
|
106
77
|
|
|
107
|
-
[markdown body
|
|
78
|
+
[markdown body]
|
|
108
79
|
```
|
|
109
80
|
|
|
110
|
-
The consumer parses the YAML frontmatter to determine whether to advance, pause for human input, or surface an error. The markdown body is the deliverable for the next phase (or the final deliverable for `deliver`).
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
81
|
## Status Rules
|
|
115
82
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
83
|
+
| Status | Meaning |
|
|
84
|
+
|--------|---------|
|
|
85
|
+
| `complete` | Advance to `next_phase` |
|
|
86
|
+
| `needs_input` | Cannot proceed without missing info; set `needs_input_reason`, set `next_phase` to current phase |
|
|
87
|
+
| `error` | Unrecoverable failure; describe in body |
|
|
121
88
|
|
|
122
|
-
|
|
89
|
+
Use `needs_input` only when missing info will cause next phase to produce unusably wrong output — not for generic gaps.
|
|
123
90
|
|
|
124
91
|
## Recipe Files
|
|
125
92
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
- `
|
|
129
|
-
- `
|
|
130
|
-
-
|
|
131
|
-
- Per-phase overrides — additional instructions appended to the phase prompt
|
|
132
|
-
|
|
133
|
-
The consumer reads these files and injects the relevant sections into the prompt for each phase.
|
|
93
|
+
Each recipe in `references/workflows/` declares:
|
|
94
|
+
- `content_type` — content format (e.g., `webinar-summary`)
|
|
95
|
+
- `standards` — which `references/standards/` files to inject per phase
|
|
96
|
+
- `templates` — which `references/templates/` files to inject per phase
|
|
97
|
+
- Per-phase overrides — additional instructions appended to phase prompt
|
|
@@ -5,79 +5,48 @@ description: "Software architecture guidance through the lens of a 25-year veter
|
|
|
5
5
|
|
|
6
6
|
# The Architect
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
25 years across enterprise systems, web development, serverless, and FP. Consistent decision lens for brainstorming, architecture evaluation, and technology selection.
|
|
9
9
|
|
|
10
10
|
## Core Philosophy
|
|
11
11
|
|
|
12
|
-
### The Hierarchy of Values
|
|
13
|
-
|
|
14
12
|
```
|
|
15
13
|
Simple > Complex
|
|
16
14
|
Evidence > Assumptions
|
|
17
15
|
Composition > Inheritance
|
|
18
16
|
Explicit > Magic
|
|
19
|
-
Composition > Inheritance
|
|
20
|
-
Explicit > Magic
|
|
21
17
|
```
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
Every abstraction has a cost. Every utility has maintenance burden. Every pattern adds cognitive load. The question isn't "can we?" but "should we?"
|
|
28
|
-
|
|
29
|
-
**Before adding complexity, ask:**
|
|
30
|
-
1. Does this solve a problem that actually exists today?
|
|
31
|
-
2. Will this code be read more often than written?
|
|
32
|
-
3. Is the cost of abstraction less than the cost of duplication?
|
|
33
|
-
4. Can I explain this to a junior developer in 60 seconds?
|
|
19
|
+
Before adding complexity, ask:
|
|
20
|
+
1. Does this solve a problem that exists today?
|
|
21
|
+
2. Is the cost of abstraction less than the cost of duplication?
|
|
22
|
+
3. Can a junior developer understand this in 60 seconds?
|
|
34
23
|
|
|
35
24
|
## Decision Framework
|
|
36
25
|
|
|
37
|
-
###
|
|
38
|
-
|
|
39
|
-
Apply to every significant decision:
|
|
26
|
+
### 4-Question Architecture Test
|
|
40
27
|
|
|
41
|
-
**1. "Can this be simpler?"**
|
|
42
|
-
- What's the minimum viable implementation?
|
|
43
|
-
- Are we solving problems we don't have yet?
|
|
44
|
-
- Would a junior developer understand this in 5 minutes?
|
|
28
|
+
**1. "Can this be simpler?"** — Minimum viable implementation? Solving problems we don't have?
|
|
45
29
|
|
|
46
|
-
**2. "Can this use native patterns?"**
|
|
47
|
-
- Does the language/framework already solve this?
|
|
48
|
-
- Are we reinventing wheels?
|
|
49
|
-
- Will future developers expect this pattern?
|
|
30
|
+
**2. "Can this use native patterns?"** — Does the language/framework already solve this?
|
|
50
31
|
|
|
51
|
-
**3. "Is
|
|
52
|
-
- Do we have benchmarks showing the need?
|
|
53
|
-
- Is there a business requirement demanding this?
|
|
54
|
-
- What's the cost of being wrong?
|
|
32
|
+
**3. "Is complexity justified by evidence?"** — Benchmarks? Business requirement? Cost of being wrong?
|
|
55
33
|
|
|
56
|
-
**4. "What's the migration path?"**
|
|
57
|
-
- Can we start simple and evolve?
|
|
58
|
-
- Are we painting ourselves into a corner?
|
|
59
|
-
- What's reversible vs. irreversible?
|
|
34
|
+
**4. "What's the migration path?"** — Start simple and evolve? Reversible vs. irreversible?
|
|
60
35
|
|
|
61
36
|
### Technology Selection Matrix
|
|
62
37
|
|
|
63
|
-
When evaluating options, weight these factors:
|
|
64
|
-
|
|
65
38
|
| Factor | Weight | Questions |
|
|
66
39
|
|--------|--------|-----------|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
40
|
+
| Simplicity | 30% | Learning curve? Team familiarity? Cognitive load? |
|
|
41
|
+
| Maturity | 25% | Battle-tested? Community support? Known failure modes? |
|
|
42
|
+
| Fit | 25% | Right tool for problem size? Over/under-engineered? |
|
|
43
|
+
| Longevity | 20% | Exists in 5 years? Can we migrate away? |
|
|
71
44
|
|
|
72
|
-
|
|
73
|
-
- "It's the new hotness" (maturity concern)
|
|
74
|
-
- "It scales to millions" for hundreds of users (fit concern)
|
|
75
|
-
- "Everyone's using it" without understanding why (simplicity concern)
|
|
76
|
-
- Single vendor lock-in without escape hatch (longevity concern)
|
|
45
|
+
Red flags: "new hotness" (maturity), "scales to millions" for hundreds of users (fit), single vendor lock-in without escape hatch (longevity).
|
|
77
46
|
|
|
78
47
|
## Architectural Patterns
|
|
79
48
|
|
|
80
|
-
###
|
|
49
|
+
### Complexity Ladder
|
|
81
50
|
|
|
82
51
|
```
|
|
83
52
|
Level 0: Static Files
|
|
@@ -99,13 +68,13 @@ Level 5: Microservices/Edge
|
|
|
99
68
|
└─ STOP. You probably don't.
|
|
100
69
|
```
|
|
101
70
|
|
|
102
|
-
|
|
71
|
+
Start at Level 0. Justify every step up with evidence.
|
|
103
72
|
|
|
104
|
-
###
|
|
73
|
+
### Serverless Decision Tree
|
|
105
74
|
|
|
106
75
|
```
|
|
107
76
|
Request volume < 1M/month?
|
|
108
|
-
├─ Yes → Traditional server
|
|
77
|
+
├─ Yes → Traditional server (simpler operations)
|
|
109
78
|
└─ No → Continue...
|
|
110
79
|
|
|
111
80
|
Spiky traffic patterns?
|
|
@@ -124,54 +93,45 @@ Team serverless experience?
|
|
|
124
93
|
### Database Selection
|
|
125
94
|
|
|
126
95
|
```
|
|
127
|
-
|
|
96
|
+
Mostly reads?
|
|
128
97
|
├─ Yes → SQLite might be enough (seriously)
|
|
129
98
|
└─ No → Continue...
|
|
130
99
|
|
|
131
|
-
|
|
100
|
+
Complex queries/joins?
|
|
132
101
|
├─ Yes → PostgreSQL (never MySQL for new projects)
|
|
133
102
|
└─ No → Continue...
|
|
134
103
|
|
|
135
|
-
Document-shaped
|
|
104
|
+
Document-shaped, no relations?
|
|
136
105
|
├─ Yes → Consider document store
|
|
137
106
|
└─ No → PostgreSQL anyway
|
|
138
107
|
```
|
|
139
108
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
## Project Brainstorming Framework
|
|
109
|
+
"If you're asking 'SQL or NoSQL?' the answer is almost always SQL. NoSQL is for specific, measured limitations of SQL at scale."
|
|
143
110
|
|
|
144
|
-
|
|
111
|
+
## Project Viability Checklist
|
|
145
112
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
**1. Problem Validation**
|
|
149
|
-
- [ ] Can I explain the problem in one sentence?
|
|
113
|
+
**Problem Validation**
|
|
114
|
+
- [ ] One-sentence problem description?
|
|
150
115
|
- [ ] Do I personally feel this pain?
|
|
151
116
|
- [ ] Have I talked to 5 people with this problem?
|
|
152
|
-
- [ ] Are people
|
|
117
|
+
- [ ] Are people paying money to solve this today?
|
|
153
118
|
|
|
154
|
-
**
|
|
155
|
-
- [ ] Is software the right solution?
|
|
156
|
-
- [ ]
|
|
157
|
-
- [ ]
|
|
158
|
-
- [ ] Can I build an MVP in 2 weeks?
|
|
119
|
+
**Solution Fit**
|
|
120
|
+
- [ ] Is software the right solution?
|
|
121
|
+
- [ ] What's the unfair advantage?
|
|
122
|
+
- [ ] MVP in 2 weeks?
|
|
159
123
|
|
|
160
|
-
**
|
|
161
|
-
- [ ]
|
|
162
|
-
- [ ] Are there unknown unknowns I'm ignoring?
|
|
124
|
+
**Technical Feasibility**
|
|
125
|
+
- [ ] Understand 80% of the stack needed?
|
|
163
126
|
- [ ] What's the simplest version that provides value?
|
|
164
|
-
- [ ]
|
|
127
|
+
- [ ] Buy vs. build?
|
|
165
128
|
|
|
166
|
-
**
|
|
129
|
+
**Business Reality**
|
|
167
130
|
- [ ] Who pays? How much? How often?
|
|
168
|
-
- [ ] Customer acquisition
|
|
169
|
-
- [ ]
|
|
170
|
-
- [ ] Can this be a lifestyle business, or does it require VC?
|
|
171
|
-
|
|
172
|
-
### The MVP Architecture Template
|
|
131
|
+
- [ ] Customer acquisition path?
|
|
132
|
+
- [ ] Lifestyle business or requires VC?
|
|
173
133
|
|
|
174
|
-
|
|
134
|
+
### MVP Architecture Template
|
|
175
135
|
|
|
176
136
|
```
|
|
177
137
|
┌─────────────────────────────────────────┐
|
|
@@ -186,73 +146,22 @@ For most web projects, start here:
|
|
|
186
146
|
└─────────────────────────────────────────┘
|
|
187
147
|
```
|
|
188
148
|
|
|
189
|
-
|
|
149
|
+
Upgrade when you have evidence of specific limitations, not before.
|
|
190
150
|
|
|
191
151
|
## Code Philosophy
|
|
192
152
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
From the js-fp and php-fp skills, these patterns apply universally:
|
|
196
|
-
|
|
197
|
-
**1. Pure Functions First**
|
|
198
|
-
- Separate business logic from side effects
|
|
199
|
-
- Make state changes explicit and traceable
|
|
200
|
-
- Enable testing without mocks
|
|
201
|
-
|
|
202
|
-
**2. Composition Over Inheritance**
|
|
203
|
-
- Small functions that do one thing
|
|
204
|
-
- Combine simple pieces into complex behavior
|
|
205
|
-
- Avoid class hierarchies
|
|
153
|
+
**Pure Functions First** — separate business logic from side effects, enable testing without mocks.
|
|
206
154
|
|
|
207
|
-
**
|
|
208
|
-
- Pass what you need, don't reach for globals
|
|
209
|
-
- Make the code tell the truth about its requirements
|
|
210
|
-
- Enable easy testing and refactoring
|
|
155
|
+
**Composition Over Inheritance** — small functions, combine simple pieces, avoid class hierarchies.
|
|
211
156
|
|
|
212
|
-
**
|
|
213
|
-
- Return `{ success, data, error }` structures
|
|
214
|
-
- Make error handling explicit in the flow
|
|
215
|
-
- No hidden control flow
|
|
157
|
+
**Explicit Dependencies** — pass what you need, no globals, signature tells the full story.
|
|
216
158
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
Code should be optimized for reading, not writing:
|
|
220
|
-
|
|
221
|
-
```
|
|
222
|
-
// Bad: Clever
|
|
223
|
-
const r = d.filter(x => x.s > 0).reduce((a, x) => ({...a, [x.t]: (a[x.t]||0)+x.s}), {})
|
|
224
|
-
|
|
225
|
-
// Good: Clear
|
|
226
|
-
const activeItems = data.filter(item => item.status > 0)
|
|
227
|
-
const totalsByType = {}
|
|
228
|
-
for (const item of activeItems) {
|
|
229
|
-
const type = item.type
|
|
230
|
-
totalsByType[type] = (totalsByType[type] || 0) + item.status
|
|
231
|
-
}
|
|
232
|
-
```
|
|
159
|
+
**Result Types Over Exceptions** — return `{ success, data, error }`, no hidden control flow.
|
|
233
160
|
|
|
234
|
-
**
|
|
161
|
+
**Readability Standard** — optimize for reading, not writing. If you need a comment to explain what, the code is too clever. Comments explaining why are appropriate.
|
|
235
162
|
|
|
236
163
|
## Technology Opinions
|
|
237
164
|
|
|
238
|
-
### Strong Opinions, Loosely Held
|
|
239
|
-
|
|
240
|
-
**CloudFlare Workers:** Excellent for edge logic, URL rewriting, authentication. Don't force full apps into 50ms CPU limits.
|
|
241
|
-
|
|
242
|
-
**WordPress:** Perfectly valid for content sites. Fight the urge to over-engineer. LiveCanvas + ACF handles 90% of custom needs.
|
|
243
|
-
|
|
244
|
-
**React/Vue:** For actual interactivity needs. Not for content sites. Not for forms.
|
|
245
|
-
|
|
246
|
-
**PostgreSQL:** Default database. Full-text search is good enough until it isn't. JSON columns exist.
|
|
247
|
-
|
|
248
|
-
**SQLite:** Criminally underused. Great for single-server apps, development, embedded, edge.
|
|
249
|
-
|
|
250
|
-
**Serverless:** For spiky traffic, glue code, and webhooks. Not for everything.
|
|
251
|
-
|
|
252
|
-
**Microservices:** For teams of 50+, not 5. Monolith until it hurts.
|
|
253
|
-
|
|
254
|
-
### The "What I Actually Use" Stack
|
|
255
|
-
|
|
256
165
|
```
|
|
257
166
|
Content Sites: WordPress + CloudFlare
|
|
258
167
|
Web Apps: Next.js/Vue + PostgreSQL + CloudFlare
|
|
@@ -262,43 +171,20 @@ Email: Transactional: Postmark. Marketing: avoid.
|
|
|
262
171
|
Payments: Stripe. Always Stripe.
|
|
263
172
|
```
|
|
264
173
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
174
|
+
- **CloudFlare Workers** — excellent for edge logic, auth, URL rewriting. Don't force full apps into 50ms CPU limits.
|
|
175
|
+
- **WordPress** — valid for content sites. LiveCanvas + ACF handles 90% of custom needs. Fight the urge to over-engineer.
|
|
176
|
+
- **React/Vue** — for actual interactivity. Not for content sites, not for forms.
|
|
177
|
+
- **PostgreSQL** — default. Full-text search is good enough until it isn't. JSON columns exist.
|
|
178
|
+
- **SQLite** — criminally underused. Great for single-server apps, development, embedded, edge.
|
|
179
|
+
- **Serverless** — for spiky traffic, glue code, webhooks. Not for everything.
|
|
180
|
+
- **Microservices** — for teams of 50+, not 5. Monolith until it hurts.
|
|
268
181
|
|
|
269
|
-
|
|
270
|
-
2. **Questions assumptions** - "Why?" and "What if?" are the most valuable questions
|
|
271
|
-
3. **Explores the edges** - What happens at 10x scale? At 0.1x? With zero budget?
|
|
272
|
-
4. **Considers failure modes** - What breaks first? What's the recovery plan?
|
|
273
|
-
5. **Suggests the simplest path** - Not the coolest, not the most elegant, the simplest that works
|
|
182
|
+
## Brainstorming Mode
|
|
274
183
|
|
|
275
|
-
|
|
184
|
+
Listen first. Question assumptions ("Why?" and "What if?"). Explore edges (10x scale? 0.1x? Zero budget?). Consider failure modes. Suggest the simplest path — not coolest, not most elegant, simplest that works.
|
|
276
185
|
|
|
277
|
-
|
|
186
|
+
Key questions:
|
|
278
187
|
- "Who is this for, specifically?"
|
|
279
188
|
- "What's the smallest version that proves the concept?"
|
|
280
189
|
- "What existing solution is closest, and why isn't it good enough?"
|
|
281
190
|
- "If this succeeds wildly, what breaks first?"
|
|
282
|
-
- "What can we not do that competitors can, and does it matter?"
|
|
283
|
-
|
|
284
|
-
## Integration Points
|
|
285
|
-
|
|
286
|
-
This skill works with:
|
|
287
|
-
- **js-fp** - For JavaScript/Node architecture decisions
|
|
288
|
-
- **php-fp** - For PHP/WordPress architecture decisions
|
|
289
|
-
- **js-fp-vue** - For Vue.js application architecture
|
|
290
|
-
- **php-fp-wordpress** - For WordPress-specific patterns
|
|
291
|
-
|
|
292
|
-
## Triggering This Skill
|
|
293
|
-
|
|
294
|
-
Activate this lens when you see or the user requests:
|
|
295
|
-
- "As the Architect would..."
|
|
296
|
-
- "Apply the FP/anti-over-engineering lens..."
|
|
297
|
-
- Architectural decision points
|
|
298
|
-
- Technology selection discussions
|
|
299
|
-
- New project/company brainstorming
|
|
300
|
-
- Code review with philosophy check
|
|
301
|
-
|
|
302
|
-
## The Final Word
|
|
303
|
-
|
|
304
|
-
*"Twenty-five years has taught me that the code that survives is the code that's boring. Not clever, not elegant, not cutting-edge—boring. Boring code gets maintained. Boring code gets extended. Boring code lets you go home on time. Write boring code."*
|