mcp-ticketer 0.3.1__tar.gz → 0.3.2__tar.gz
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.
Potentially problematic release.
This version of mcp-ticketer might be problematic. Click here for more details.
- mcp_ticketer-0.3.2/.claude/agents/.dependency_cache +18 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/.mpm_deployment_state +2 -2
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/local_ops_agent.md +1 -1
- {mcp_ticketer-0.3.1/src/mcp_ticketer.egg-info → mcp_ticketer-0.3.2}/PKG-INFO +1 -1
- mcp_ticketer-0.3.2/docs/changelogs/CHANGELOG_v0.2.0.md +201 -0
- mcp_ticketer-0.3.2/docs/changelogs/CHANGELOG_v0.3.0.md +278 -0
- mcp_ticketer-0.3.2/docs/changelogs/CHANGELOG_v0.3.1.md +229 -0
- mcp_ticketer-0.3.2/docs/guides/BULLETPROOF_TICKET_CREATION_GUIDE.md +336 -0
- mcp_ticketer-0.3.2/docs/releases/PUBLICATION_GUIDE_v0.2.0.md +263 -0
- mcp_ticketer-0.3.2/docs/releases/PUBLICATION_SUCCESS_v0.2.0.md +212 -0
- mcp_ticketer-0.3.2/docs/releases/PUBLICATION_SUCCESS_v0.3.0.md +257 -0
- mcp_ticketer-0.3.2/docs/releases/PUBLICATION_SUCCESS_v0.3.1.md +236 -0
- mcp_ticketer-0.3.2/docs/releases/RELEASE_v0.1.39_SUMMARY.md +190 -0
- mcp_ticketer-0.3.2/docs/releases/RELEASE_v0.2.0_SUMMARY.md +186 -0
- mcp_ticketer-0.3.2/docs/summaries/AUTO_DISCOVERY_BUG_FIX_SUMMARY.md +254 -0
- mcp_ticketer-0.3.2/docs/summaries/BULLETPROOF_IMPROVEMENTS_SUMMARY.md +280 -0
- mcp_ticketer-0.3.2/docs/summaries/COMMAND_SYNONYMS_SUMMARY.md +284 -0
- mcp_ticketer-0.3.2/docs/summaries/COMPREHENSIVE_TESTING_SUMMARY.md +316 -0
- mcp_ticketer-0.3.2/docs/summaries/INTERACTIVE_CLI_SETUP_SUMMARY.md +338 -0
- mcp_ticketer-0.3.2/docs/summaries/LINEAR_ADAPTER_INITIALIZATION_BUG_FIX.md +266 -0
- mcp_ticketer-0.3.2/docs/summaries/MODULE_REFACTORING_ANALYSIS.md +253 -0
- mcp_ticketer-0.3.2/docs/summaries/MODULE_REFACTORING_SUMMARY.md +213 -0
- mcp_ticketer-0.3.2/docs/summaries/REFACTORED_ENV_SOLUTION_SUMMARY.md +277 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/pyproject.toml +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/__version__.py +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/aitrackdown.py +12 -15
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/github.py +7 -4
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/jira.py +23 -22
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/__init__.py +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/adapter.py +88 -89
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/client.py +71 -52
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/mappers.py +88 -68
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/queries.py +28 -7
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear/types.py +57 -50
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/linear.py +2 -2
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/adapter_diagnostics.py +86 -51
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/diagnostics.py +165 -72
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/linear_commands.py +156 -113
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/main.py +153 -82
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/simple_health.py +73 -45
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/utils.py +15 -10
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/config.py +23 -19
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/env_discovery.py +5 -4
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/env_loader.py +109 -86
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/exceptions.py +20 -18
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/models.py +9 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/project_config.py +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/mcp/server.py +294 -139
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/health_monitor.py +152 -121
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/manager.py +11 -4
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/queue.py +15 -3
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/run_worker.py +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/ticket_registry.py +190 -132
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/worker.py +54 -25
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2/src/mcp_ticketer.egg-info}/PKG-INFO +1 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/SOURCES.txt +20 -1
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/test_adapter.py +93 -145
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/test_client.py +87 -92
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/test_mappers.py +82 -103
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/test_queries.py +50 -20
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/test_types.py +36 -62
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_github.py +29 -15
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_github_token.py +10 -7
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_jira.py +17 -17
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_jira_direct.py +48 -47
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_jira_projects.py +43 -43
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_linear.py +10 -16
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_linear_config.py +36 -28
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_linear_native.py +29 -26
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_actual_worker_execution.py +60 -58
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_config_resolution.py +34 -40
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_credential_validation.py +12 -13
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_environment_handoff.py +135 -112
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_queue_processing.py +134 -114
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_queue_system.py +12 -12
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_unified_env_loading.py +51 -45
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_adapter_cache.py +23 -20
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_cli_config.py +10 -9
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_cli_vs_simulation.py +48 -36
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_linear_teams.py +45 -39
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_search.py +6 -5
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_test.py +5 -4
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_worker_adapter.py +31 -27
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_worker_simulation.py +30 -27
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/debug/debug_worker_subprocess.py +28 -28
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/e2e/test_comments_and_attachments.py +111 -112
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/e2e/test_complete_ticket_workflow.py +85 -97
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/e2e/test_complete_workflow.py +115 -111
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/e2e/test_hierarchy_validation.py +105 -92
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/e2e/test_state_transitions.py +109 -101
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_aitrackdown_commenting.py +159 -133
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_all_adapters.py +175 -99
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_commenting_functionality.py +123 -107
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_comprehensive.py +63 -27
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_hierarchy_and_workflow.py +222 -156
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_jira_github_adapters.py +101 -105
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_mcp_server_qa.py +99 -99
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_pr_functionality.py +14 -14
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_serve_config.py +17 -26
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/integration/test_user_assignment.py +285 -193
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/performance/test_optimizations.py +12 -16
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/performance/test_performance.py +34 -34
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/run_comprehensive_tests.py +138 -54
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_api_usage.py +14 -16
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_basic.py +4 -4
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_codex_config.py +6 -8
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_comprehensive_qa.py +126 -87
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_error_handling.py +23 -17
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_linear_teams.py +75 -51
- mcp_ticketer-0.3.1/.claude/agents/.dependency_cache +0 -34
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042175430.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042175768.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042175888.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042175987.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042176075.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/comments/comment-20251024141042176163.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/tickets/task-20251024141042175062.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.aitrackdown-test/tickets/task-20251024141042175285.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/agent-manager.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/agentic-coder-optimizer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/api_qa.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/clerk-ops.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/code_analyzer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/content-agent.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/dart_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/data_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/documentation.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/gcp_ops_agent.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/golang_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/imagemagick.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/java_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/memory_manager.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/nextjs_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/ops.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/php-engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/product_owner.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/project_organizer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/prompt-engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/python_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/qa.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/react_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/refactoring_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/research.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/ruby-engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/rust_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/security.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/ticketing.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/typescript_engineer.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/vercel_ops_agent.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/version_control.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/web_qa.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/agents/web_ui.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/mcp.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude/mcp.local.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/config/project.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/mcp_auto_config_preference.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/documentation_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/engineer_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/ops_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/project_knowledge_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/qa_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/research_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/version-control_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude-mpm/memories/workflows_memories.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.claude.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.coveragerc +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.env.example +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.github/workflows/docs.yml +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.github/workflows/publish.yml +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.github/workflows/test.yml +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.mcp/config.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.pre-commit-config.yaml +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.python-version +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/.readthedocs.yaml +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/CHANGELOG.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/CLAUDE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/LICENSE +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/MANIFEST.in +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/Makefile +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/SECURITY_SCAN_REPORT_v0.1.24.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/ADAPTERS.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/AI_CLIENT_INTEGRATION.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/API_REFERENCE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/CONFIGURATION.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/DEVELOPER_GUIDE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/ENV_DISCOVERY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/MCP_INTEGRATION.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/MIGRATION_GUIDE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/PROJECT_CONFIG.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/PR_INTEGRATION.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/QUEUE_SYSTEM.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/QUICK_START.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/QUICK_START_ENV.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/USER_GUIDE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_archive/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/adapters/github.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/adapters.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/api.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/cli.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/development.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/examples.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/index.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/installation.rst.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/adapters/github.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/adapters.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/api.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/cli.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/conf.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/development/CODE_STRUCTURE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/development/CONTRIBUTING.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/development/RELEASE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/development/RELEASING.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/development.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/examples.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/index.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/installation.rst +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/prd/mcp-ticketer-prd.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/CONFIG_RESOLUTION_FIX.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/CREDENTIAL_VALIDATION_FIX.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/DIAGNOSTICS_FEATURE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/ENV_DISCOVERY_COMPLETE.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/FIX_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/OPTIMIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/TEST_COVERAGE_REPORT.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/TEST_REPORT.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/TEST_RESULTS_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/reports/VERIFICATION_RESULTS.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/requirements.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/setup/CLAUDE_DESKTOP_SETUP.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/setup/CODEX_INTEGRATION.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/setup/JIRA_SETUP.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/docs/setup/LINEAR_SETUP.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2/docs/summaries}/PROJECT_CLEANUP_SUMMARY.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/mcp-ticketer +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/mcp-ticketer-server +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/pytest.ini +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/requirements-dev.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/requirements.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/scripts/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/scripts/install.sh +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/scripts/manage_version.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/scripts/mcp_server.sh +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/scripts/test_set_command.sh +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/setup.cfg +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/setup.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/adapters/hybrid.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cache/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cache/memory.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/auggie_configure.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/codex_configure.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/configure.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/discover.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/gemini_configure.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/mcp_configure.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/migrate_config.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/cli/queue_commands.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/adapter.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/http_client.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/mappers.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/core/registry.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/mcp/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/py.typed +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer/queue/__main__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/requires.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/test-tickets/tickets/task-20250924002724.json +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/README.md +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/linear/__init__.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/adapters/test_aitrackdown.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/conftest.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/core/test_env_discovery.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_base_adapter.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_models.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tests/test_queue.py +0 -0
- {mcp_ticketer-0.3.1 → mcp_ticketer-0.3.2}/tox.ini +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bf8c9b0d7fac24c488522bbfa869e66b": {
|
|
3
|
+
"timestamp": 1761354165.189099,
|
|
4
|
+
"results": {
|
|
5
|
+
"agents": {},
|
|
6
|
+
"summary": {
|
|
7
|
+
"total_agents": 36,
|
|
8
|
+
"agents_with_deps": 0,
|
|
9
|
+
"missing_python": [],
|
|
10
|
+
"missing_system": [],
|
|
11
|
+
"satisfied_python": [],
|
|
12
|
+
"satisfied_system": []
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"deployment_hash": "356954435a3667304f39f35a6d31a49c1ff5ecaeff7f58b4fac66b87908c5586",
|
|
16
|
+
"context": {}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"deployment_hash": "
|
|
3
|
-
"last_check_time":
|
|
2
|
+
"deployment_hash": "356954435a3667304f39f35a6d31a49c1ff5ecaeff7f58b4fac66b87908c5586",
|
|
3
|
+
"last_check_time": 1761354165.189831,
|
|
4
4
|
"last_check_results": {
|
|
5
5
|
"agents": {},
|
|
6
6
|
"summary": {
|
|
@@ -3,7 +3,7 @@ name: local-ops-agent
|
|
|
3
3
|
description: "Use this agent when you need specialized assistance with specialized agent for managing local development deployments with focus on maintaining single stable instances, protecting existing services, and never interfering with other projects or claude code services. This agent provides targeted expertise and follows best practices for local_ops_agent related tasks.\n\n<example>\nContext: When you need specialized assistance from the local_ops_agent agent.\nuser: \"I need help with local_ops_agent tasks\"\nassistant: \"I'll use the local_ops_agent agent to provide specialized assistance.\"\n<commentary>\nThis agent provides targeted expertise for local_ops_agent related tasks and follows established best practices.\n</commentary>\n</example>"
|
|
4
4
|
model: sonnet
|
|
5
5
|
category: operations
|
|
6
|
-
version: "
|
|
6
|
+
version: "2.0.0"
|
|
7
7
|
tags: deployment,devops,local,process-management,monitoring
|
|
8
8
|
---
|
|
9
9
|
# Agent Instructions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Universal ticket management interface for AI agents with MCP support
|
|
5
5
|
Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
6
6
|
Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Changelog - MCP Ticketer v0.2.0
|
|
2
|
+
|
|
3
|
+
**Release Date**: 2025-10-24
|
|
4
|
+
**Version**: 0.2.0 (Minor Release)
|
|
5
|
+
**Previous Version**: 0.1.39
|
|
6
|
+
|
|
7
|
+
## 🎉 **Release Highlights**
|
|
8
|
+
|
|
9
|
+
This minor release represents a **major milestone** in MCP Ticketer's development maturity, featuring comprehensive module refactoring and extensive testing infrastructure. The release significantly improves code organization, maintainability, and reliability.
|
|
10
|
+
|
|
11
|
+
### **🏗️ Major Features**
|
|
12
|
+
|
|
13
|
+
#### **1. Linear Adapter Module Refactoring**
|
|
14
|
+
- **Monolithic Module Split**: Refactored 2,389-line Linear adapter into 5 focused modules
|
|
15
|
+
- **66% Size Reduction**: Main adapter file reduced from 2,389 → 812 lines
|
|
16
|
+
- **Improved Organization**: Clear separation of concerns across modules:
|
|
17
|
+
- `adapter.py` - Core CRUD operations and business logic
|
|
18
|
+
- `queries.py` - GraphQL queries and fragments
|
|
19
|
+
- `types.py` - Linear-specific types and mappings
|
|
20
|
+
- `client.py` - GraphQL client management with error handling
|
|
21
|
+
- `mappers.py` - Data transformation between Linear and universal models
|
|
22
|
+
|
|
23
|
+
#### **2. Comprehensive Testing Infrastructure**
|
|
24
|
+
- **2,000+ Lines of Unit Tests**: Extensive unit test coverage for all refactored modules
|
|
25
|
+
- **1,200+ Lines of E2E Tests**: Complete workflow testing from creation to closure
|
|
26
|
+
- **90%+ Test Coverage**: Comprehensive coverage across critical functionality
|
|
27
|
+
- **Automated Test Runner**: Comprehensive test execution with detailed reporting
|
|
28
|
+
|
|
29
|
+
#### **3. Enhanced Error Handling System**
|
|
30
|
+
- **Centralized Exception Hierarchy**: Created `core/exceptions.py` with comprehensive error types
|
|
31
|
+
- **Rich Error Context**: Adapter name, original error, and retry information
|
|
32
|
+
- **Type-Specific Errors**: `AuthenticationError`, `RateLimitError`, `ValidationError`
|
|
33
|
+
- **Better Debugging**: Enhanced error messages and context for troubleshooting
|
|
34
|
+
|
|
35
|
+
### **🔧 Technical Improvements**
|
|
36
|
+
|
|
37
|
+
#### **Code Quality Enhancements**
|
|
38
|
+
- **Separation of Concerns**: Each module has a single, clear responsibility
|
|
39
|
+
- **Loose Coupling**: Modules interact through well-defined interfaces
|
|
40
|
+
- **High Cohesion**: Related functionality grouped together
|
|
41
|
+
- **Extensibility**: Easy to add new features or modify existing ones
|
|
42
|
+
|
|
43
|
+
#### **Developer Experience Improvements**
|
|
44
|
+
- **Easier Navigation**: Find specific functionality quickly in focused files
|
|
45
|
+
- **Better Understanding**: Clear separation makes code easier to comprehend
|
|
46
|
+
- **Faster Development**: Smaller files load and edit faster in IDEs
|
|
47
|
+
- **Reduced Cognitive Load**: Work on one concern at a time
|
|
48
|
+
|
|
49
|
+
#### **Maintainability Enhancements**
|
|
50
|
+
- **Isolated Changes**: Modify queries without touching business logic
|
|
51
|
+
- **Better Testing**: Test individual components in isolation
|
|
52
|
+
- **Easier Debugging**: Smaller scope for troubleshooting issues
|
|
53
|
+
- **Clear Responsibilities**: Each module has well-defined purpose
|
|
54
|
+
|
|
55
|
+
### **🧪 Testing Infrastructure**
|
|
56
|
+
|
|
57
|
+
#### **Unit Test Coverage**
|
|
58
|
+
- **Linear Adapter Types**: 95%+ coverage (mappings, filters, metadata)
|
|
59
|
+
- **Linear GraphQL Client**: 90%+ coverage (queries, errors, retries)
|
|
60
|
+
- **Linear Data Mappers**: 95%+ coverage (transformations, builders)
|
|
61
|
+
- **Linear Adapter Main**: 85%+ coverage (initialization, validation)
|
|
62
|
+
- **Linear GraphQL Queries**: 100% coverage (syntax, structure)
|
|
63
|
+
|
|
64
|
+
#### **End-to-End Test Coverage**
|
|
65
|
+
- **Complete Workflows**: Epic → Issue → Task with full lifecycle
|
|
66
|
+
- **State Transitions**: All 8 states with proper validation
|
|
67
|
+
- **Comment Threading**: Multi-participant conversations
|
|
68
|
+
- **Metadata Management**: Rich metadata handling and updates
|
|
69
|
+
- **Hierarchy Validation**: Parent-child relationships
|
|
70
|
+
- **Search and Filtering**: Cross-hierarchy search capabilities
|
|
71
|
+
|
|
72
|
+
#### **Test Infrastructure Features**
|
|
73
|
+
- **Comprehensive Test Runner**: Automated execution with detailed reporting
|
|
74
|
+
- **Test Organization**: Proper markers and categories (unit, e2e, integration)
|
|
75
|
+
- **Performance Insights**: Test timing and optimization recommendations
|
|
76
|
+
- **CI/CD Ready**: Proper exit codes for continuous integration
|
|
77
|
+
|
|
78
|
+
## 📋 **Detailed Changes**
|
|
79
|
+
|
|
80
|
+
### **Added**
|
|
81
|
+
- ✅ **Linear Adapter Module Structure**: Split monolithic adapter into focused modules
|
|
82
|
+
- ✅ **Comprehensive Exception System**: `core/exceptions.py` with rich error hierarchy
|
|
83
|
+
- ✅ **Unit Test Suite**: 2,000+ lines covering all refactored modules
|
|
84
|
+
- ✅ **E2E Test Suite**: 1,200+ lines covering complete workflows
|
|
85
|
+
- ✅ **Test Infrastructure**: Automated test runner with comprehensive reporting
|
|
86
|
+
- ✅ **Module Documentation**: Enhanced docstrings and code documentation
|
|
87
|
+
|
|
88
|
+
### **Improved**
|
|
89
|
+
- ✅ **Code Organization**: Better separation of concerns and module boundaries
|
|
90
|
+
- ✅ **Error Handling**: Centralized exceptions with rich context
|
|
91
|
+
- ✅ **Import Structure**: Relative imports for better module organization
|
|
92
|
+
- ✅ **Type Annotations**: Comprehensive type hints throughout refactored code
|
|
93
|
+
- ✅ **Documentation**: Google-style docstrings for all public methods
|
|
94
|
+
- ✅ **Test Coverage**: Significantly improved test coverage across all modules
|
|
95
|
+
|
|
96
|
+
### **Fixed**
|
|
97
|
+
- ✅ **Import Dependencies**: Proper handling of optional dependencies (gql library)
|
|
98
|
+
- ✅ **State Initialization**: Fixed initialization order in Linear adapter
|
|
99
|
+
- ✅ **Error Propagation**: Better error handling and context preservation
|
|
100
|
+
- ✅ **Module Boundaries**: Clear interfaces between modules
|
|
101
|
+
|
|
102
|
+
### **Technical Debt Reduction**
|
|
103
|
+
- ✅ **Monolithic Files**: Split large files into manageable modules
|
|
104
|
+
- ✅ **Code Duplication**: Reduced duplication through better organization
|
|
105
|
+
- ✅ **Test Coverage Gaps**: Comprehensive test coverage for all functionality
|
|
106
|
+
- ✅ **Documentation Gaps**: Enhanced documentation throughout codebase
|
|
107
|
+
|
|
108
|
+
## 🚀 **Performance & Reliability**
|
|
109
|
+
|
|
110
|
+
### **Performance Improvements**
|
|
111
|
+
- **Faster Development**: Smaller files load and edit faster
|
|
112
|
+
- **Better IDE Performance**: Improved code navigation and intellisense
|
|
113
|
+
- **Reduced Memory Usage**: More efficient module loading
|
|
114
|
+
- **Faster Test Execution**: Well-organized test suite with proper isolation
|
|
115
|
+
|
|
116
|
+
### **Reliability Enhancements**
|
|
117
|
+
- **Comprehensive Testing**: 90%+ test coverage ensures reliability
|
|
118
|
+
- **Better Error Handling**: Rich error context for debugging
|
|
119
|
+
- **Regression Prevention**: Extensive test suite prevents breaking changes
|
|
120
|
+
- **Production Readiness**: Enterprise-grade testing and error handling
|
|
121
|
+
|
|
122
|
+
## 🔄 **Migration Guide**
|
|
123
|
+
|
|
124
|
+
### **For Developers**
|
|
125
|
+
The refactoring maintains **100% backward compatibility**. Existing imports continue to work:
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
# This continues to work exactly as before
|
|
129
|
+
from mcp_ticketer.adapters.linear import LinearAdapter
|
|
130
|
+
|
|
131
|
+
# All existing functionality preserved
|
|
132
|
+
adapter = LinearAdapter(config)
|
|
133
|
+
task = await adapter.create(task_data)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### **For Contributors**
|
|
137
|
+
- **New Module Structure**: Familiarize yourself with the new Linear adapter organization
|
|
138
|
+
- **Test Requirements**: All new code must include comprehensive tests
|
|
139
|
+
- **Error Handling**: Use the new centralized exception system
|
|
140
|
+
- **Documentation**: Follow Google-style docstring conventions
|
|
141
|
+
|
|
142
|
+
### **For CI/CD**
|
|
143
|
+
- **Test Execution**: Use the new comprehensive test runner
|
|
144
|
+
- **Coverage Requirements**: Maintain 90%+ test coverage
|
|
145
|
+
- **Quality Gates**: All tests must pass before deployment
|
|
146
|
+
|
|
147
|
+
## 📊 **Metrics & Statistics**
|
|
148
|
+
|
|
149
|
+
### **Code Organization Metrics**
|
|
150
|
+
- **File Count**: 1 monolithic → 5 focused modules
|
|
151
|
+
- **Main File Size**: 2,389 → 812 lines (66% reduction)
|
|
152
|
+
- **Module Cohesion**: Significantly improved
|
|
153
|
+
- **Coupling**: Reduced through clear interfaces
|
|
154
|
+
|
|
155
|
+
### **Test Coverage Metrics**
|
|
156
|
+
- **Unit Tests**: 2,000+ lines across 5 test modules
|
|
157
|
+
- **E2E Tests**: 1,200+ lines covering complete workflows
|
|
158
|
+
- **Coverage**: 90%+ across critical functionality
|
|
159
|
+
- **Test Categories**: Unit, integration, E2E, and adapter-specific
|
|
160
|
+
|
|
161
|
+
### **Quality Metrics**
|
|
162
|
+
- **Type Coverage**: 100% type hints in refactored modules
|
|
163
|
+
- **Documentation**: 100% docstring coverage for public methods
|
|
164
|
+
- **Error Handling**: Comprehensive exception coverage
|
|
165
|
+
- **Code Style**: Consistent formatting and organization
|
|
166
|
+
|
|
167
|
+
## 🎯 **Future Roadmap**
|
|
168
|
+
|
|
169
|
+
### **Next Phase (v0.3.0)**
|
|
170
|
+
- **CLI Module Refactoring**: Apply same patterns to CLI module (1,785 lines)
|
|
171
|
+
- **MCP Server Refactoring**: Modularize MCP server (1,895 lines)
|
|
172
|
+
- **Other Adapter Refactoring**: GitHub (1,354 lines) and JIRA (1,011 lines)
|
|
173
|
+
|
|
174
|
+
### **Continuous Improvements**
|
|
175
|
+
- **Performance Optimization**: Further performance enhancements
|
|
176
|
+
- **Additional Test Coverage**: Expand test scenarios
|
|
177
|
+
- **Documentation Enhancement**: Comprehensive developer guides
|
|
178
|
+
- **CI/CD Integration**: Enhanced continuous integration
|
|
179
|
+
|
|
180
|
+
## 🙏 **Acknowledgments**
|
|
181
|
+
|
|
182
|
+
This release represents significant effort in improving code quality and maintainability. The comprehensive refactoring and testing work establishes a solid foundation for future development and ensures MCP Ticketer can scale confidently.
|
|
183
|
+
|
|
184
|
+
### **Key Achievements**
|
|
185
|
+
- ✅ **66% reduction** in main adapter file size
|
|
186
|
+
- ✅ **5 focused modules** with clear responsibilities
|
|
187
|
+
- ✅ **2,000+ lines of tests** ensuring reliability
|
|
188
|
+
- ✅ **90%+ test coverage** across critical functionality
|
|
189
|
+
- ✅ **100% backward compatibility** maintained
|
|
190
|
+
- ✅ **Enterprise-grade error handling** implemented
|
|
191
|
+
|
|
192
|
+
## 📞 **Support & Resources**
|
|
193
|
+
|
|
194
|
+
- **Documentation**: See updated module documentation
|
|
195
|
+
- **Testing**: Use `python3 tests/run_comprehensive_tests.py`
|
|
196
|
+
- **Issues**: Report issues with detailed context
|
|
197
|
+
- **Contributing**: Follow new testing and documentation standards
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
**MCP Ticketer v0.2.0 - Production-Ready with Enterprise-Grade Quality** 🚀
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# MCP Ticketer v0.3.0 - Bulletproof Configuration & Interactive Setup
|
|
2
|
+
|
|
3
|
+
**Release Date**: 2025-10-24
|
|
4
|
+
**Version**: 0.3.0
|
|
5
|
+
**Type**: Minor Release
|
|
6
|
+
**Status**: ✅ **READY FOR PUBLICATION**
|
|
7
|
+
|
|
8
|
+
## 🎯 **Release Overview**
|
|
9
|
+
|
|
10
|
+
MCP Ticketer v0.3.0 introduces **bulletproof ticket creation** and **interactive setup** that makes configuration reliable and user-friendly. This release solves the critical issue where tickets were being created in the wrong system and provides multiple intuitive ways to configure MCP Ticketer.
|
|
11
|
+
|
|
12
|
+
## 🚀 **Major Features**
|
|
13
|
+
|
|
14
|
+
### **1. Bulletproof Adapter Selection**
|
|
15
|
+
- **Priority-based configuration**: Clear precedence rules prevent configuration conflicts
|
|
16
|
+
- **.env file support**: Robust parsing of `.env.local` and `.env` files
|
|
17
|
+
- **Auto-discovery**: Automatic detection of adapter configuration from existing files
|
|
18
|
+
- **Environment isolation**: Project-specific configuration without global environment pollution
|
|
19
|
+
|
|
20
|
+
### **2. Interactive CLI Setup**
|
|
21
|
+
- **Visual adapter menu**: Clear numbered options with descriptions and requirements
|
|
22
|
+
- **Interactive credential collection**: Secure prompts for API keys and configuration
|
|
23
|
+
- **Smart auto-detection**: Confirms auto-detected adapters with user approval
|
|
24
|
+
- **Comprehensive guidance**: Next steps and verification instructions
|
|
25
|
+
|
|
26
|
+
### **3. Command Synonyms**
|
|
27
|
+
- **Multiple entry points**: `init`, `setup`, and `install` all provide identical functionality
|
|
28
|
+
- **User-friendly naming**: Intuitive command names for different user types
|
|
29
|
+
- **Consistent experience**: Same interactive prompts regardless of command choice
|
|
30
|
+
|
|
31
|
+
### **4. Enhanced Diagnostics**
|
|
32
|
+
- **Configuration validation**: Comprehensive checking of .env files and adapter settings
|
|
33
|
+
- **Troubleshooting guidance**: Specific recommendations for common configuration issues
|
|
34
|
+
- **Adapter testing**: Validation of adapter instantiation and credential verification
|
|
35
|
+
|
|
36
|
+
## 📋 **Detailed Changes**
|
|
37
|
+
|
|
38
|
+
### **🔧 Configuration System**
|
|
39
|
+
|
|
40
|
+
#### **New .env File Support**
|
|
41
|
+
- **Manual parsing**: No external dependencies, robust error handling
|
|
42
|
+
- **Priority handling**: `.env.local` > `.env` with clear precedence
|
|
43
|
+
- **Auto-detection**: Adapter type detection from available configuration keys
|
|
44
|
+
- **Validation**: Comprehensive checking of required fields
|
|
45
|
+
|
|
46
|
+
#### **Enhanced MCP Server**
|
|
47
|
+
- **Improved adapter selection**: Priority-based configuration loading
|
|
48
|
+
- **Better error handling**: Graceful fallbacks when configuration is missing
|
|
49
|
+
- **Clear logging**: Configuration source tracking for debugging
|
|
50
|
+
- **Robust startup**: Handles missing or invalid configuration gracefully
|
|
51
|
+
|
|
52
|
+
### **🎨 User Experience**
|
|
53
|
+
|
|
54
|
+
#### **Interactive Setup Wizard**
|
|
55
|
+
```bash
|
|
56
|
+
🚀 MCP Ticketer Setup
|
|
57
|
+
Choose which ticket system you want to connect to:
|
|
58
|
+
|
|
59
|
+
1. Linear
|
|
60
|
+
Modern project management (linear.app)
|
|
61
|
+
Requirements: API key and team ID
|
|
62
|
+
|
|
63
|
+
2. GitHub Issues
|
|
64
|
+
GitHub repository issues
|
|
65
|
+
Requirements: Personal access token, owner, and repo
|
|
66
|
+
|
|
67
|
+
3. JIRA
|
|
68
|
+
Atlassian JIRA project management
|
|
69
|
+
Requirements: Server URL, email, and API token
|
|
70
|
+
|
|
71
|
+
4. Local Files (AITrackdown)
|
|
72
|
+
Store tickets in local files (no external service)
|
|
73
|
+
Requirements: None - works offline
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### **Smart Credential Collection**
|
|
77
|
+
- **Secure input**: API keys and tokens hidden during input
|
|
78
|
+
- **Helpful guidance**: Links to credential generation pages
|
|
79
|
+
- **Field validation**: Ensures required fields are provided
|
|
80
|
+
- **Clear descriptions**: Explains what each field is for
|
|
81
|
+
|
|
82
|
+
#### **Next Steps Guidance**
|
|
83
|
+
- **Configuration testing**: Shows how to run diagnostics
|
|
84
|
+
- **Test ticket creation**: Provides sample commands
|
|
85
|
+
- **Verification instructions**: Explains where to check for created tickets
|
|
86
|
+
- **MCP client setup**: Commands for Claude, Auggie, Gemini integration
|
|
87
|
+
|
|
88
|
+
### **🛠️ Technical Improvements**
|
|
89
|
+
|
|
90
|
+
#### **Enhanced CLI Commands**
|
|
91
|
+
- **Command synonyms**: `init`, `setup`, `install` all work identically
|
|
92
|
+
- **Consistent signatures**: All commands accept the same parameters
|
|
93
|
+
- **True aliases**: `setup` and `install` are pure wrappers around `init`
|
|
94
|
+
- **Clear documentation**: Explicit indication of synonym relationships
|
|
95
|
+
|
|
96
|
+
#### **Improved Diagnostics**
|
|
97
|
+
- **Comprehensive validation**: Checks .env files, configuration files, and adapter status
|
|
98
|
+
- **Specific recommendations**: Targeted guidance for common configuration issues
|
|
99
|
+
- **Adapter testing**: Validates adapter instantiation and credential verification
|
|
100
|
+
- **Clear reporting**: Visual tables and status indicators
|
|
101
|
+
|
|
102
|
+
#### **Better Error Handling**
|
|
103
|
+
- **Graceful fallbacks**: Sensible defaults when configuration is missing
|
|
104
|
+
- **Specific error messages**: Clear guidance for different types of failures
|
|
105
|
+
- **Recovery suggestions**: Actionable steps to resolve configuration issues
|
|
106
|
+
- **Debug information**: Detailed logging for troubleshooting
|
|
107
|
+
|
|
108
|
+
## 🎯 **Problem Solved: Tickets in Wrong System**
|
|
109
|
+
|
|
110
|
+
### **Root Cause**
|
|
111
|
+
Users like Auggie were experiencing tickets being created in MCP Ticketer's internal system (AITrackdown) instead of their intended external system (Linear, GitHub, JIRA) due to improper adapter selection.
|
|
112
|
+
|
|
113
|
+
### **Solution**
|
|
114
|
+
- **Priority-based configuration**: Clear rules for adapter selection
|
|
115
|
+
- **.env file support**: Project-specific configuration without environment variables
|
|
116
|
+
- **Interactive setup**: Guides users through proper configuration
|
|
117
|
+
- **Comprehensive diagnostics**: Helps troubleshoot configuration issues
|
|
118
|
+
|
|
119
|
+
### **For Auggie Users**
|
|
120
|
+
```bash
|
|
121
|
+
# Simple setup process
|
|
122
|
+
mcp-ticketer setup
|
|
123
|
+
|
|
124
|
+
# Creates .env.local with proper configuration
|
|
125
|
+
# MCP_TICKETER_ADAPTER=linear
|
|
126
|
+
# LINEAR_API_KEY=your_key
|
|
127
|
+
# LINEAR_TEAM_ID=your_team_id
|
|
128
|
+
|
|
129
|
+
# Tickets now go to Linear, not internal storage
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 📊 **Configuration Priority**
|
|
133
|
+
|
|
134
|
+
The new configuration system follows clear priority rules:
|
|
135
|
+
|
|
136
|
+
1. **Command Line Arguments** (Highest Priority)
|
|
137
|
+
2. **.env/.env.local Files** (Recommended for MCP)
|
|
138
|
+
3. **Project Configuration Files**
|
|
139
|
+
4. **Global Configuration Files**
|
|
140
|
+
5. **Auto-Discovery from existing files**
|
|
141
|
+
6. **Default (aitrackdown)** (Lowest Priority)
|
|
142
|
+
|
|
143
|
+
## 🧪 **Quality Assurance**
|
|
144
|
+
|
|
145
|
+
### **Testing Coverage**
|
|
146
|
+
- ✅ **Interactive setup flows**: All adapter types tested
|
|
147
|
+
- ✅ **Configuration priority**: Verified precedence rules
|
|
148
|
+
- ✅ **Command synonyms**: All three commands tested
|
|
149
|
+
- ✅ **Error handling**: Graceful failure scenarios
|
|
150
|
+
- ✅ **Diagnostics**: Comprehensive validation testing
|
|
151
|
+
|
|
152
|
+
### **Backward Compatibility**
|
|
153
|
+
- ✅ **100% compatible**: All existing configurations continue to work
|
|
154
|
+
- ✅ **No breaking changes**: Existing CLI arguments and config files supported
|
|
155
|
+
- ✅ **Graceful migration**: Auto-detection of existing setups
|
|
156
|
+
- ✅ **Clear upgrade path**: Smooth transition to new configuration methods
|
|
157
|
+
|
|
158
|
+
## 🚀 **Usage Examples**
|
|
159
|
+
|
|
160
|
+
### **Quick Setup (New Users)**
|
|
161
|
+
```bash
|
|
162
|
+
# Interactive setup with any command
|
|
163
|
+
mcp-ticketer setup
|
|
164
|
+
mcp-ticketer init
|
|
165
|
+
mcp-ticketer install
|
|
166
|
+
|
|
167
|
+
# All provide the same guided experience
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### **Linear Configuration**
|
|
171
|
+
```bash
|
|
172
|
+
# Create .env.local file
|
|
173
|
+
cat > .env.local << EOF
|
|
174
|
+
MCP_TICKETER_ADAPTER=linear
|
|
175
|
+
LINEAR_API_KEY=lin_api_YOUR_LINEAR_API_KEY_HERE
|
|
176
|
+
LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
|
|
177
|
+
EOF
|
|
178
|
+
|
|
179
|
+
# Test configuration
|
|
180
|
+
mcp-ticketer diagnose
|
|
181
|
+
|
|
182
|
+
# Create test ticket
|
|
183
|
+
mcp-ticketer create "Test ticket from v0.3.0"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### **GitHub Configuration**
|
|
187
|
+
```bash
|
|
188
|
+
# Interactive setup
|
|
189
|
+
mcp-ticketer setup --adapter github
|
|
190
|
+
|
|
191
|
+
# Or create .env.local manually
|
|
192
|
+
echo "MCP_TICKETER_ADAPTER=github" > .env.local
|
|
193
|
+
echo "GITHUB_TOKEN=your_token" >> .env.local
|
|
194
|
+
echo "GITHUB_OWNER=your_username" >> .env.local
|
|
195
|
+
echo "GITHUB_REPO=your_repository" >> .env.local
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## 🔍 **Troubleshooting**
|
|
199
|
+
|
|
200
|
+
### **Enhanced Diagnostics**
|
|
201
|
+
```bash
|
|
202
|
+
# Comprehensive configuration check
|
|
203
|
+
mcp-ticketer diagnose
|
|
204
|
+
|
|
205
|
+
# Shows:
|
|
206
|
+
# - .env file status
|
|
207
|
+
# - Configuration source
|
|
208
|
+
# - Adapter validation
|
|
209
|
+
# - Credential verification
|
|
210
|
+
# - Specific recommendations
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### **Common Issues Resolved**
|
|
214
|
+
- ✅ **Tickets in wrong system**: Clear adapter selection
|
|
215
|
+
- ✅ **Missing credentials**: Interactive credential collection
|
|
216
|
+
- ✅ **Configuration conflicts**: Priority-based resolution
|
|
217
|
+
- ✅ **Setup confusion**: Multiple intuitive command names
|
|
218
|
+
|
|
219
|
+
## 📈 **Impact**
|
|
220
|
+
|
|
221
|
+
### **For Users**
|
|
222
|
+
- ✅ **Reliable ticket creation**: Tickets go to the intended system
|
|
223
|
+
- ✅ **Easy setup**: Interactive prompts guide through configuration
|
|
224
|
+
- ✅ **Multiple entry points**: Use `init`, `setup`, or `install`
|
|
225
|
+
- ✅ **Clear troubleshooting**: Comprehensive diagnostics and guidance
|
|
226
|
+
|
|
227
|
+
### **For AI Clients (Auggie, Claude, etc.)**
|
|
228
|
+
- ✅ **Bulletproof integration**: Reliable adapter selection
|
|
229
|
+
- ✅ **Project-specific config**: .env.local files for each project
|
|
230
|
+
- ✅ **Easy MCP setup**: Clear configuration for MCP servers
|
|
231
|
+
- ✅ **Consistent behavior**: Predictable ticket creation
|
|
232
|
+
|
|
233
|
+
### **For Developers**
|
|
234
|
+
- ✅ **Better architecture**: Clean separation of configuration concerns
|
|
235
|
+
- ✅ **Maintainable code**: Single implementation with command aliases
|
|
236
|
+
- ✅ **Comprehensive testing**: Extensive validation of configuration flows
|
|
237
|
+
- ✅ **Clear documentation**: Well-documented configuration system
|
|
238
|
+
|
|
239
|
+
## 🏆 **Migration Guide**
|
|
240
|
+
|
|
241
|
+
### **From v0.2.x**
|
|
242
|
+
No migration required! v0.3.0 is 100% backward compatible.
|
|
243
|
+
|
|
244
|
+
**Optional improvements:**
|
|
245
|
+
1. **Use .env.local files** instead of environment variables
|
|
246
|
+
2. **Try interactive setup** with `mcp-ticketer setup`
|
|
247
|
+
3. **Run diagnostics** to verify configuration: `mcp-ticketer diagnose`
|
|
248
|
+
|
|
249
|
+
### **For New Installations**
|
|
250
|
+
```bash
|
|
251
|
+
# Install latest version
|
|
252
|
+
pip install mcp-ticketer==0.3.0
|
|
253
|
+
|
|
254
|
+
# Interactive setup
|
|
255
|
+
mcp-ticketer setup
|
|
256
|
+
|
|
257
|
+
# Test configuration
|
|
258
|
+
mcp-ticketer diagnose
|
|
259
|
+
mcp-ticketer create "Test ticket"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## 🎉 **Conclusion**
|
|
263
|
+
|
|
264
|
+
MCP Ticketer v0.3.0 represents a **major improvement in reliability and user experience**:
|
|
265
|
+
|
|
266
|
+
- ✅ **Bulletproof ticket creation** ensures tickets go to the right system
|
|
267
|
+
- ✅ **Interactive setup** makes configuration accessible to all users
|
|
268
|
+
- ✅ **Multiple command names** provide intuitive entry points
|
|
269
|
+
- ✅ **Comprehensive diagnostics** enable easy troubleshooting
|
|
270
|
+
- ✅ **100% backward compatibility** ensures smooth upgrades
|
|
271
|
+
|
|
272
|
+
**This release solves the critical adapter selection issues while maintaining the power and flexibility that makes MCP Ticketer the universal ticket management interface for AI agents.**
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
**Upgrade Command**: `pip install --upgrade mcp-ticketer==0.3.0`
|
|
277
|
+
**Documentation**: Updated guides and examples available
|
|
278
|
+
**Support**: Enhanced diagnostics and troubleshooting tools included
|