crucible-mcp 1.0.0__tar.gz → 1.0.1__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.
Files changed (85) hide show
  1. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/PKG-INFO +1 -1
  2. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/pyproject.toml +1 -1
  3. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/compliance.py +9 -5
  4. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/PKG-INFO +1 -1
  5. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/README.md +0 -0
  6. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/setup.cfg +0 -0
  7. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/__init__.py +0 -0
  8. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/cli.py +0 -0
  9. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/domain/__init__.py +0 -0
  10. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/domain/detection.py +0 -0
  11. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/__init__.py +0 -0
  12. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/assertions.py +0 -0
  13. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/budget.py +0 -0
  14. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/bundled/error-handling.yaml +0 -0
  15. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/bundled/security.yaml +0 -0
  16. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/bundled/smart-contract.yaml +0 -0
  17. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/models.py +0 -0
  18. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/enforcement/patterns.py +0 -0
  19. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/errors.py +0 -0
  20. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/hooks/__init__.py +0 -0
  21. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/hooks/claudecode.py +0 -0
  22. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/hooks/precommit.py +0 -0
  23. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/__init__.py +0 -0
  24. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/loader.py +0 -0
  25. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/API_DESIGN.md +0 -0
  26. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/COMMITS.md +0 -0
  27. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/DATABASE.md +0 -0
  28. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/DOCUMENTATION.md +0 -0
  29. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/ERROR_HANDLING.md +0 -0
  30. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/FP.md +0 -0
  31. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/GITIGNORE.md +0 -0
  32. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/OBSERVABILITY.md +0 -0
  33. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/PRECOMMIT.md +0 -0
  34. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/SECURITY.md +0 -0
  35. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/SMART_CONTRACT.md +0 -0
  36. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/SYSTEM_DESIGN.md +0 -0
  37. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/TESTING.md +0 -0
  38. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/knowledge/principles/TYPE_SAFETY.md +0 -0
  39. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/models.py +0 -0
  40. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/review/__init__.py +0 -0
  41. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/review/core.py +0 -0
  42. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/server.py +0 -0
  43. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/__init__.py +0 -0
  44. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/accessibility-engineer/SKILL.md +0 -0
  45. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/backend-engineer/SKILL.md +0 -0
  46. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/customer-success/SKILL.md +0 -0
  47. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/data-engineer/SKILL.md +0 -0
  48. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/devops-engineer/SKILL.md +0 -0
  49. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/fde-engineer/SKILL.md +0 -0
  50. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/formal-verification/SKILL.md +0 -0
  51. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/gas-optimizer/SKILL.md +0 -0
  52. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/incident-responder/SKILL.md +0 -0
  53. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/loader.py +0 -0
  54. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/mev-researcher/SKILL.md +0 -0
  55. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/mobile-engineer/SKILL.md +0 -0
  56. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/performance-engineer/SKILL.md +0 -0
  57. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/product-engineer/SKILL.md +0 -0
  58. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/protocol-architect/SKILL.md +0 -0
  59. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/security-engineer/SKILL.md +0 -0
  60. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/tech-lead/SKILL.md +0 -0
  61. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/uiux-engineer/SKILL.md +0 -0
  62. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/skills/web3-engineer/SKILL.md +0 -0
  63. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/synthesis/__init__.py +0 -0
  64. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/tools/__init__.py +0 -0
  65. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/tools/delegation.py +0 -0
  66. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible/tools/git.py +0 -0
  67. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/SOURCES.txt +0 -0
  68. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/dependency_links.txt +0 -0
  69. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/entry_points.txt +0 -0
  70. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/requires.txt +0 -0
  71. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/src/crucible_mcp.egg-info/top_level.txt +0 -0
  72. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_cli.py +0 -0
  73. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_compliance.py +0 -0
  74. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_detection.py +0 -0
  75. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_enforcement.py +0 -0
  76. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_full_review.py +0 -0
  77. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_git.py +0 -0
  78. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_hooks_cli.py +0 -0
  79. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_integration.py +0 -0
  80. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_knowledge.py +0 -0
  81. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_precommit.py +0 -0
  82. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_server.py +0 -0
  83. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_skills.py +0 -0
  84. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_skills_loader.py +0 -0
  85. {crucible_mcp-1.0.0 → crucible_mcp-1.0.1}/tests/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crucible-mcp
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Code review MCP server for Claude. Not affiliated with Atlassian.
5
5
  Author: be.nvy
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "crucible-mcp"
3
- version = "1.0.0"
3
+ version = "1.0.1"
4
4
  description = "Code review MCP server for Claude. Not affiliated with Atlassian."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -6,6 +6,7 @@ Supports Sonnet (default) and Opus (for high-stakes assertions).
6
6
 
7
7
  import json
8
8
  import os
9
+ import sys
9
10
  from typing import Any
10
11
 
11
12
  from crucible.enforcement.budget import (
@@ -79,8 +80,8 @@ def _load_api_key_from_config() -> str | None:
79
80
  key = data.get("anthropic_api_key") or data.get("ANTHROPIC_API_KEY")
80
81
  if key:
81
82
  return key
82
- except Exception:
83
- pass # Ignore malformed config files
83
+ except Exception as e:
84
+ print(f"Warning: failed to read {config_path}: {e}", file=sys.stderr)
84
85
 
85
86
  return None
86
87
 
@@ -294,27 +295,30 @@ def run_single_assertion(
294
295
  )
295
296
 
296
297
  except ImportError as e:
298
+ print(f"Warning: LLM assertion '{assertion.id}' skipped: {e}", file=sys.stderr)
297
299
  return LLMAssertionResult(
298
300
  assertion_id=assertion.id,
299
- passed=True, # Don't fail on missing dependency
301
+ passed=True, # Graceful degradation - don't fail on missing dependency
300
302
  findings=(),
301
303
  tokens_used=0,
302
304
  model_used=model_name,
303
305
  error=str(e),
304
306
  )
305
307
  except ValueError as e:
308
+ print(f"Warning: LLM assertion '{assertion.id}' skipped: {e}", file=sys.stderr)
306
309
  return LLMAssertionResult(
307
310
  assertion_id=assertion.id,
308
- passed=True, # Don't fail on missing API key
311
+ passed=True, # Graceful degradation - don't fail on missing API key
309
312
  findings=(),
310
313
  tokens_used=0,
311
314
  model_used=model_name,
312
315
  error=str(e),
313
316
  )
314
317
  except Exception as e:
318
+ print(f"Warning: LLM assertion '{assertion.id}' failed: {e}", file=sys.stderr)
315
319
  return LLMAssertionResult(
316
320
  assertion_id=assertion.id,
317
- passed=True, # Don't fail on API errors
321
+ passed=True, # Graceful degradation - don't fail on API errors
318
322
  findings=(),
319
323
  tokens_used=0,
320
324
  model_used=model_name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crucible-mcp
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Code review MCP server for Claude. Not affiliated with Atlassian.
5
5
  Author: be.nvy
6
6
  License-Expression: MIT
File without changes
File without changes