@programinglive/dev-workflow-mcp-server 1.3.9 → 1.3.11
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/CHANGELOG.md +14 -0
- package/docs/WORKFLOW-BEST-PRACTICES.md +44 -0
- package/package.json +3 -3
- package/tailwind.config.js +2 -4
- package/web/server.js +2 -2
- /package/web/{index.html → public/index.html} +0 -0
- /package/web/{input.css → public/input.css} +0 -0
- /package/web/{output.css → public/output.css} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [1.3.11](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.10...v1.3.11) (2025-11-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### ♻️ Refactors
|
|
9
|
+
|
|
10
|
+
* **web:** move static files to public/ subdirectory for Plesk security ([3e5c321](https://github.com/programinglive/dev-workflow-mcp-server/commit/3e5c321d569e3594d9f29c8762513b95df8dbd84))
|
|
11
|
+
|
|
12
|
+
### [1.3.10](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.9...v1.3.10) (2025-11-22)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### 📝 Documentation
|
|
16
|
+
|
|
17
|
+
* add workflow best practices to eliminate forced releases ([6bcac42](https://github.com/programinglive/dev-workflow-mcp-server/commit/6bcac42bc9f30cbfa0a27e36a90af303d244d863))
|
|
18
|
+
|
|
5
19
|
### [1.3.9](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.8...v1.3.9) (2025-11-22)
|
|
6
20
|
|
|
7
21
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Workflow Best Practices
|
|
2
|
+
|
|
3
|
+
## Correct Release Workflow Order
|
|
4
|
+
|
|
5
|
+
To avoid needing `--force` flag for releases, follow this exact order:
|
|
6
|
+
|
|
7
|
+
1. **Start Task**: `mcp0_start_task`
|
|
8
|
+
2. **Fix/Implement**: Make your code changes
|
|
9
|
+
3. **Mark Fixed**: `mcp0_mark_bug_fixed`
|
|
10
|
+
4. **Tests**: `mcp0_create_tests` + `mcp0_run_tests` (or `mcp0_skip_tests` with reason)
|
|
11
|
+
5. **Documentation**: `mcp0_create_documentation`
|
|
12
|
+
6. **Ready Check**: `mcp0_check_ready_to_commit`
|
|
13
|
+
7. **Commit & Push**: `mcp0_commit_and_push`
|
|
14
|
+
8. **Release**: `mcp0_perform_release` ⚠️ **MUST come BEFORE complete_task**
|
|
15
|
+
9. **Complete**: `mcp0_complete_task`
|
|
16
|
+
|
|
17
|
+
## Common Mistakes
|
|
18
|
+
|
|
19
|
+
### ❌ Wrong Order (causes forced releases)
|
|
20
|
+
```
|
|
21
|
+
check_ready → commit → complete → release // WRONG!
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### ✅ Correct Order
|
|
25
|
+
```
|
|
26
|
+
check_ready → commit → release → complete // CORRECT!
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Why This Matters
|
|
30
|
+
|
|
31
|
+
- `complete_task` **resets the workflow state**
|
|
32
|
+
- `perform_release` **checks the workflow state** before running
|
|
33
|
+
- If you complete before releasing, the state is cleared and release guards fail
|
|
34
|
+
- Using `--force` bypasses guards but doesn't fix the root cause
|
|
35
|
+
|
|
36
|
+
## State Transitions
|
|
37
|
+
|
|
38
|
+
1. After `commit_and_push`: `currentPhase = "release"`
|
|
39
|
+
2. After `perform_release`: `currentPhase = "ready_to_complete"`, `released = true`
|
|
40
|
+
3. After `complete_task`: State is reset to idle
|
|
41
|
+
|
|
42
|
+
## Solution
|
|
43
|
+
|
|
44
|
+
Always call `perform_release` BEFORE `complete_task`. Never use `--force` unless absolutely necessary.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@programinglive/dev-workflow-mcp-server",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.11",
|
|
4
4
|
"description": "MCP server to enforce development workflow discipline",
|
|
5
5
|
"homepage": "https://devworkflow.programinglive.com/",
|
|
6
6
|
"type": "module",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "vite build",
|
|
13
|
-
"build:web": "npx tailwindcss -i ./web/input.css -o ./web/output.css --minify",
|
|
14
|
-
"watch:web": "npx tailwindcss -i ./web/input.css -o ./web/output.css --watch",
|
|
13
|
+
"build:web": "npx tailwindcss -i ./web/public/input.css -o ./web/public/output.css --minify",
|
|
14
|
+
"watch:web": "npx tailwindcss -i ./web/public/input.css -o ./web/public/output.css --watch",
|
|
15
15
|
"postbuild": "npm run build:web && node scripts/build-docs.js",
|
|
16
16
|
"dev": "node --watch index.js",
|
|
17
17
|
"start": "node index.js",
|
package/tailwind.config.js
CHANGED
package/web/server.js
CHANGED
|
@@ -83,11 +83,11 @@ async function start() {
|
|
|
83
83
|
const userId = url.searchParams.get("user") || "default";
|
|
84
84
|
|
|
85
85
|
if (req.method === "GET" && url.pathname === "/output.css") {
|
|
86
|
-
const css = await readFile(join(__dirname, "output.css"), "utf-8");
|
|
86
|
+
const css = await readFile(join(__dirname, "public", "output.css"), "utf-8");
|
|
87
87
|
res.writeHead(200, { "Content-Type": "text/css" });
|
|
88
88
|
res.end(css);
|
|
89
89
|
} else if (req.method === "GET" && url.pathname === "/") {
|
|
90
|
-
const html = await readFile(join(__dirname, "index.html"), "utf-8");
|
|
90
|
+
const html = await readFile(join(__dirname, "public", "index.html"), "utf-8");
|
|
91
91
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
92
92
|
res.end(html);
|
|
93
93
|
} else if (req.method === "GET" && url.pathname === "/api/summary") {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|