@muggleai/works 5.19.0-staging.128 → 5.19.0-staging.129

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Run real-browser end-to-end (E2E) acceptance tests on your web app from any AI coding agent. Generate test scripts from plain English, replay them on localhost, capture screenshots, and validate user flows like signup, checkout, and dashboards. Works across Claude Code, Cursor, Codex, and Windsurf.",
4
- "version": "5.19.0-staging.128",
4
+ "version": "5.19.0-staging.129",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Ship quality products with AI-powered end-to-end (E2E) acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
5
- "version": "5.19.0-staging.128",
5
+ "version": "5.19.0-staging.129",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -34,15 +34,26 @@ Only if a worktree was used.
34
34
 
35
35
  A worktree's dependency dir (`node_modules`, and nested workspace copies) is often a **link** — a symlink or a Windows junction — to a shared tree rather than a real copy. A forced or recursive delete follows the link and wipes that shared target, breaking every other worktree.
36
36
 
37
+ `git worktree remove` refuses for two unrelated reasons, and **both texts lead to the same forbidden flag** — one because it is the obvious fix, the other because git prints it as the suggestion. Clear each cause at its source; neither is a reason to reconsider the flag.
38
+
37
39
  1. **Never `--force`.** It is the one flag that follows links.
38
40
  2. Clear the dependency and build dirs first, nested workspace ones included (`packages/*/node_modules`, `dist`). A plain `git worktree remove` fails with `Directory not empty` while they remain, and the obvious fix for that error is exactly the forbidden flag.
39
41
  - A **link** → unlink it first with the host OS's unlink, removing the link only and never its target.
40
42
  - A **real directory** → delete it in place.
41
43
  Check which it is before deleting; the two are indistinguishable from a listing but not from a `rm -r`.
42
- 3. Then plain `git worktree remove {worktreePath}`.
43
- 4. `git worktree prune` to drop the administrative entry when the directory went away out from under git.
44
+ 3. Clear the worktree's own dirty state — what the merge already landed, and nothing else. While anything remains, removal fails with `contains modified or untracked files, use --force to delete it`, an error that prescribes the forbidden flag in its own text.
45
+
46
+ Expect this on any cycle that pushed through a server-side signed commit: that mutation writes to the remote only, so the worktree keeps the edits as modifications of a commit it never made locally. The dirt is this cycle's own landed work, not something the user left behind.
47
+
48
+ Read the dirt with `git -C {worktreePath} status --porcelain`, then settle each kind on whether the base already carries it:
49
+ - **Tracked modifications** — when `git -C {worktreePath} diff origin/<base>` is empty the working tree holds nothing the merge did not land, so `git -C {worktreePath} reset --hard` discards a copy rather than work. A non-empty diff stops the sequence: that diff is unlanded work, and this step would be the thing that destroyed it.
50
+ - **Untracked files** — never on the base, so no diff can clear them. Delete only the paths this procedure itself created: the dependency and build dirs cleared above. Anything else stops the sequence and is reported by name; an untracked file is the one thing in the worktree with no copy anywhere.
51
+
52
+ **Never `git clean -x`.** `-x` is what reaches the ignored dependency dir, and clean recurses through a link exactly as a forced remove does — it undoes the unlink above under a different name.
53
+ 4. Then plain `git worktree remove {worktreePath}`.
54
+ 5. `git worktree prune` to drop the administrative entry when the directory went away out from under git.
44
55
 
45
- **Verify:** the path is gone, it no longer appears in `git worktree list`, **and** the shared dependency tree the links pointed at still exists. That last check is the one that catches a link-follow.
56
+ **Verify:** the path is gone, it no longer appears in `git worktree list`, the removal ran without `--force`, **and** the shared dependency tree the links pointed at still exists. That last check is the one that catches a link-follow.
46
57
 
47
58
  ## 3. Delete the local branch
48
59
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "release": "5.18.0",
3
- "buildId": "run-128-1",
4
- "commitSha": "f1af44f6fff370b4e9bc4e16a4fc5601bdca2163",
5
- "buildTime": "2026-09-22T17:31:39Z",
3
+ "buildId": "run-129-1",
4
+ "commitSha": "0d87587f70defe63f99a2bb64cd41366dd1b78e8",
5
+ "buildTime": "2026-09-22T18:01:23Z",
6
6
  "serviceName": "muggle-ai-works-mcp"
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@muggleai/works",
3
3
  "mcpName": "io.github.multiplex-ai/muggle",
4
- "version": "5.19.0-staging.128",
4
+ "version": "5.19.0-staging.129",
5
5
  "description": "Ship quality products with AI-powered E2E acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Run real-browser end-to-end (E2E) acceptance tests on your web app from any AI coding agent. Generate test scripts from plain English, replay them on localhost, capture screenshots, and validate user flows like signup, checkout, and dashboards. Works across Claude Code, Cursor, Codex, and Windsurf.",
4
- "version": "5.19.0-staging.128",
4
+ "version": "5.19.0-staging.129",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Ship quality products with AI-powered end-to-end (E2E) acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
5
- "version": "5.19.0-staging.128",
5
+ "version": "5.19.0-staging.129",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -34,15 +34,26 @@ Only if a worktree was used.
34
34
 
35
35
  A worktree's dependency dir (`node_modules`, and nested workspace copies) is often a **link** — a symlink or a Windows junction — to a shared tree rather than a real copy. A forced or recursive delete follows the link and wipes that shared target, breaking every other worktree.
36
36
 
37
+ `git worktree remove` refuses for two unrelated reasons, and **both texts lead to the same forbidden flag** — one because it is the obvious fix, the other because git prints it as the suggestion. Clear each cause at its source; neither is a reason to reconsider the flag.
38
+
37
39
  1. **Never `--force`.** It is the one flag that follows links.
38
40
  2. Clear the dependency and build dirs first, nested workspace ones included (`packages/*/node_modules`, `dist`). A plain `git worktree remove` fails with `Directory not empty` while they remain, and the obvious fix for that error is exactly the forbidden flag.
39
41
  - A **link** → unlink it first with the host OS's unlink, removing the link only and never its target.
40
42
  - A **real directory** → delete it in place.
41
43
  Check which it is before deleting; the two are indistinguishable from a listing but not from a `rm -r`.
42
- 3. Then plain `git worktree remove {worktreePath}`.
43
- 4. `git worktree prune` to drop the administrative entry when the directory went away out from under git.
44
+ 3. Clear the worktree's own dirty state — what the merge already landed, and nothing else. While anything remains, removal fails with `contains modified or untracked files, use --force to delete it`, an error that prescribes the forbidden flag in its own text.
45
+
46
+ Expect this on any cycle that pushed through a server-side signed commit: that mutation writes to the remote only, so the worktree keeps the edits as modifications of a commit it never made locally. The dirt is this cycle's own landed work, not something the user left behind.
47
+
48
+ Read the dirt with `git -C {worktreePath} status --porcelain`, then settle each kind on whether the base already carries it:
49
+ - **Tracked modifications** — when `git -C {worktreePath} diff origin/<base>` is empty the working tree holds nothing the merge did not land, so `git -C {worktreePath} reset --hard` discards a copy rather than work. A non-empty diff stops the sequence: that diff is unlanded work, and this step would be the thing that destroyed it.
50
+ - **Untracked files** — never on the base, so no diff can clear them. Delete only the paths this procedure itself created: the dependency and build dirs cleared above. Anything else stops the sequence and is reported by name; an untracked file is the one thing in the worktree with no copy anywhere.
51
+
52
+ **Never `git clean -x`.** `-x` is what reaches the ignored dependency dir, and clean recurses through a link exactly as a forced remove does — it undoes the unlink above under a different name.
53
+ 4. Then plain `git worktree remove {worktreePath}`.
54
+ 5. `git worktree prune` to drop the administrative entry when the directory went away out from under git.
44
55
 
45
- **Verify:** the path is gone, it no longer appears in `git worktree list`, **and** the shared dependency tree the links pointed at still exists. That last check is the one that catches a link-follow.
56
+ **Verify:** the path is gone, it no longer appears in `git worktree list`, the removal ran without `--force`, **and** the shared dependency tree the links pointed at still exists. That last check is the one that catches a link-follow.
46
57
 
47
58
  ## 3. Delete the local branch
48
59