claude-mpm 5.4.87__py3-none-any.whl → 5.4.89__py3-none-any.whl

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.
claude_mpm/VERSION CHANGED
@@ -1 +1 @@
1
- 5.4.87
1
+ 5.4.89
@@ -648,6 +648,42 @@ Task:
648
648
 
649
649
  See [Circuit Breaker #6](#circuit-breaker-6-forbidden-tool-usage) for enforcement on browser state claims without evidence.
650
650
 
651
+ ### Localhost Deployment Verification (CRITICAL)
652
+
653
+ **ABSOLUTE RULE**: PM NEVER tells user to "go to", "open", "check", or "navigate to" a localhost URL.
654
+
655
+ **Anti-Pattern Examples (CIRCUIT BREAKER VIOLATION)**:
656
+ ```
657
+ ❌ "Go to http://localhost:3000/dashboard"
658
+ ❌ "Open http://localhost:3300 in your browser"
659
+ ❌ "Make sure you're accessing via http://localhost:3300"
660
+ ❌ "Navigate to the dashboard at localhost:8080"
661
+ ❌ "Check the page at http://localhost:5000"
662
+ ```
663
+
664
+ **Correct Pattern - Always Delegate to web-qa**:
665
+ ```
666
+ Task:
667
+ agent: "web-qa"
668
+ task: "Verify localhost deployment at http://localhost:3300/dashboard"
669
+ acceptance_criteria:
670
+ - Navigate to URL (mcp__chrome-devtools__navigate_page)
671
+ - Take snapshot to verify content loads (mcp__chrome-devtools__take_snapshot)
672
+ - Take screenshot as evidence (mcp__chrome-devtools__take_screenshot)
673
+ - Check console for JavaScript errors (mcp__chrome-devtools__list_console_messages)
674
+ - Report actual page content, not assumptions
675
+ ```
676
+
677
+ **Evidence Required Before Claiming Deployment Success**:
678
+ - Actual page snapshot content (not "it should work")
679
+ - Screenshot showing rendered UI
680
+ - Console error check results
681
+ - HTTP response status codes
682
+
683
+ **Violation Consequences**:
684
+ - Telling user to check localhost = Circuit Breaker #9 violation
685
+ - Claiming deployment works without web-qa evidence = Circuit Breaker #3 violation (Unverified Assertions)
686
+
651
687
  ## Ops Agent Routing (MANDATORY)
652
688
 
653
689
  PM MUST route ops tasks to the correct specialized agent:
@@ -770,10 +806,10 @@ Report Results with Evidence
770
806
 
771
807
  **4. Deployment & Verification** (if deployment needed)
772
808
  - Deploy using appropriate ops agent
773
- - **MANDATORY**: Same ops agent must verify deployment:
774
- - Read logs
775
- - Run fetch tests or health checks
776
- - Use Playwright if web UI
809
+ - **MANDATORY**: Verify deployment with appropriate agents:
810
+ - **Backend/API**: local-ops verifies (lsof, curl, logs, health checks)
811
+ - **Web UI**: DELEGATE to web-qa for browser verification (Chrome DevTools MCP)
812
+ - **NEVER** tell user to open localhost URL - PM verifies via agents
777
813
  - Track any deployment configs created immediately
778
814
  - **FAILURE TO VERIFY = DEPLOYMENT INCOMPLETE**
779
815
 
@@ -1284,6 +1320,9 @@ PM: TodoWrite([{status: "completed"}]) # ✅ CORRECT: Full chain executed
1284
1320
  - "You'll need to...", "Please run...", "You can..."
1285
1321
  - "Start the server by...", "Run the following..."
1286
1322
  - Terminal commands in the context of "you should run"
1323
+ - **"Go to http://localhost:..."**, **"Open http://localhost:..."**
1324
+ - **"Make sure you're using localhost:XXXX"**
1325
+ - **"Check the browser at..."**, **"Navigate to..."** (when telling USER to do it)
1287
1326
  **Action**: BLOCK - Delegate to local-ops or appropriate agent instead
1288
1327
 
1289
1328
  ### Circuit Breaker #10: Vector Search First
@@ -14,7 +14,7 @@ DESIGN DECISIONS:
14
14
  """
15
15
 
16
16
  import json
17
- import subprocess
17
+ import subprocess # nosec B404 - subprocess needed for git commands
18
18
  from datetime import datetime, timezone
19
19
  from pathlib import Path
20
20
  from typing import Any, Dict, List, Optional, Tuple
@@ -50,9 +50,11 @@ class SessionResumeHelper:
50
50
 
51
51
  if self.pause_dir.exists():
52
52
  session_files.extend(list(self.pause_dir.glob("session-*.json")))
53
+ session_files.extend(list(self.pause_dir.glob("session-*.md")))
53
54
 
54
55
  if self.legacy_pause_dir.exists():
55
56
  session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
57
+ session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
56
58
 
57
59
  return len(session_files) > 0
58
60
 
@@ -67,9 +69,11 @@ class SessionResumeHelper:
67
69
 
68
70
  if self.pause_dir.exists():
69
71
  session_files.extend(list(self.pause_dir.glob("session-*.json")))
72
+ session_files.extend(list(self.pause_dir.glob("session-*.md")))
70
73
 
71
74
  if self.legacy_pause_dir.exists():
72
75
  session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
76
+ session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
73
77
 
74
78
  if not session_files:
75
79
  return None
@@ -112,7 +116,7 @@ class SessionResumeHelper:
112
116
  "--all",
113
117
  ]
114
118
 
115
- result = subprocess.run(
119
+ result = subprocess.run( # nosec B603 - git command with safe args
116
120
  cmd,
117
121
  cwd=self.project_path,
118
122
  capture_output=True,
@@ -332,9 +336,11 @@ class SessionResumeHelper:
332
336
 
333
337
  if self.pause_dir.exists():
334
338
  session_files.extend(list(self.pause_dir.glob("session-*.json")))
339
+ session_files.extend(list(self.pause_dir.glob("session-*.md")))
335
340
 
336
341
  if self.legacy_pause_dir.exists():
337
342
  session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
343
+ session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
338
344
 
339
345
  return len(session_files)
340
346
 
@@ -348,9 +354,11 @@ class SessionResumeHelper:
348
354
 
349
355
  if self.pause_dir.exists():
350
356
  session_files.extend(list(self.pause_dir.glob("session-*.json")))
357
+ session_files.extend(list(self.pause_dir.glob("session-*.md")))
351
358
 
352
359
  if self.legacy_pause_dir.exists():
353
360
  session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
361
+ session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
354
362
 
355
363
  if not session_files:
356
364
  return []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.4.87
3
+ Version: 5.4.89
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=5bR4JweQYaQL4XiCK_aOYT_K8YKGl-Kn46B-xKX3tFE,7
2
+ claude_mpm/VERSION,sha256=5LqRA4XAd3A96RyBZwrK_LuyzayE-uwJOHE8bNh179s,7
3
3
  claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=pz3lTrZZR5HhV3eZzYtIbtBwWo7iM6pkBHP_ixxmI6Y,6827
@@ -11,7 +11,7 @@ claude_mpm/agents/CLAUDE_MPM_FOUNDERS_OUTPUT_STYLE.md,sha256=d4hZRc2wG2XzLaIxl2e
11
11
  claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md,sha256=PmiEOcAcDVOPtCwiCPhNGWb8GVDnniftQO7MIi8yBWU,4174
12
12
  claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md,sha256=vneNW5vHjfKsRIukkuGbAnvnyp_-EC3qpFzHDdsMOwc,4796
13
13
  claude_mpm/agents/MEMORY.md,sha256=V1mGx5oEaLdN9AYLX3Xetslmr2Ja6vnLPATeEoR6bvw,3303
14
- claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=WyFXajyQU1ww6_wiG21pSOQxfJYTrrG5hYoDkbSuE_E,59593
14
+ claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=ilGzir8bMYCy1veDnPLR0kAIhU1EjpoeKrn380h9AJU,61344
15
15
  claude_mpm/agents/WORKFLOW.md,sha256=BD5V5wNgz4C2gHPn4ekRmj4i7nn56s1ZF8YnhWBPkFw,3331
16
16
  claude_mpm/agents/__init__.py,sha256=3cCQh2Hf_-2F9XDT5In533Bw7oKuGIqZvOdBW7af6dY,3403
17
17
  claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
@@ -347,7 +347,6 @@ claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc,sha
347
347
  claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc,sha256=SQX5iiP9bQZkLL-cj_2tlGH7lpAzarO0mYal7btj3tc,3521
348
348
  claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc,sha256=xS_cl5CFEHT4U_Za1vGhTTjKRayLvLoBvRfekvK-1gk,38986
349
349
  claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc,sha256=pA793fTKMsdmyho-jURwvJjHXfIy8AnC0Tjw3x9toro,30559
350
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc,sha256=9mpAKY4gNcbU5VvZ5tGbf2UM0uIEWdreKSUvVr_BKcM,33917
351
350
  claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=YbwauQDKSGvXkT1972faalJLuxwyvq328DYQhkCnel0,10513
352
351
  claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc,sha256=YV5iCKSXtrON611Rp3S8PQGPz0H3RIBO6K_n1BAfGWw,17523
353
352
  claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc,sha256=ZjcNfNY5Ht6FhalPeh7M7OzMffcey5iF4AVjDDg9kak,10694
@@ -358,7 +357,6 @@ claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM
358
357
  claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=QB0JPJQThTVg0TGRO3Dc_3y3bac-hkulgMqqzo_71ng,11189
359
358
  claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=nJw1ERCMxq23ioZ5DKwprmwO0fuvuqpdFHJ03XaMiDo,16052
360
359
  claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc,sha256=xBfLBSqnpcKfcQBWfh7xUm454g1lq1LvbO7SxGvcOPc,644
361
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc,sha256=Q40QpUbg9q_QHgv8kuYdQmRVjqcjewzYUC5BoaHinFo,10152
362
360
  claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc,sha256=bvZ_QcuI0j125Ebv8RzeWUh1BkuRTUfufGi0NV7HjuY,12359
363
361
  claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc,sha256=Yy_REAUhJCiFjOhxeDb4v0qyEvEbUtCmXD9PAz40dhw,5321
364
362
  claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc,sha256=TPkEc-Zi3oNS5dCXBpGbSZwg_8RQvzNzd4pVx9B3WeM,12364
@@ -544,7 +542,7 @@ claude_mpm/services/cli/memory_output_formatter.py,sha256=iNXMSu-K24rkgVhJURS-B6
544
542
  claude_mpm/services/cli/resume_service.py,sha256=ENlx5ynuw1bBuPX6XOinOizLqWGNAlSUOu--oV_hrRs,21758
545
543
  claude_mpm/services/cli/session_manager.py,sha256=-zG0osFnDYyta9iPCwmL5Dxu6Z-4_LHylFfqQAnIEvY,20126
546
544
  claude_mpm/services/cli/session_pause_manager.py,sha256=neCXcZC5b-OLkKNBHtr0PqE4VQg_n2S3PYzhuIt-6v0,17178
547
- claude_mpm/services/cli/session_resume_helper.py,sha256=uNlY3MF_YAW7XbsujWUkZZ4tAchxYXTVitLOjGgd0Go,13017
545
+ claude_mpm/services/cli/session_resume_helper.py,sha256=CwQ5EtDH8p2OREkOpPl4FuS1nzBMBSsxFus_7KgXDtA,13747
548
546
  claude_mpm/services/cli/startup_checker.py,sha256=MmztJ7yAnk5O5shArGDzRzwBDmx1WikhtE5s9P4IU9M,12251
549
547
  claude_mpm/services/cli/unified_dashboard_manager.py,sha256=wX3PLys0XKZncUwMysvYDfzMzNFjkhCdu62hi2qZUF0,15608
550
548
  claude_mpm/services/communication/__init__.py,sha256=b4qc7_Rqy4DE9q7BAUlfUZjoYG4uimAyUnE0irPcXyU,560
@@ -991,10 +989,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
991
989
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
992
990
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
993
991
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
994
- claude_mpm-5.4.87.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
995
- claude_mpm-5.4.87.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
996
- claude_mpm-5.4.87.dist-info/METADATA,sha256=ACtei1MhMEjkwDeaTUB_cczLAVU2NF5TO4fPxYU6ma0,39072
997
- claude_mpm-5.4.87.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
998
- claude_mpm-5.4.87.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
999
- claude_mpm-5.4.87.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1000
- claude_mpm-5.4.87.dist-info/RECORD,,
992
+ claude_mpm-5.4.89.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
993
+ claude_mpm-5.4.89.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
994
+ claude_mpm-5.4.89.dist-info/METADATA,sha256=lXq6s1lVYMcQ1r9OMQx8BiW_pkQbVHI48tJ7M27ckCE,39072
995
+ claude_mpm-5.4.89.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
996
+ claude_mpm-5.4.89.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
997
+ claude_mpm-5.4.89.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
998
+ claude_mpm-5.4.89.dist-info/RECORD,,