@thedecipherist/mdd 1.6.13 โ 1.7.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 +4 -4
- package/commands/mdd-audit.md +12 -0
- package/commands/mdd-bug.md +10 -0
- package/commands/mdd-build.md +12 -0
- package/commands/mdd-framework.md +215 -0
- package/commands/mdd-import-spec.md +10 -0
- package/commands/mdd-lifecycle.md +12 -0
- package/commands/mdd-manage.md +12 -0
- package/commands/mdd-manual.md +10 -0
- package/commands/mdd-ops.md +12 -0
- package/commands/mdd-plan.md +12 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/update-ecommerce.d.ts +2 -0
- package/dist/update-ecommerce.d.ts.map +1 -0
- package/dist/update-ecommerce.js +114 -0
- package/dist/update-ecommerce.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
> **One command. Twenty-five modes. Complete feature lifecycle from documentation to verified deployment.**
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://
|
|
11
|
-
<img src="https://img.shields.io/badge/๐_Documentation-
|
|
10
|
+
<a href="https://mddai.dev">
|
|
11
|
+
<img src="https://img.shields.io/badge/๐_Documentation-mddai.dev-00e5cc?style=for-the-badge&labelColor=08090f" alt="Documentation Site" />
|
|
12
12
|
</a>
|
|
13
13
|
|
|
14
|
-
<a href="https://
|
|
14
|
+
<a href="https://mddai.dev/user-guide.html">
|
|
15
15
|
<img src="https://img.shields.io/badge/๐_User_Guide-Full_Reference-00ff88?style=for-the-badge&labelColor=08090f" alt="User Guide" />
|
|
16
16
|
</a>
|
|
17
17
|
</p>
|
|
@@ -32,7 +32,7 @@ Then in Claude Code:
|
|
|
32
32
|
/mdd add user authentication with JWT tokens
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
๐ **[Full Documentation Site](https://
|
|
35
|
+
๐ **[Full Documentation Site](https://mddai.dev)** ยท [User Guide](https://mddai.dev/user-guide.html) ยท [GitHub](https://github.com/TheDecipherist/mdd)
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
package/commands/mdd-audit.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Triggered when arguments start with `audit`.
|
|
4
4
|
|
|
5
|
+
## Phase Logging
|
|
6
|
+
|
|
7
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase A1`, `Phase A2`) and `EVENT` with `start` or `end`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-audit | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Log file: `~/.claude/mdd/log.md`
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
5
17
|
### Phase A1 โ Scope
|
|
6
18
|
|
|
7
19
|
**Stale job detection (runs first):** Check `.mdd/jobs/` for any existing `audit-*/` folder.
|
package/commands/mdd-bug.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
**Trigger:** `/mdd bug <description>`
|
|
4
4
|
|
|
5
5
|
The user is reporting a bug in an existing feature. Do NOT create a new feature doc.
|
|
6
|
+
|
|
7
|
+
## Phase Logging
|
|
8
|
+
|
|
9
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase B0`, `Phase B1`) and `EVENT` with `start` or `end`:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-bug | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Log file: `~/.claude/mdd/log.md`
|
|
6
16
|
Instead: scan existing docs to identify which feature(s) own the broken behavior,
|
|
7
17
|
document the bug in those docs, fix it, and mark it complete.
|
|
8
18
|
|
package/commands/mdd-build.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
## BUILD MODE โ New Feature Development
|
|
2
2
|
|
|
3
|
+
## Phase Logging
|
|
4
|
+
|
|
5
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase 0`, `Phase 1`) and `EVENT` with `start` or `end`:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-build | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Log file: `~/.claude/mdd/log.md`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
3
15
|
### Phase 0 โ Branch Safety Check
|
|
4
16
|
|
|
5
17
|
Before gathering any context, verify the current branch is compatible with the requested feature.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
## FRAMEWORK MODE
|
|
2
|
+
|
|
3
|
+
Routes to one of three sub-modes based on the command used.
|
|
4
|
+
|
|
5
|
+
## Phase Logging
|
|
6
|
+
|
|
7
|
+
At the **start** of every step (before any action) and the **end** of every step (after all actions), run the command below. Substitute `PHASE` with the step identifier (e.g., `Step 1`, `Step 3`) and `EVENT` with `start` or `end`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-framework | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Log file: `~/.claude/mdd/log.md`
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## `framework <feature>` โ Add a Module to mdd-ecommerce
|
|
18
|
+
|
|
19
|
+
**$ARGUMENTS** is the feature description.
|
|
20
|
+
|
|
21
|
+
### Step 1 - Run normal BUILD MODE
|
|
22
|
+
|
|
23
|
+
Read `$MDD_DIR/mdd-build.md` and follow every phase (branch check, context gather, questions, doc, implementation, tests). All standard MDD rules apply.
|
|
24
|
+
|
|
25
|
+
Apply these additional constraints throughout:
|
|
26
|
+
|
|
27
|
+
**Placement:**
|
|
28
|
+
- New framework module (fills a slot) โ `packages/modules/<name>/`
|
|
29
|
+
- New service package (no slot) โ `packages/<name>/`
|
|
30
|
+
|
|
31
|
+
Confirm placement with the user during Phase 1 questions if unclear.
|
|
32
|
+
|
|
33
|
+
**MDD doc frontmatter additions:**
|
|
34
|
+
```yaml
|
|
35
|
+
type: framework-module
|
|
36
|
+
slot: <slot-name-or-none>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Status values specific to framework modules:**
|
|
40
|
+
- `skeleton-ready` โ component exists, exports the correct interface, but returns stub/mock data
|
|
41
|
+
- `complete` โ wired end-to-end with real data flowing
|
|
42
|
+
|
|
43
|
+
Use `skeleton-ready` when the module compiles but is not yet connected to real data sources. Use `complete` only when the full data path works.
|
|
44
|
+
|
|
45
|
+
**After implementation:**
|
|
46
|
+
|
|
47
|
+
1. Run the compile check:
|
|
48
|
+
```bash
|
|
49
|
+
pnpm --filter app build
|
|
50
|
+
```
|
|
51
|
+
Fix any TypeScript errors before marking the doc `complete`.
|
|
52
|
+
|
|
53
|
+
2. If the module fills a slot, add it to the demo site config:
|
|
54
|
+
- Open `apps/demo/site.config.ts`
|
|
55
|
+
- Import the new module
|
|
56
|
+
- Wire it into the appropriate slot in `defineSiteConfig()`
|
|
57
|
+
|
|
58
|
+
3. Update the doc status to `skeleton-ready` or `complete` based on the state above.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## `init-client <path-to-proposal.md>` โ Scaffold a Client Project
|
|
63
|
+
|
|
64
|
+
**$ARGUMENTS** is the path to a completed proposal markdown file.
|
|
65
|
+
|
|
66
|
+
### Step 1 - Read the proposal
|
|
67
|
+
|
|
68
|
+
Read the file at `$ARGUMENTS`. If `$ARGUMENTS` is empty, ask: "What is the path to the proposal file?"
|
|
69
|
+
|
|
70
|
+
Stop if the file does not exist. Report the path and ask the user to check it.
|
|
71
|
+
|
|
72
|
+
### Step 2 - Extract config values
|
|
73
|
+
|
|
74
|
+
Parse the proposal for these values:
|
|
75
|
+
|
|
76
|
+
| Config key | Where to find it |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `config.name` | Business name heading or intro |
|
|
79
|
+
| `config.domain` | Domain / URL section |
|
|
80
|
+
| `config.theme.tokens.accent` | Theme colors section |
|
|
81
|
+
| `config.theme.tokens.warmBand` | Theme colors section |
|
|
82
|
+
| `config.theme.tokens.footerDark` | Theme colors section |
|
|
83
|
+
| `config.features.*` | Feature toggles section (yes/no flags) |
|
|
84
|
+
| `config.locales` | Language selector section |
|
|
85
|
+
| `config.defaultLocale` | Language selector section (first/primary listed) |
|
|
86
|
+
| `config.payments.currency` | Payments section |
|
|
87
|
+
|
|
88
|
+
If any required value is missing, list the gaps and ask the user to supply them before continuing.
|
|
89
|
+
|
|
90
|
+
### Step 3 - Parse the product catalog
|
|
91
|
+
|
|
92
|
+
The proposal contains a markdown table with columns: `sku`, `mfr`, `name`, `description`, `brand`, `price`, `stock`.
|
|
93
|
+
|
|
94
|
+
Extract every row. Convert `price` to integers (cents/รถre - multiply by 100 and round). Build TypeScript seed data from this table.
|
|
95
|
+
|
|
96
|
+
If the table is missing or empty, ask: "No products found in the catalog table. Add products to the proposal and re-run, or continue with an empty seed?"
|
|
97
|
+
|
|
98
|
+
### Step 4 - Determine module wiring
|
|
99
|
+
|
|
100
|
+
Based on the feature flags extracted in Step 2, decide which `@thedecipherist/mdd-ecommerce-*` packages to import and wire into `site.config.ts`:
|
|
101
|
+
|
|
102
|
+
- `newsletter: true` โ include `@thedecipherist/mdd-ecommerce-newsletter`
|
|
103
|
+
- `trustBadges: true` โ include `@thedecipherist/mdd-ecommerce-trust-badges`
|
|
104
|
+
- Add any other feature-to-package mappings that are evident from the proposal
|
|
105
|
+
|
|
106
|
+
Always include `@thedecipherist/mdd-ecommerce-core`.
|
|
107
|
+
|
|
108
|
+
### Step 5 - Generate files
|
|
109
|
+
|
|
110
|
+
Write all files to the current working directory.
|
|
111
|
+
|
|
112
|
+
**`site.config.ts`:**
|
|
113
|
+
```typescript
|
|
114
|
+
import { defineSiteConfig } from '@thedecipherist/mdd-ecommerce-core'
|
|
115
|
+
// import enabled modules
|
|
116
|
+
// (one import per enabled feature module)
|
|
117
|
+
|
|
118
|
+
export const siteConfig = defineSiteConfig({
|
|
119
|
+
name: '<extracted name>',
|
|
120
|
+
domain: '<extracted domain>',
|
|
121
|
+
locales: ['<locales array>'],
|
|
122
|
+
defaultLocale: '<default locale>',
|
|
123
|
+
theme: {
|
|
124
|
+
tokens: {
|
|
125
|
+
accent: '<extracted>',
|
|
126
|
+
warmBand: '<extracted>',
|
|
127
|
+
footerDark: '<extracted>',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
features: {
|
|
131
|
+
// one key per extracted feature flag
|
|
132
|
+
},
|
|
133
|
+
payments: {
|
|
134
|
+
currency: '<extracted>',
|
|
135
|
+
},
|
|
136
|
+
slots: {
|
|
137
|
+
// wire enabled modules into their slots here
|
|
138
|
+
},
|
|
139
|
+
})
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**`scripts/seed.ts`:**
|
|
143
|
+
|
|
144
|
+
TypeScript file that:
|
|
145
|
+
1. Connects to MongoDB using `process.env.MONGODB_URI`
|
|
146
|
+
2. Seeds categories derived from the product catalog (`brand` or `mfr` as category)
|
|
147
|
+
3. Seeds products using `@thedecipherist/mdd-ecommerce-cms` models
|
|
148
|
+
4. For `LocaleString` fields (`name`, `description`): duplicate the value across all locales in `config.locales` - client fills in translations later
|
|
149
|
+
5. Converts price integers back to the correct unit when displaying, but stores as integers (cents/รถre)
|
|
150
|
+
6. Exits cleanly after seeding - no dangling connections
|
|
151
|
+
|
|
152
|
+
**`.env.example`:**
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Client database: <business-name-in-snake_case>
|
|
156
|
+
# Copy this to .env and fill in values
|
|
157
|
+
|
|
158
|
+
MONGODB_URI=
|
|
159
|
+
NEXT_PUBLIC_SITE_URL=https://<domain>
|
|
160
|
+
NEXT_PUBLIC_RYBBIT_SITE_ID=
|
|
161
|
+
NEXT_PUBLIC_RYBBIT_URL=https://app.rybbit.io
|
|
162
|
+
# add any other vars from the main mdd-ecommerce .env.example
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Step 6 - Report
|
|
166
|
+
|
|
167
|
+
List every file written with its path. Then output:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
Next steps:
|
|
171
|
+
1. Fill in .env from .env.example
|
|
172
|
+
2. Run: pnpm install
|
|
173
|
+
3. Run: npx tsx scripts/seed.ts
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## `client-status` โ Framework Install Report
|
|
179
|
+
|
|
180
|
+
Run this from the root of a client project directory.
|
|
181
|
+
|
|
182
|
+
### Step 1 - Read package.json
|
|
183
|
+
|
|
184
|
+
Read `package.json` in the current directory. Find all dependencies and devDependencies whose names start with `@thedecipherist/mdd-ecommerce-`. List each with its pinned version.
|
|
185
|
+
|
|
186
|
+
If no such dependencies exist, report: "No mdd-ecommerce packages found in package.json. Is this the right directory?"
|
|
187
|
+
|
|
188
|
+
### Step 2 - Read site.config.ts
|
|
189
|
+
|
|
190
|
+
Read `site.config.ts`. Extract:
|
|
191
|
+
- Which slots have modules wired (non-null slot values)
|
|
192
|
+
- Which feature flags are `true`
|
|
193
|
+
|
|
194
|
+
### Step 3 - Check MDD docs
|
|
195
|
+
|
|
196
|
+
Check if `.mdd/docs/` exists. If yes, count the `.md` files inside.
|
|
197
|
+
|
|
198
|
+
### Step 4 - Output status table
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
mdd-ecommerce Client Status
|
|
202
|
+
============================
|
|
203
|
+
|
|
204
|
+
Packages installed:
|
|
205
|
+
@thedecipherist/mdd-ecommerce-core v<version>
|
|
206
|
+
@thedecipherist/mdd-ecommerce-<module> v<version>
|
|
207
|
+
(one line per installed package)
|
|
208
|
+
|
|
209
|
+
Slots wired: <list of wired slot names, or "none">
|
|
210
|
+
Features enabled: <list of true feature flags, or "none">
|
|
211
|
+
|
|
212
|
+
MDD docs: <N> files in .mdd/docs/ (or "directory not found")
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
If `site.config.ts` does not exist, report that and skip slots/features rows.
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Triggered when arguments start with `import-spec`.
|
|
4
4
|
|
|
5
|
+
## Phase Logging
|
|
6
|
+
|
|
7
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase IS1`, `Phase IS3`) and `EVENT` with `start` or `end`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-import-spec | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Log file: `~/.claude/mdd/log.md`
|
|
14
|
+
|
|
5
15
|
Reads one or more large spec or prompt documents โ the kind produced by extended brainstorming sessions with Claude โ and converts them into properly structured MDD initiatives, waves, and feature docs. Every decision in the spec is preserved. Duplicate or overlapping topics are merged intelligently. Features are numbered and waved in **build dependency order**, not spec-reading order.
|
|
6
16
|
|
|
7
17
|
---
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## Phase Logging
|
|
2
|
+
|
|
3
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase R1`, `Phase G2`, `Phase UP3`) and `EVENT` with `start` or `end`:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-lifecycle | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Log file: `~/.claude/mdd/log.md`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
## REVERSE-ENGINEER MODE โ `/mdd reverse-engineer [path or feature-id]`
|
|
2
14
|
|
|
3
15
|
Triggered when arguments start with `reverse-engineer` or `reverse`. Generates or regenerates MDD documentation from existing source code.
|
package/commands/mdd-manage.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## Phase Logging
|
|
2
|
+
|
|
3
|
+
At the **start** of every mode or phase (before any action) and the **end** (after all actions), run the command below. Substitute `PHASE` with the mode/phase identifier (e.g., `STATUS`, `Phase SC1`, `Phase U1`) and `EVENT` with `start` or `end`:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-manage | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Log file: `~/.claude/mdd/log.md`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
## STATUS MODE โ `/mdd status`
|
|
2
14
|
|
|
3
15
|
Quick overview of MDD state for the project:
|
package/commands/mdd-manual.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Triggered when arguments start with `manual`.
|
|
4
4
|
|
|
5
|
+
## Phase Logging
|
|
6
|
+
|
|
7
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase M1`, `Phase M2`) and `EVENT` with `start` or `end`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-manual | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Log file: `~/.claude/mdd/log.md`
|
|
14
|
+
|
|
5
15
|
Generates a comprehensive, print-ready user manual at `.mdd/manual/manual.md` from all
|
|
6
16
|
MDD feature docs and ops runbooks. Uses content hashes to detect what changed since the
|
|
7
17
|
last run - only stale sections are regenerated.
|
package/commands/mdd-ops.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## Phase Logging
|
|
2
|
+
|
|
3
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase OP1`, `Phase RO2`) and `EVENT` with `start` or `end`:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-ops | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Log file: `~/.claude/mdd/log.md`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
## OPS DOCUMENT MODE โ `/mdd ops <description>`
|
|
2
14
|
|
|
3
15
|
Triggered when arguments start with `ops`. If arguments are exactly `ops list` โ jump to **Ops List Mode** (Phase OL) instead.
|
package/commands/mdd-plan.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## Phase Logging
|
|
2
|
+
|
|
3
|
+
At the **start** of every phase (before any action) and the **end** of every phase (after all actions), run the command below. Substitute `PHASE` with the phase identifier (e.g., `Phase PI1`, `Phase PW3`, `Phase PE2`) and `EVENT` with `start` or `end`:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
bash -c 'D=$(date +%Y-%m-%d); T=$(date +%H:%M:%S); K=$(compressmcp --status 2>/dev/null | grep -oE "[0-9]+K/[0-9]+K" | head -1 || echo "-"); mkdir -p ~/.claude/mdd; printf "| %s | mdd-plan | PHASE | EVENT | %s | %s |\n" "$D" "$T" "$K" >> ~/.claude/mdd/log.md' 2>/dev/null || true
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Log file: `~/.claude/mdd/log.md`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
## PLAN-INITIATIVE MODE โ `/mdd plan-initiative`
|
|
2
14
|
|
|
3
15
|
Triggered when arguments start with `plan-initiative`. Creates a new initiative doc.
|
package/dist/cli.js
CHANGED
|
@@ -75,5 +75,12 @@ program
|
|
|
75
75
|
const selfImprovement = await promptSelfImprovement(settingsPath);
|
|
76
76
|
install({ dir: effectiveDir, modesDir, force: true, local, claudeMdPath, settingsPath, selfImprovement });
|
|
77
77
|
});
|
|
78
|
+
program
|
|
79
|
+
.command('update-ecommerce')
|
|
80
|
+
.description('Update @thedecipherist/mdd-ecommerce-* packages and report breaking changes')
|
|
81
|
+
.action(async () => {
|
|
82
|
+
const { updateEcommerce } = await import('./update-ecommerce.js');
|
|
83
|
+
updateEcommerce();
|
|
84
|
+
});
|
|
78
85
|
program.parseAsync();
|
|
79
86
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-ecommerce.d.ts","sourceRoot":"","sources":["../src/update-ecommerce.ts"],"names":[],"mappings":"AAuEA,wBAAgB,eAAe,IAAI,IAAI,CA6EtC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { cwd } from 'process';
|
|
5
|
+
function detectPackageManager(dir) {
|
|
6
|
+
if (existsSync(join(dir, 'pnpm-lock.yaml')))
|
|
7
|
+
return 'pnpm';
|
|
8
|
+
if (existsSync(join(dir, 'yarn.lock')))
|
|
9
|
+
return 'yarn';
|
|
10
|
+
if (existsSync(join(dir, 'package-lock.json')))
|
|
11
|
+
return 'npm';
|
|
12
|
+
return 'npm';
|
|
13
|
+
}
|
|
14
|
+
function readEcommercePackages(dir) {
|
|
15
|
+
const pkgPath = join(dir, 'package.json');
|
|
16
|
+
if (!existsSync(pkgPath)) {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
20
|
+
const all = {
|
|
21
|
+
...(pkg.dependencies ?? {}),
|
|
22
|
+
...(pkg.devDependencies ?? {}),
|
|
23
|
+
...(pkg.peerDependencies ?? {}),
|
|
24
|
+
};
|
|
25
|
+
const result = {};
|
|
26
|
+
for (const [name, version] of Object.entries(all)) {
|
|
27
|
+
if (name.startsWith('@thedecipherist/mdd-ecommerce-')) {
|
|
28
|
+
result[name] = version;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function stripRange(version) {
|
|
34
|
+
// Strip leading semver range chars: ^, ~, >=, <=, >, <, =
|
|
35
|
+
return version.replace(/^[~^>=<]+/, '');
|
|
36
|
+
}
|
|
37
|
+
function parseMajor(version) {
|
|
38
|
+
const clean = stripRange(version);
|
|
39
|
+
const parts = clean.split('.');
|
|
40
|
+
const major = parseInt(parts[0] ?? '0', 10);
|
|
41
|
+
return isNaN(major) ? 0 : major;
|
|
42
|
+
}
|
|
43
|
+
function isMajorBump(from, to) {
|
|
44
|
+
return parseMajor(to) > parseMajor(from);
|
|
45
|
+
}
|
|
46
|
+
function hasDocsDirectory(packageName, dir) {
|
|
47
|
+
const docsPath = join(dir, 'node_modules', packageName, '.mdd', 'docs');
|
|
48
|
+
return existsSync(docsPath);
|
|
49
|
+
}
|
|
50
|
+
export function updateEcommerce() {
|
|
51
|
+
const dir = cwd();
|
|
52
|
+
const pkgPath = join(dir, 'package.json');
|
|
53
|
+
if (!existsSync(pkgPath)) {
|
|
54
|
+
console.log('No package.json found in current directory.');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
const before = readEcommercePackages(dir);
|
|
58
|
+
if (Object.keys(before).length === 0) {
|
|
59
|
+
console.log('No @thedecipherist/mdd-ecommerce-* packages found in package.json.');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const pm = detectPackageManager(dir);
|
|
63
|
+
const packageNames = Object.keys(before);
|
|
64
|
+
console.log(`\nUpdating ${packageNames.length} @thedecipherist/mdd-ecommerce-* package(s) with ${pm}...\n`);
|
|
65
|
+
const updateArgs = packageNames.join(' ');
|
|
66
|
+
const updateCmd = `${pm} update ${updateArgs}`;
|
|
67
|
+
try {
|
|
68
|
+
execSync(updateCmd, { cwd: dir, stdio: 'inherit' });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
console.log(`\nUpdate command failed: ${String(err)}`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const after = readEcommercePackages(dir);
|
|
75
|
+
const changed = [];
|
|
76
|
+
for (const name of packageNames) {
|
|
77
|
+
const fromVersion = before[name] ?? 'unknown';
|
|
78
|
+
const toVersion = after[name] ?? fromVersion;
|
|
79
|
+
if (stripRange(fromVersion) !== stripRange(toVersion)) {
|
|
80
|
+
changed.push({ name, from: fromVersion, to: toVersion });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
console.log('\n--- Update Summary ---\n');
|
|
84
|
+
if (changed.length === 0) {
|
|
85
|
+
console.log(' All packages already up to date. No changes applied.');
|
|
86
|
+
console.log('');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const breakingChanges = [];
|
|
90
|
+
for (const result of changed) {
|
|
91
|
+
console.log(` โ ${result.name} ${result.from} -> ${result.to}`);
|
|
92
|
+
if (isMajorBump(result.from, result.to)) {
|
|
93
|
+
breakingChanges.push(result);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
console.log('');
|
|
97
|
+
if (breakingChanges.length > 0) {
|
|
98
|
+
console.log(' Warnings:');
|
|
99
|
+
for (const result of breakingChanges) {
|
|
100
|
+
const hasDocs = hasDocsDirectory(result.name, dir);
|
|
101
|
+
console.log(` ! Breaking change possible - check site.config.ts slot wiring for ${result.name}`);
|
|
102
|
+
if (hasDocs) {
|
|
103
|
+
const docsPath = join('node_modules', result.name, '.mdd', 'docs');
|
|
104
|
+
console.log(` Docs available: ${docsPath}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log('');
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(' All updates applied. No breaking changes detected.');
|
|
111
|
+
console.log('');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=update-ecommerce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-ecommerce.js","sourceRoot":"","sources":["../src/update-ecommerce.ts"],"names":[],"mappings":"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"}
|