@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 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.9",
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",
@@ -1,8 +1,6 @@
1
1
  /** @type {import('tailwindcss').Config} */
2
- export default {
3
- content: [
4
- "./web/**/*.{html,js}",
5
- ],
2
+ module.exports = {
3
+ content: ["./web/public/**/*.{html,js}"],
6
4
  theme: {
7
5
  extend: {},
8
6
  },
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