@muggleai/works 5.19.0-staging.124 → 5.19.0-staging.125

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.
@@ -110,6 +110,20 @@ echo "DRAIN checks pending=${pending_checks:-0} failed=${failed_checks:-0} behin
110
110
  printf 'BLOCKED_CIDIGEST=""\n'
111
111
  } > "${slot}/watch-watermark.env"
112
112
 
113
+ # Claim the slot for this session. watcher_lease_is_foreign reads an absent
114
+ # owner.json as "not foreign", so a slot armed without one leases itself to a
115
+ # live PID nothing can classify: once the arming session dies its watcher polls
116
+ # into a closed pipe, and every later arm skips the slot as already owned until
117
+ # the lifetime cap expires. An unset id writes nothing rather than a placeholder
118
+ # — reconcile reads any id it does not recognise as another session's claim, and
119
+ # a bogus one would strand the slot exactly as an absent file does.
120
+ if [ -n "${CLAUDE_CODE_SESSION_ID:-}" ]; then
121
+ printf '{\n "session_id": "%s",\n "claimed_at": "%s"\n}\n' \
122
+ "$CLAUDE_CODE_SESSION_ID" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "${slot}/owner.json"
123
+ else
124
+ echo "pr-watch-arm: CLAUDE_CODE_SESSION_ID unset — slot left unowned, reconcile cannot re-arm it" >&2
125
+ fi
126
+
113
127
  echo "ARMED pr=$pr_number watermark seeded at ${slot}/watch-watermark.env"
114
128
 
115
129
  [ "$exec_loop" -eq 1 ] || exit 0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "release": "5.18.0",
3
- "buildId": "run-124-1",
4
- "commitSha": "fd774f165bbdddcd5d9b6707295e6efb6c63fbd5",
5
- "buildTime": "2026-09-19T08:45:18Z",
3
+ "buildId": "run-125-1",
4
+ "commitSha": "e1043eabf9589ec3ba60eee7c69e5f9b6f35e419",
5
+ "buildTime": "2026-09-21T22:22:28Z",
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.124",
4
+ "version": "5.19.0-staging.125",
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",
@@ -110,6 +110,20 @@ echo "DRAIN checks pending=${pending_checks:-0} failed=${failed_checks:-0} behin
110
110
  printf 'BLOCKED_CIDIGEST=""\n'
111
111
  } > "${slot}/watch-watermark.env"
112
112
 
113
+ # Claim the slot for this session. watcher_lease_is_foreign reads an absent
114
+ # owner.json as "not foreign", so a slot armed without one leases itself to a
115
+ # live PID nothing can classify: once the arming session dies its watcher polls
116
+ # into a closed pipe, and every later arm skips the slot as already owned until
117
+ # the lifetime cap expires. An unset id writes nothing rather than a placeholder
118
+ # — reconcile reads any id it does not recognise as another session's claim, and
119
+ # a bogus one would strand the slot exactly as an absent file does.
120
+ if [ -n "${CLAUDE_CODE_SESSION_ID:-}" ]; then
121
+ printf '{\n "session_id": "%s",\n "claimed_at": "%s"\n}\n' \
122
+ "$CLAUDE_CODE_SESSION_ID" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "${slot}/owner.json"
123
+ else
124
+ echo "pr-watch-arm: CLAUDE_CODE_SESSION_ID unset — slot left unowned, reconcile cannot re-arm it" >&2
125
+ fi
126
+
113
127
  echo "ARMED pr=$pr_number watermark seeded at ${slot}/watch-watermark.env"
114
128
 
115
129
  [ "$exec_loop" -eq 1 ] || exit 0