llm-council-core 0.22.0__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 (363) hide show
  1. llm_council_core-0.22.0/.claude/skills/council-gate/SKILL.md +133 -0
  2. llm_council_core-0.22.0/.claude/skills/council-gate/references/ci-cd-rubric.md +356 -0
  3. llm_council_core-0.22.0/.claude/skills/council-review/SKILL.md +103 -0
  4. llm_council_core-0.22.0/.claude/skills/council-review/references/code-review-rubric.md +295 -0
  5. llm_council_core-0.22.0/.claude/skills/council-verify/SKILL.md +89 -0
  6. llm_council_core-0.22.0/.claude/skills/council-verify/references/rubrics.md +202 -0
  7. llm_council_core-0.22.0/.claude/skills/marketplace.json +50 -0
  8. llm_council_core-0.22.0/.devcontainer/devcontainer.json +52 -0
  9. llm_council_core-0.22.0/.env.example +90 -0
  10. llm_council_core-0.22.0/.github/CODEOWNERS +21 -0
  11. llm_council_core-0.22.0/.github/FUNDING.yml +15 -0
  12. llm_council_core-0.22.0/.github/ISSUE_TEMPLATE/bug_report.md +48 -0
  13. llm_council_core-0.22.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  14. llm_council_core-0.22.0/.github/ISSUE_TEMPLATE/feature_request.md +34 -0
  15. llm_council_core-0.22.0/.github/PULL_REQUEST_TEMPLATE.md +40 -0
  16. llm_council_core-0.22.0/.github/dependabot.yml +43 -0
  17. llm_council_core-0.22.0/.github/dependency-review-config.yml +21 -0
  18. llm_council_core-0.22.0/.github/social-preview.png +0 -0
  19. llm_council_core-0.22.0/.github/workflows/ci.yml +93 -0
  20. llm_council_core-0.22.0/.github/workflows/docs.yml +56 -0
  21. llm_council_core-0.22.0/.github/workflows/publish.yml +72 -0
  22. llm_council_core-0.22.0/.github/workflows/release-security.yml +83 -0
  23. llm_council_core-0.22.0/.github/workflows/scorecard.yml +54 -0
  24. llm_council_core-0.22.0/.github/workflows/security.yml +193 -0
  25. llm_council_core-0.22.0/.github/workflows/validate-templates.yml +132 -0
  26. llm_council_core-0.22.0/.gitignore +67 -0
  27. llm_council_core-0.22.0/.gitleaks.toml +36 -0
  28. llm_council_core-0.22.0/.pre-commit-config.yaml +21 -0
  29. llm_council_core-0.22.0/.python-version +1 -0
  30. llm_council_core-0.22.0/.semgrep/llm-security.yaml +152 -0
  31. llm_council_core-0.22.0/CHANGELOG.md +1033 -0
  32. llm_council_core-0.22.0/CITATION.cff +27 -0
  33. llm_council_core-0.22.0/CLAUDE.md +804 -0
  34. llm_council_core-0.22.0/CODE_OF_CONDUCT.md +83 -0
  35. llm_council_core-0.22.0/CONTRIBUTING.md +209 -0
  36. llm_council_core-0.22.0/GOVERNANCE.md +144 -0
  37. llm_council_core-0.22.0/LICENSE +19 -0
  38. llm_council_core-0.22.0/Makefile +115 -0
  39. llm_council_core-0.22.0/PKG-INFO +1265 -0
  40. llm_council_core-0.22.0/README.md +1210 -0
  41. llm_council_core-0.22.0/SECURITY.md +136 -0
  42. llm_council_core-0.22.0/SUPPORT.md +75 -0
  43. llm_council_core-0.22.0/data/benchmark.json +268 -0
  44. llm_council_core-0.22.0/deploy/railway/Dockerfile +42 -0
  45. llm_council_core-0.22.0/deploy/railway/TEMPLATE_OVERVIEW.md +102 -0
  46. llm_council_core-0.22.0/docker-compose.yml +38 -0
  47. llm_council_core-0.22.0/docs/CNAME +1 -0
  48. llm_council_core-0.22.0/docs/adr/ADR-000-template.md +25 -0
  49. llm_council_core-0.22.0/docs/adr/ADR-001-Council-Summary.md +992 -0
  50. llm_council_core-0.22.0/docs/adr/ADR-007-scoring-methodology.md +279 -0
  51. llm_council_core-0.22.0/docs/adr/ADR-008-package-structure.md +227 -0
  52. llm_council_core-0.22.0/docs/adr/ADR-009-http-api-open-core-boundary.md +312 -0
  53. llm_council_core-0.22.0/docs/adr/ADR-010-consensus-mechanisms.md +360 -0
  54. llm_council_core-0.22.0/docs/adr/ADR-011-cost-tracking.md +424 -0
  55. llm_council_core-0.22.0/docs/adr/ADR-012-mcp-server-reliability.md +477 -0
  56. llm_council_core-0.22.0/docs/adr/ADR-013-secure-api-key-handling.md +376 -0
  57. llm_council_core-0.22.0/docs/adr/ADR-014-verbosity-penalty-prompts.md +202 -0
  58. llm_council_core-0.22.0/docs/adr/ADR-015-bias-auditing.md +437 -0
  59. llm_council_core-0.22.0/docs/adr/ADR-016-structured-rubric-scoring.md +503 -0
  60. llm_council_core-0.22.0/docs/adr/ADR-017-response-order-randomization.md +293 -0
  61. llm_council_core-0.22.0/docs/adr/ADR-018-cross-session-bias-aggregation.md +634 -0
  62. llm_council_core-0.22.0/docs/adr/ADR-019-outlook-email-itil-analysis.md +346 -0
  63. llm_council_core-0.22.0/docs/adr/ADR-020-not-diamond-integration-strategy.md +440 -0
  64. llm_council_core-0.22.0/docs/adr/ADR-021-quint-code-fpf-integration.md +567 -0
  65. llm_council_core-0.22.0/docs/adr/ADR-022-tiered-model-selection.md +446 -0
  66. llm_council_core-0.22.0/docs/adr/ADR-023-multi-router-gateway-support.md +1068 -0
  67. llm_council_core-0.22.0/docs/adr/ADR-024-unified-routing-architecture.md +863 -0
  68. llm_council_core-0.22.0/docs/adr/ADR-025-future-integration-capabilities.md +1076 -0
  69. llm_council_core-0.22.0/docs/adr/ADR-026-dynamic-model-intelligence.md +1227 -0
  70. llm_council_core-0.22.0/docs/adr/ADR-027-frontier-tier.md +334 -0
  71. llm_council_core-0.22.0/docs/adr/ADR-028-dynamic-candidate-discovery.md +455 -0
  72. llm_council_core-0.22.0/docs/adr/ADR-029-model-audition-mechanism.md +431 -0
  73. llm_council_core-0.22.0/docs/adr/ADR-030-scoring-refinements.md +525 -0
  74. llm_council_core-0.22.0/docs/adr/ADR-031-configuration-modernization.md +237 -0
  75. llm_council_core-0.22.0/docs/adr/ADR-032-complete-config-migration.md +629 -0
  76. llm_council_core-0.22.0/docs/adr/ADR-033-oss-community-infrastructure.md +793 -0
  77. llm_council_core-0.22.0/docs/adr/ADR-034-agent-skills-verification.md +1166 -0
  78. llm_council_core-0.22.0/docs/adr/ADR-035-devsecops-implementation.md +873 -0
  79. llm_council_core-0.22.0/docs/adr/ADR-036-output-quality-quantification.md +710 -0
  80. llm_council_core-0.22.0/docs/adr/ADR-037-n8n-workflow-integration.md +666 -0
  81. llm_council_core-0.22.0/docs/adr/ADR-038-one-click-deployment-strategy.md +481 -0
  82. llm_council_core-0.22.0/docs/adr/ADR-039-llmrouter-integration.md +293 -0
  83. llm_council_core-0.22.0/docs/announcements/agent-skills-launch.md +383 -0
  84. llm_council_core-0.22.0/docs/announcements/council-verification-integration.md +332 -0
  85. llm_council_core-0.22.0/docs/api.md +218 -0
  86. llm_council_core-0.22.0/docs/architecture/adrs.md +61 -0
  87. llm_council_core-0.22.0/docs/architecture/overview.md +77 -0
  88. llm_council_core-0.22.0/docs/blog/01-multi-model-architecture.md +186 -0
  89. llm_council_core-0.22.0/docs/blog/02-fault-tolerant-gateway.md +258 -0
  90. llm_council_core-0.22.0/docs/blog/03-voting-logic-borda.md +288 -0
  91. llm_council_core-0.22.0/docs/blog/04-latency-tax-parallel.md +298 -0
  92. llm_council_core-0.22.0/docs/blog/05-detecting-evaluator-bias.md +371 -0
  93. llm_council_core-0.22.0/docs/blog/06-accuracy-ceiling.md +282 -0
  94. llm_council_core-0.22.0/docs/blog/07-shadow-mode-auditions.md +386 -0
  95. llm_council_core-0.22.0/docs/blog/08-n8n-workflow-automation.md +347 -0
  96. llm_council_core-0.22.0/docs/blog/09-one-click-deployment.md +220 -0
  97. llm_council_core-0.22.0/docs/blog/10-agent-skills-introduction.md +257 -0
  98. llm_council_core-0.22.0/docs/blog/11-verification-security-architecture.md +302 -0
  99. llm_council_core-0.22.0/docs/blog/12-cicd-quality-gates.md +549 -0
  100. llm_council_core-0.22.0/docs/blog/13-council-deliberation-verification.md +305 -0
  101. llm_council_core-0.22.0/docs/contributing.md +33 -0
  102. llm_council_core-0.22.0/docs/deployment/index.md +84 -0
  103. llm_council_core-0.22.0/docs/deployment/local.md +218 -0
  104. llm_council_core-0.22.0/docs/deployment/railway.md +149 -0
  105. llm_council_core-0.22.0/docs/deployment/render.md +174 -0
  106. llm_council_core-0.22.0/docs/examples/n8n/code-review-workflow.json +137 -0
  107. llm_council_core-0.22.0/docs/examples/n8n/design-decision-workflow.json +153 -0
  108. llm_council_core-0.22.0/docs/examples/n8n/support-triage-workflow.json +245 -0
  109. llm_council_core-0.22.0/docs/getting-started/configuration.md +77 -0
  110. llm_council_core-0.22.0/docs/getting-started/installation.md +71 -0
  111. llm_council_core-0.22.0/docs/getting-started/quickstart.md +62 -0
  112. llm_council_core-0.22.0/docs/guides/creating-skills.md +299 -0
  113. llm_council_core-0.22.0/docs/guides/http-api.md +208 -0
  114. llm_council_core-0.22.0/docs/guides/mcp.md +85 -0
  115. llm_council_core-0.22.0/docs/guides/python.md +82 -0
  116. llm_council_core-0.22.0/docs/guides/skills.md +288 -0
  117. llm_council_core-0.22.0/docs/img/logo.png +0 -0
  118. llm_council_core-0.22.0/docs/img/logo.svg +64 -0
  119. llm_council_core-0.22.0/docs/index.md +63 -0
  120. llm_council_core-0.22.0/docs/integrations/index.md +62 -0
  121. llm_council_core-0.22.0/docs/integrations/n8n.md +331 -0
  122. llm_council_core-0.22.0/docs/stylesheets/extra.css +107 -0
  123. llm_council_core-0.22.0/llm_council.yaml +161 -0
  124. llm_council_core-0.22.0/mkdocs.yml +149 -0
  125. llm_council_core-0.22.0/pyproject.toml +109 -0
  126. llm_council_core-0.22.0/railway.json +14 -0
  127. llm_council_core-0.22.0/render.yaml +25 -0
  128. llm_council_core-0.22.0/sonar-project.properties +35 -0
  129. llm_council_core-0.22.0/src/llm_council/__init__.py +75 -0
  130. llm_council_core-0.22.0/src/llm_council/_version.py +34 -0
  131. llm_council_core-0.22.0/src/llm_council/audition/__init__.py +67 -0
  132. llm_council_core-0.22.0/src/llm_council/audition/selection.py +191 -0
  133. llm_council_core-0.22.0/src/llm_council/audition/store.py +128 -0
  134. llm_council_core-0.22.0/src/llm_council/audition/tracker.py +337 -0
  135. llm_council_core-0.22.0/src/llm_council/audition/types.py +216 -0
  136. llm_council_core-0.22.0/src/llm_council/audition/voting.py +55 -0
  137. llm_council_core-0.22.0/src/llm_council/bias_aggregation.py +812 -0
  138. llm_council_core-0.22.0/src/llm_council/bias_audit.py +406 -0
  139. llm_council_core-0.22.0/src/llm_council/bias_persistence.py +606 -0
  140. llm_council_core-0.22.0/src/llm_council/cache.py +242 -0
  141. llm_council_core-0.22.0/src/llm_council/cli.py +272 -0
  142. llm_council_core-0.22.0/src/llm_council/cost_ceiling.py +109 -0
  143. llm_council_core-0.22.0/src/llm_council/council.py +2143 -0
  144. llm_council_core-0.22.0/src/llm_council/dissent.py +274 -0
  145. llm_council_core-0.22.0/src/llm_council/evaluation.py +465 -0
  146. llm_council_core-0.22.0/src/llm_council/frontier_fallback.py +239 -0
  147. llm_council_core-0.22.0/src/llm_council/gateway/__init__.py +88 -0
  148. llm_council_core-0.22.0/src/llm_council/gateway/base.py +125 -0
  149. llm_council_core-0.22.0/src/llm_council/gateway/circuit_breaker.py +390 -0
  150. llm_council_core-0.22.0/src/llm_council/gateway/circuit_breaker_registry.py +182 -0
  151. llm_council_core-0.22.0/src/llm_council/gateway/direct.py +631 -0
  152. llm_council_core-0.22.0/src/llm_council/gateway/errors.py +89 -0
  153. llm_council_core-0.22.0/src/llm_council/gateway/ollama.py +513 -0
  154. llm_council_core-0.22.0/src/llm_council/gateway/openrouter.py +368 -0
  155. llm_council_core-0.22.0/src/llm_council/gateway/requesty.py +364 -0
  156. llm_council_core-0.22.0/src/llm_council/gateway/router.py +312 -0
  157. llm_council_core-0.22.0/src/llm_council/gateway/types.py +120 -0
  158. llm_council_core-0.22.0/src/llm_council/gateway_adapter.py +330 -0
  159. llm_council_core-0.22.0/src/llm_council/graduation.py +123 -0
  160. llm_council_core-0.22.0/src/llm_council/http_server.py +269 -0
  161. llm_council_core-0.22.0/src/llm_council/layer_contracts.py +496 -0
  162. llm_council_core-0.22.0/src/llm_council/mcp_server.py +523 -0
  163. llm_council_core-0.22.0/src/llm_council/metadata/__init__.py +145 -0
  164. llm_council_core-0.22.0/src/llm_council/metadata/cache.py +174 -0
  165. llm_council_core-0.22.0/src/llm_council/metadata/discovery.py +339 -0
  166. llm_council_core-0.22.0/src/llm_council/metadata/dynamic_provider.py +179 -0
  167. llm_council_core-0.22.0/src/llm_council/metadata/intersection.py +118 -0
  168. llm_council_core-0.22.0/src/llm_council/metadata/litellm_adapter.py +188 -0
  169. llm_council_core-0.22.0/src/llm_council/metadata/offline.py +56 -0
  170. llm_council_core-0.22.0/src/llm_council/metadata/openrouter_client.py +184 -0
  171. llm_council_core-0.22.0/src/llm_council/metadata/protocol.py +100 -0
  172. llm_council_core-0.22.0/src/llm_council/metadata/registry.py +281 -0
  173. llm_council_core-0.22.0/src/llm_council/metadata/scoring.py +282 -0
  174. llm_council_core-0.22.0/src/llm_council/metadata/selection.py +755 -0
  175. llm_council_core-0.22.0/src/llm_council/metadata/startup.py +177 -0
  176. llm_council_core-0.22.0/src/llm_council/metadata/static_registry.py +218 -0
  177. llm_council_core-0.22.0/src/llm_council/metadata/types.py +96 -0
  178. llm_council_core-0.22.0/src/llm_council/metadata/worker.py +122 -0
  179. llm_council_core-0.22.0/src/llm_council/models/registry.yaml +373 -0
  180. llm_council_core-0.22.0/src/llm_council/observability/__init__.py +30 -0
  181. llm_council_core-0.22.0/src/llm_council/observability/metrics_adapter.py +550 -0
  182. llm_council_core-0.22.0/src/llm_council/openrouter.py +272 -0
  183. llm_council_core-0.22.0/src/llm_council/performance/__init__.py +45 -0
  184. llm_council_core-0.22.0/src/llm_council/performance/integration.py +149 -0
  185. llm_council_core-0.22.0/src/llm_council/performance/store.py +105 -0
  186. llm_council_core-0.22.0/src/llm_council/performance/tracker.py +293 -0
  187. llm_council_core-0.22.0/src/llm_council/performance/types.py +96 -0
  188. llm_council_core-0.22.0/src/llm_council/reasoning/__init__.py +48 -0
  189. llm_council_core-0.22.0/src/llm_council/reasoning/tracker.py +127 -0
  190. llm_council_core-0.22.0/src/llm_council/reasoning/types.py +126 -0
  191. llm_council_core-0.22.0/src/llm_council/rubric.py +200 -0
  192. llm_council_core-0.22.0/src/llm_council/safety_gate.py +166 -0
  193. llm_council_core-0.22.0/src/llm_council/skills/__init__.py +50 -0
  194. llm_council_core-0.22.0/src/llm_council/skills/loader.py +449 -0
  195. llm_council_core-0.22.0/src/llm_council/telemetry.py +185 -0
  196. llm_council_core-0.22.0/src/llm_council/telemetry_client.py +226 -0
  197. llm_council_core-0.22.0/src/llm_council/tier_contract.py +333 -0
  198. llm_council_core-0.22.0/src/llm_council/triage/__init__.py +180 -0
  199. llm_council_core-0.22.0/src/llm_council/triage/complexity.py +234 -0
  200. llm_council_core-0.22.0/src/llm_council/triage/fast_path.py +446 -0
  201. llm_council_core-0.22.0/src/llm_council/triage/not_diamond.py +366 -0
  202. llm_council_core-0.22.0/src/llm_council/triage/prompt_optimizer.py +169 -0
  203. llm_council_core-0.22.0/src/llm_council/triage/rollback_metrics.py +390 -0
  204. llm_council_core-0.22.0/src/llm_council/triage/shadow_sampling.py +412 -0
  205. llm_council_core-0.22.0/src/llm_council/triage/types.py +94 -0
  206. llm_council_core-0.22.0/src/llm_council/triage/wildcard.py +232 -0
  207. llm_council_core-0.22.0/src/llm_council/unified_config.py +1616 -0
  208. llm_council_core-0.22.0/src/llm_council/verdict.py +366 -0
  209. llm_council_core-0.22.0/src/llm_council/verification/__init__.py +76 -0
  210. llm_council_core-0.22.0/src/llm_council/verification/api.py +661 -0
  211. llm_council_core-0.22.0/src/llm_council/verification/context.py +258 -0
  212. llm_council_core-0.22.0/src/llm_council/verification/formatting.py +133 -0
  213. llm_council_core-0.22.0/src/llm_council/verification/transcript.py +321 -0
  214. llm_council_core-0.22.0/src/llm_council/verification/types.py +222 -0
  215. llm_council_core-0.22.0/src/llm_council/verification/verdict_extractor.py +349 -0
  216. llm_council_core-0.22.0/src/llm_council/voting.py +94 -0
  217. llm_council_core-0.22.0/src/llm_council/webhooks/__init__.py +89 -0
  218. llm_council_core-0.22.0/src/llm_council/webhooks/_council_runner.py +164 -0
  219. llm_council_core-0.22.0/src/llm_council/webhooks/dispatcher.py +276 -0
  220. llm_council_core-0.22.0/src/llm_council/webhooks/event_bridge.py +332 -0
  221. llm_council_core-0.22.0/src/llm_council/webhooks/hmac_auth.py +137 -0
  222. llm_council_core-0.22.0/src/llm_council/webhooks/sse.py +122 -0
  223. llm_council_core-0.22.0/src/llm_council/webhooks/types.py +76 -0
  224. llm_council_core-0.22.0/tests/cassettes/.gitkeep +0 -0
  225. llm_council_core-0.22.0/tests/cassettes/TestExecuteWithFallback.test_returns_response_on_success.yaml +26 -0
  226. llm_council_core-0.22.0/tests/cassettes/TestOpenRouterClient.test_fetch_models_extracts_modalities.yaml +24 -0
  227. llm_council_core-0.22.0/tests/cassettes/TestOpenRouterClient.test_fetch_models_extracts_pricing_correctly.yaml +24 -0
  228. llm_council_core-0.22.0/tests/cassettes/TestOpenRouterClient.test_fetch_models_returns_model_list.yaml +24 -0
  229. llm_council_core-0.22.0/tests/cassettes/test_council_health_check_success.yaml +26 -0
  230. llm_council_core-0.22.0/tests/cassettes/test_query_model_with_status_success.yaml +26 -0
  231. llm_council_core-0.22.0/tests/cassettes/test_query_models_with_progress.yaml +50 -0
  232. llm_council_core-0.22.0/tests/cassettes/test_query_models_with_progress_no_callback.yaml +26 -0
  233. llm_council_core-0.22.0/tests/conftest.py +111 -0
  234. llm_council_core-0.22.0/tests/integration/__init__.py +1 -0
  235. llm_council_core-0.22.0/tests/integration/skills/__init__.py +0 -0
  236. llm_council_core-0.22.0/tests/integration/skills/test_council_gate.py +372 -0
  237. llm_council_core-0.22.0/tests/integration/skills/test_council_review.py +325 -0
  238. llm_council_core-0.22.0/tests/integration/skills/test_council_verify.py +252 -0
  239. llm_council_core-0.22.0/tests/integration/verification/__init__.py +1 -0
  240. llm_council_core-0.22.0/tests/integration/verification/test_api.py +402 -0
  241. llm_council_core-0.22.0/tests/integration/verification/test_council_integration.py +648 -0
  242. llm_council_core-0.22.0/tests/test_audition_observability.py +253 -0
  243. llm_council_core-0.22.0/tests/test_audition_selection.py +257 -0
  244. llm_council_core-0.22.0/tests/test_audition_tracker.py +251 -0
  245. llm_council_core-0.22.0/tests/test_audition_transitions.py +509 -0
  246. llm_council_core-0.22.0/tests/test_audition_types.py +269 -0
  247. llm_council_core-0.22.0/tests/test_audition_voting.py +132 -0
  248. llm_council_core-0.22.0/tests/test_bias_aggregation.py +91 -0
  249. llm_council_core-0.22.0/tests/test_bias_audit.py +623 -0
  250. llm_council_core-0.22.0/tests/test_bias_persistence.py +961 -0
  251. llm_council_core-0.22.0/tests/test_cache.py +195 -0
  252. llm_council_core-0.22.0/tests/test_circuit_breaker_enhanced.py +438 -0
  253. llm_council_core-0.22.0/tests/test_circuit_breaker_registry.py +354 -0
  254. llm_council_core-0.22.0/tests/test_circuit_breaker_selection.py +302 -0
  255. llm_council_core-0.22.0/tests/test_cli.py +154 -0
  256. llm_council_core-0.22.0/tests/test_config.py +165 -0
  257. llm_council_core-0.22.0/tests/test_cost_ceiling.py +181 -0
  258. llm_council_core-0.22.0/tests/test_cost_scoring.py +374 -0
  259. llm_council_core-0.22.0/tests/test_council.py +316 -0
  260. llm_council_core-0.22.0/tests/test_council_integration.py +178 -0
  261. llm_council_core-0.22.0/tests/test_council_reliability.py +499 -0
  262. llm_council_core-0.22.0/tests/test_deployment.py +522 -0
  263. llm_council_core-0.22.0/tests/test_devcontainer.py +93 -0
  264. llm_council_core-0.22.0/tests/test_discovery.py +377 -0
  265. llm_council_core-0.22.0/tests/test_dissent.py +319 -0
  266. llm_council_core-0.22.0/tests/test_docs_build.py +125 -0
  267. llm_council_core-0.22.0/tests/test_dynamic_provider.py +299 -0
  268. llm_council_core-0.22.0/tests/test_env_example.py +99 -0
  269. llm_council_core-0.22.0/tests/test_evaluation.py +239 -0
  270. llm_council_core-0.22.0/tests/test_event_bridge.py +523 -0
  271. llm_council_core-0.22.0/tests/test_fallback_integration.py +183 -0
  272. llm_council_core-0.22.0/tests/test_fast_path.py +383 -0
  273. llm_council_core-0.22.0/tests/test_frontier_fallback.py +202 -0
  274. llm_council_core-0.22.0/tests/test_frontier_observability.py +164 -0
  275. llm_council_core-0.22.0/tests/test_gateway_base.py +347 -0
  276. llm_council_core-0.22.0/tests/test_gateway_circuit_breaker.py +298 -0
  277. llm_council_core-0.22.0/tests/test_gateway_council_integration.py +129 -0
  278. llm_council_core-0.22.0/tests/test_gateway_direct.py +366 -0
  279. llm_council_core-0.22.0/tests/test_gateway_fallback.py +81 -0
  280. llm_council_core-0.22.0/tests/test_gateway_ollama.py +599 -0
  281. llm_council_core-0.22.0/tests/test_gateway_openrouter.py +347 -0
  282. llm_council_core-0.22.0/tests/test_gateway_requesty.py +336 -0
  283. llm_council_core-0.22.0/tests/test_gateway_router.py +331 -0
  284. llm_council_core-0.22.0/tests/test_graduation.py +311 -0
  285. llm_council_core-0.22.0/tests/test_http_server.py +377 -0
  286. llm_council_core-0.22.0/tests/test_layer_contracts.py +383 -0
  287. llm_council_core-0.22.0/tests/test_layer_integration.py +582 -0
  288. llm_council_core-0.22.0/tests/test_litellm_adapter.py +141 -0
  289. llm_council_core-0.22.0/tests/test_makefile.py +121 -0
  290. llm_council_core-0.22.0/tests/test_mcp_server.py +409 -0
  291. llm_council_core-0.22.0/tests/test_mcp_tier_integration.py +199 -0
  292. llm_council_core-0.22.0/tests/test_metadata_cache.py +260 -0
  293. llm_council_core-0.22.0/tests/test_metadata_integration.py +377 -0
  294. llm_council_core-0.22.0/tests/test_metadata_protocol.py +157 -0
  295. llm_council_core-0.22.0/tests/test_metadata_types.py +181 -0
  296. llm_council_core-0.22.0/tests/test_metrics_adapter.py +478 -0
  297. llm_council_core-0.22.0/tests/test_n8n_examples.py +238 -0
  298. llm_council_core-0.22.0/tests/test_not_diamond.py +291 -0
  299. llm_council_core-0.22.0/tests/test_observability.py +339 -0
  300. llm_council_core-0.22.0/tests/test_observability_wiring.py +159 -0
  301. llm_council_core-0.22.0/tests/test_offline_mode.py +170 -0
  302. llm_council_core-0.22.0/tests/test_openrouter.py +186 -0
  303. llm_council_core-0.22.0/tests/test_openrouter_client.py +317 -0
  304. llm_council_core-0.22.0/tests/test_performance_config.py +130 -0
  305. llm_council_core-0.22.0/tests/test_performance_integration.py +292 -0
  306. llm_council_core-0.22.0/tests/test_performance_tracker.py +510 -0
  307. llm_council_core-0.22.0/tests/test_performance_types.py +504 -0
  308. llm_council_core-0.22.0/tests/test_quality_percentile.py +285 -0
  309. llm_council_core-0.22.0/tests/test_quality_tier_scores.py +167 -0
  310. llm_council_core-0.22.0/tests/test_reasoning_config.py +339 -0
  311. llm_council_core-0.22.0/tests/test_reasoning_injection.py +278 -0
  312. llm_council_core-0.22.0/tests/test_reasoning_tracker.py +251 -0
  313. llm_council_core-0.22.0/tests/test_registry.py +348 -0
  314. llm_council_core-0.22.0/tests/test_rollback_metrics.py +252 -0
  315. llm_council_core-0.22.0/tests/test_rubric.py +717 -0
  316. llm_council_core-0.22.0/tests/test_safety_gate.py +219 -0
  317. llm_council_core-0.22.0/tests/test_secure_key_handling.py +440 -0
  318. llm_council_core-0.22.0/tests/test_security_configs.py +409 -0
  319. llm_council_core-0.22.0/tests/test_security_workflows.py +584 -0
  320. llm_council_core-0.22.0/tests/test_selection_metadata.py +382 -0
  321. llm_council_core-0.22.0/tests/test_shadow_integration.py +257 -0
  322. llm_council_core-0.22.0/tests/test_shadow_sampling.py +352 -0
  323. llm_council_core-0.22.0/tests/test_shadow_voting.py +282 -0
  324. llm_council_core-0.22.0/tests/test_sse_streaming.py +462 -0
  325. llm_council_core-0.22.0/tests/test_startup.py +164 -0
  326. llm_council_core-0.22.0/tests/test_static_registry.py +273 -0
  327. llm_council_core-0.22.0/tests/test_style_normalization.py +111 -0
  328. llm_council_core-0.22.0/tests/test_telemetry.py +152 -0
  329. llm_council_core-0.22.0/tests/test_telemetry_alignment.py +60 -0
  330. llm_council_core-0.22.0/tests/test_telemetry_config.py +262 -0
  331. llm_council_core-0.22.0/tests/test_tier_contract.py +377 -0
  332. llm_council_core-0.22.0/tests/test_tier_council_integration.py +239 -0
  333. llm_council_core-0.22.0/tests/test_tier_intersection.py +311 -0
  334. llm_council_core-0.22.0/tests/test_tier_model_pools.py +230 -0
  335. llm_council_core-0.22.0/tests/test_tier_selection.py +570 -0
  336. llm_council_core-0.22.0/tests/test_triage_complexity.py +232 -0
  337. llm_council_core-0.22.0/tests/test_triage_council_integration.py +257 -0
  338. llm_council_core-0.22.0/tests/test_triage_prompt_optimizer.py +263 -0
  339. llm_council_core-0.22.0/tests/test_triage_types.py +332 -0
  340. llm_council_core-0.22.0/tests/test_triage_wildcard.py +409 -0
  341. llm_council_core-0.22.0/tests/test_unified_config.py +2027 -0
  342. llm_council_core-0.22.0/tests/test_vcr_infrastructure.py +99 -0
  343. llm_council_core-0.22.0/tests/test_verdict.py +485 -0
  344. llm_council_core-0.22.0/tests/test_voting.py +137 -0
  345. llm_council_core-0.22.0/tests/test_webhook_integration.py +472 -0
  346. llm_council_core-0.22.0/tests/test_webhooks_dispatcher.py +366 -0
  347. llm_council_core-0.22.0/tests/test_webhooks_hmac.py +271 -0
  348. llm_council_core-0.22.0/tests/test_webhooks_sse.py +263 -0
  349. llm_council_core-0.22.0/tests/test_webhooks_types.py +186 -0
  350. llm_council_core-0.22.0/tests/test_worker.py +294 -0
  351. llm_council_core-0.22.0/tests/unit/__init__.py +1 -0
  352. llm_council_core-0.22.0/tests/unit/skills/__init__.py +1 -0
  353. llm_council_core-0.22.0/tests/unit/skills/test_loader.py +383 -0
  354. llm_council_core-0.22.0/tests/unit/skills/test_skill_format.py +346 -0
  355. llm_council_core-0.22.0/tests/unit/skills/test_skill_loader_robustness.py +486 -0
  356. llm_council_core-0.22.0/tests/unit/test_mcp_audit.py +313 -0
  357. llm_council_core-0.22.0/tests/unit/test_mcp_verify.py +417 -0
  358. llm_council_core-0.22.0/tests/unit/verification/__init__.py +1 -0
  359. llm_council_core-0.22.0/tests/unit/verification/test_async_file_fetch.py +491 -0
  360. llm_council_core-0.22.0/tests/unit/verification/test_context.py +319 -0
  361. llm_council_core-0.22.0/tests/unit/verification/test_formatting.py +258 -0
  362. llm_council_core-0.22.0/tests/unit/verification/test_transcript.py +430 -0
  363. llm_council_core-0.22.0/tests/unit/verification/test_types.py +411 -0
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: council-gate
3
+ description: |
4
+ Quality gate using LLM Council multi-model consensus for CI/CD pipelines.
5
+ Use for automated approval workflows and pipeline quality checks.
6
+ Keywords: gate, CI, CD, pipeline, automated approval, quality gate, GitHub Actions
7
+
8
+ license: Apache-2.0
9
+ compatibility: "llm-council >= 2.0, mcp >= 1.0, github-actions >= 2.0"
10
+ metadata:
11
+ category: ci-cd
12
+ domain: devops
13
+ council-version: "2.0"
14
+ author: amiable-dev
15
+ repository: https://github.com/amiable-dev/llm-council
16
+
17
+ allowed-tools: "Read Grep mcp:llm-council/verify mcp:llm-council/audit"
18
+ ---
19
+
20
+ # Council Gate Skill
21
+
22
+ Automated quality gate using multi-model consensus for CI/CD pipelines.
23
+
24
+ ## When to Use
25
+
26
+ - Add AI-powered quality checks to GitHub Actions
27
+ - Automate PR approval workflows
28
+ - Gate deployments on multi-model verification
29
+ - Enforce quality standards in pipelines
30
+
31
+ ## Exit Codes
32
+
33
+ | Code | Verdict | CI/CD Behavior |
34
+ |------|---------|----------------|
35
+ | `0` | PASS | Pipeline continues |
36
+ | `1` | FAIL | Pipeline fails |
37
+ | `2` | UNCLEAR | Pipeline pauses for human review |
38
+
39
+ ## Transcript Location
40
+
41
+ All deliberations are saved for audit:
42
+
43
+ ```
44
+ .council/logs/{timestamp}-{hash}/
45
+ ├── request.json # Input snapshot
46
+ ├── stage1.json # Model responses
47
+ ├── stage2.json # Peer reviews
48
+ ├── stage3.json # Synthesis
49
+ └── result.json # Final verdict
50
+ ```
51
+
52
+ ## GitHub Actions Integration
53
+
54
+ ```yaml
55
+ name: Council Quality Gate
56
+
57
+ on:
58
+ pull_request:
59
+ branches: [main, master]
60
+
61
+ jobs:
62
+ council-gate:
63
+ runs-on: ubuntu-latest
64
+ steps:
65
+ - uses: actions/checkout@v4
66
+ with:
67
+ fetch-depth: 0
68
+
69
+ - name: Install LLM Council
70
+ run: pip install llm-council-core
71
+
72
+ - name: Run Council Gate
73
+ env:
74
+ OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
75
+ run: |
76
+ llm-council gate \
77
+ --snapshot ${{ github.sha }} \
78
+ --rubric-focus Security \
79
+ --confidence-threshold 0.8
80
+
81
+ - name: Upload Transcript
82
+ if: always()
83
+ uses: actions/upload-artifact@v4
84
+ with:
85
+ name: council-transcript
86
+ path: .council/logs/
87
+ ```
88
+
89
+ ## Configuration
90
+
91
+ | Parameter | Default | Description |
92
+ |-----------|---------|-------------|
93
+ | `confidence_threshold` | 0.7 | Minimum confidence for PASS |
94
+ | `rubric_focus` | null | Focus area (Security, Performance) |
95
+ | `timeout` | 300s | Maximum execution time |
96
+ | `tier` | balanced | Council tier (quick, balanced, high) |
97
+
98
+ ## Output Schema
99
+
100
+ ```json
101
+ {
102
+ "verdict": "pass",
103
+ "confidence": 0.85,
104
+ "blocking_issues": [],
105
+ "rationale": "All models agreed...",
106
+ "exit_code": 0,
107
+ "transcript_path": ".council/logs/2025-12-31T..."
108
+ }
109
+ ```
110
+
111
+ ## Example Usage
112
+
113
+ ```bash
114
+ # Basic gate check
115
+ council-gate --snapshot $(git rev-parse HEAD)
116
+
117
+ # Security-focused gate
118
+ council-gate --rubric-focus Security --confidence-threshold 0.9
119
+
120
+ # Quick tier for faster feedback
121
+ council-gate --tier quick --timeout 60
122
+ ```
123
+
124
+ ## Progressive Disclosure
125
+
126
+ - **Level 1**: This metadata (~200 tokens)
127
+ - **Level 2**: Full instructions above (~800 tokens)
128
+ - **Level 3**: See `references/ci-cd-rubric.md` for CI/CD-specific scoring
129
+
130
+ ## Related Skills
131
+
132
+ - `council-verify`: General verification
133
+ - `council-review`: Code review with feedback
@@ -0,0 +1,356 @@
1
+ # CI/CD Quality Gate Rubrics
2
+
3
+ Detailed scoring guidelines for LLM Council CI/CD quality gates. Each dimension uses a 1-10 scale with pipeline-specific behavioral anchors.
4
+
5
+ ## Core Dimensions
6
+
7
+ ### Accuracy (Weight: 30%)
8
+
9
+ Measures correctness of changes and absence of regressions.
10
+
11
+ | Score | Anchor | Description |
12
+ |-------|--------|-------------|
13
+ | 9-10 | **Excellent** | No regressions; all changes correct; passes all validation |
14
+ | 7-8 | **Good** | Minor issues that don't affect production; mostly correct |
15
+ | 5-6 | **Mixed** | Some issues present but core functionality intact |
16
+ | 3-4 | **Poor** | Significant issues; would cause production problems |
17
+ | 1-2 | **Critical** | Breaking changes; would cause outage or data loss |
18
+
19
+ **CI/CD Accuracy Checks:**
20
+ - No breaking API changes without versioning
21
+ - Database migrations are reversible
22
+ - Configuration changes are valid
23
+ - Dependency updates are compatible
24
+ - Environment variables are documented
25
+
26
+ **Accuracy Ceiling Rule**: Per ADR-016, accuracy acts as a ceiling on overall scores:
27
+ - Accuracy < 5: Overall score capped at 4.0 (blocking issues)
28
+ - Accuracy 5-6: Overall score capped at 7.0 (needs fixes)
29
+ - Accuracy ≥ 7: No ceiling applied
30
+
31
+ ### Completeness (Weight: 25%)
32
+
33
+ Measures coverage of pipeline requirements and validation.
34
+
35
+ | Score | Anchor | Description |
36
+ |-------|--------|-------------|
37
+ | 9-10 | **Comprehensive** | All checks pass; full test coverage; complete validation |
38
+ | 7-8 | **Adequate** | Main checks pass; good coverage; minor gaps |
39
+ | 5-6 | **Partial** | Core checks pass; some gaps in coverage |
40
+ | 3-4 | **Incomplete** | Major checks failing; significant gaps |
41
+ | 1-2 | **Minimal** | Most checks failing; minimal validation |
42
+
43
+ **Completeness Checks:**
44
+ - All required tests passing
45
+ - Lint/format checks pass
46
+ - Type checking passes
47
+ - Security scans complete
48
+ - Coverage thresholds met
49
+ - Documentation updated
50
+
51
+ ### Clarity (Weight: 20%)
52
+
53
+ Measures clarity of changes for review and rollback.
54
+
55
+ | Score | Anchor | Description |
56
+ |-------|--------|-------------|
57
+ | 9-10 | **Crystal Clear** | Changes well-documented; easy to review/rollback |
58
+ | 7-8 | **Clear** | Good documentation; straightforward changes |
59
+ | 5-6 | **Acceptable** | Understandable with effort; some confusion |
60
+ | 3-4 | **Unclear** | Poor documentation; hard to understand changes |
61
+ | 1-2 | **Opaque** | No documentation; unclear purpose |
62
+
63
+ **Clarity Checks:**
64
+ - Commit messages are descriptive
65
+ - PR description explains changes
66
+ - Breaking changes documented
67
+ - Migration steps provided
68
+ - Rollback procedure clear
69
+
70
+ ### Conciseness (Weight: 15%)
71
+
72
+ Measures change scope and deployment risk.
73
+
74
+ | Score | Anchor | Description |
75
+ |-------|--------|-------------|
76
+ | 9-10 | **Optimal** | Focused changes; minimal blast radius |
77
+ | 7-8 | **Efficient** | Well-scoped; manageable risk |
78
+ | 5-6 | **Adequate** | Some scope creep; moderate risk |
79
+ | 3-4 | **Verbose** | Too many changes; high risk |
80
+ | 1-2 | **Bloated** | Massive changes; extreme risk |
81
+
82
+ **Conciseness Checks:**
83
+ - Single responsibility changes
84
+ - No unrelated refactoring
85
+ - Feature flags for large changes
86
+ - Incremental rollout supported
87
+ - Reasonable diff size
88
+
89
+ ### Relevance (Weight: 10%)
90
+
91
+ Measures alignment with deployment requirements.
92
+
93
+ | Score | Anchor | Description |
94
+ |-------|--------|-------------|
95
+ | 9-10 | **Perfectly Aligned** | Matches deployment criteria exactly |
96
+ | 7-8 | **Well Aligned** | Meets requirements with minor additions |
97
+ | 5-6 | **Somewhat Aligned** | Core requirements met, some tangents |
98
+ | 3-4 | **Misaligned** | Partially addresses wrong criteria |
99
+ | 1-2 | **Off Target** | Does not meet deployment criteria |
100
+
101
+ **Relevance Checks:**
102
+ - Matches release criteria
103
+ - Appropriate for target environment
104
+ - Follows deployment schedule
105
+ - No unauthorized changes
106
+
107
+ ## Exit Code Determination
108
+
109
+ ### Exit Code 0: PASS
110
+
111
+ Pipeline continues when ALL conditions met:
112
+ - Confidence ≥ threshold (default 0.7)
113
+ - No blocking issues
114
+ - All critical checks pass
115
+
116
+ ```json
117
+ {
118
+ "verdict": "pass",
119
+ "exit_code": 0,
120
+ "action": "Deploy proceeds"
121
+ }
122
+ ```
123
+
124
+ ### Exit Code 1: FAIL
125
+
126
+ Pipeline fails when ANY condition met:
127
+ - Blocking issues present
128
+ - Critical security vulnerabilities
129
+ - Breaking changes detected
130
+ - Required checks failing
131
+
132
+ ```json
133
+ {
134
+ "verdict": "fail",
135
+ "exit_code": 1,
136
+ "action": "Pipeline halted, fix required"
137
+ }
138
+ ```
139
+
140
+ ### Exit Code 2: UNCLEAR
141
+
142
+ Pipeline pauses for human review when:
143
+ - Confidence < threshold but no blocking issues
144
+ - Conflicting reviewer opinions
145
+ - Edge cases requiring judgment
146
+ - Insufficient context
147
+
148
+ ```json
149
+ {
150
+ "verdict": "unclear",
151
+ "exit_code": 2,
152
+ "action": "Human review required"
153
+ }
154
+ ```
155
+
156
+ ## Domain-Specific Focus Areas
157
+
158
+ ### Security Focus
159
+
160
+ When `rubric_focus: Security` is specified:
161
+
162
+ **Additional Checks:**
163
+ - No secrets in code or config
164
+ - Dependencies free of CVEs
165
+ - Security headers configured
166
+ - Input validation present
167
+ - Authentication/authorization correct
168
+ - Encryption properly implemented
169
+
170
+ **Red Flags (automatic FAIL):**
171
+ - Hardcoded secrets or API keys
172
+ - Known vulnerable dependencies (CVSS ≥ 7.0)
173
+ - Disabled security features
174
+ - SQL injection vulnerabilities
175
+ - Missing authentication
176
+
177
+ ### Performance Focus
178
+
179
+ When `rubric_focus: Performance` is specified:
180
+
181
+ **Additional Checks:**
182
+ - No N+1 query introductions
183
+ - Bundle size within limits
184
+ - API response time acceptable
185
+ - Database query efficiency
186
+ - Memory usage reasonable
187
+ - Cache strategy appropriate
188
+
189
+ **Red Flags (automatic FAIL):**
190
+ - >50% regression in response time
191
+ - Memory leak potential
192
+ - Unbounded resource usage
193
+ - Missing pagination
194
+
195
+ ### Compliance Focus
196
+
197
+ When `rubric_focus: Compliance` is specified:
198
+
199
+ **Additional Checks:**
200
+ - Audit logging present
201
+ - Data retention policies followed
202
+ - PII handling correct
203
+ - Access controls enforced
204
+ - License compliance met
205
+
206
+ **Red Flags (automatic FAIL):**
207
+ - GDPR/HIPAA/SOC2 violations
208
+ - Missing audit trail
209
+ - Unauthorized data exposure
210
+ - License violations
211
+
212
+ ## Scoring Calculation
213
+
214
+ ### Weighted Average Formula
215
+
216
+ ```
217
+ overall_score = (
218
+ accuracy * 0.30 +
219
+ completeness * 0.25 +
220
+ clarity * 0.20 +
221
+ conciseness * 0.15 +
222
+ relevance * 0.10
223
+ )
224
+ ```
225
+
226
+ ### Confidence to Exit Code Mapping
227
+
228
+ ```python
229
+ def determine_exit_code(confidence, blocking_issues, threshold=0.7):
230
+ if blocking_issues:
231
+ return 1 # FAIL
232
+ elif confidence >= threshold:
233
+ return 0 # PASS
234
+ else:
235
+ return 2 # UNCLEAR
236
+ ```
237
+
238
+ ## Pipeline Integration Patterns
239
+
240
+ ### GitHub Actions
241
+
242
+ ```yaml
243
+ - name: Council Gate
244
+ id: gate
245
+ run: llm-council gate --snapshot ${{ github.sha }}
246
+ continue-on-error: true
247
+
248
+ - name: Handle Unclear
249
+ if: steps.gate.outcome == 'failure' && steps.gate.outputs.exit_code == '2'
250
+ run: gh pr comment --body "⚠️ Council requires human review"
251
+ ```
252
+
253
+ ### GitLab CI
254
+
255
+ ```yaml
256
+ council-gate:
257
+ script:
258
+ - llm-council gate --snapshot $CI_COMMIT_SHA
259
+ allow_failure:
260
+ exit_codes:
261
+ - 2 # UNCLEAR triggers manual approval
262
+ ```
263
+
264
+ ### Azure DevOps
265
+
266
+ ```yaml
267
+ - task: Bash@3
268
+ displayName: 'Council Gate'
269
+ inputs:
270
+ targetType: 'inline'
271
+ script: |
272
+ llm-council gate --snapshot $(Build.SourceVersion)
273
+ if [ $? -eq 2 ]; then
274
+ echo "##vso[task.setvariable variable=needsReview]true"
275
+ fi
276
+ ```
277
+
278
+ ## Blocking Issues
279
+
280
+ Issues that automatically trigger FAIL (exit code 1):
281
+
282
+ ### Critical Severity
283
+ - Security vulnerabilities (CVSS ≥ 7.0)
284
+ - Data loss potential
285
+ - Production-breaking changes
286
+ - Compliance violations
287
+
288
+ ### Major Severity
289
+ - Required tests failing
290
+ - Missing security controls
291
+ - Performance regressions >50%
292
+ - Breaking API changes
293
+
294
+ ## Transcript Format
295
+
296
+ All gate decisions include audit trail:
297
+
298
+ ```json
299
+ {
300
+ "verification_id": "abc123",
301
+ "timestamp": "2025-12-31T12:00:00Z",
302
+ "snapshot_id": "git-sha",
303
+ "verdict": "pass",
304
+ "confidence": 0.85,
305
+ "exit_code": 0,
306
+ "rubric_scores": {
307
+ "accuracy": 8.5,
308
+ "completeness": 8.0,
309
+ "clarity": 9.0,
310
+ "conciseness": 8.5,
311
+ "relevance": 9.0
312
+ },
313
+ "blocking_issues": [],
314
+ "reviewers": ["model-a", "model-b", "model-c"],
315
+ "consensus_method": "borda_count",
316
+ "transcript_path": ".council/logs/2025-12-31T12-00-00-abc123/"
317
+ }
318
+ ```
319
+
320
+ ## Rollback Support
321
+
322
+ When a gate fails after deployment:
323
+
324
+ 1. **Transcript Available**: Full deliberation saved for post-mortem
325
+ 2. **Snapshot Pinning**: Exact code state preserved
326
+ 3. **Issue List**: Specific problems identified
327
+ 4. **Remediation Hints**: Suggestions for fixes
328
+
329
+ ## Example Gate Output
330
+
331
+ ```json
332
+ {
333
+ "verdict": "fail",
334
+ "confidence": 0.72,
335
+ "exit_code": 1,
336
+ "rubric_scores": {
337
+ "accuracy": 5.5,
338
+ "completeness": 7.0,
339
+ "clarity": 8.0,
340
+ "conciseness": 8.5,
341
+ "relevance": 9.0
342
+ },
343
+ "weighted_score": 7.15,
344
+ "accuracy_ceiling_applied": true,
345
+ "final_score": 7.0,
346
+ "blocking_issues": [
347
+ {
348
+ "severity": "critical",
349
+ "category": "security",
350
+ "message": "Dependency lodash@4.17.15 has known prototype pollution vulnerability (CVE-2019-10744)",
351
+ "remediation": "Upgrade to lodash@4.17.21 or later"
352
+ }
353
+ ],
354
+ "rationale": "Security vulnerability in dependencies blocks deployment. Recommend upgrading lodash before proceeding."
355
+ }
356
+ ```
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: council-review
3
+ description: |
4
+ Multi-model code review with structured feedback using LLM Council peer evaluation.
5
+ Use for PR reviews, code quality checks, or implementation review.
6
+ Keywords: code review, PR, pull request, quality check, peer review, feedback
7
+
8
+ license: Apache-2.0
9
+ compatibility: "llm-council >= 2.0, mcp >= 1.0"
10
+ metadata:
11
+ category: code-review
12
+ domain: software-engineering
13
+ council-version: "2.0"
14
+ author: amiable-dev
15
+ repository: https://github.com/amiable-dev/llm-council
16
+
17
+ allowed-tools: "Read Grep Glob mcp:llm-council/verify mcp:llm-council/audit"
18
+ ---
19
+
20
+ # Council Code Review Skill
21
+
22
+ Get multiple AI perspectives on code changes with structured, actionable feedback.
23
+
24
+ ## When to Use
25
+
26
+ - Review pull requests before merging
27
+ - Get code quality feedback on implementations
28
+ - Identify potential issues across multiple dimensions
29
+ - Validate changes against coding standards
30
+
31
+ ## Workflow
32
+
33
+ 1. **Prepare Input**: Provide file paths or git diff
34
+ 2. **Invoke Review**: Call `mcp:llm-council/verify` with code-review rubric
35
+ 3. **Process Feedback**: Receive structured scores and issue list
36
+ 4. **Address Issues**: Fix blocking issues before proceeding
37
+
38
+ ## Input Formats
39
+
40
+ Supports both:
41
+ - `file_paths`: List of files to review (full file analysis)
42
+ - `git_diff`: Unified diff format for change-focused review
43
+ - `snapshot_id`: Git commit SHA (required for reproducibility)
44
+
45
+ ## Rubric (ADR-016)
46
+
47
+ | Dimension | Weight | Focus |
48
+ |-----------|--------|-------|
49
+ | Accuracy | 35% | Correctness, no bugs, logic errors |
50
+ | Completeness | 20% | All requirements addressed |
51
+ | Clarity | 20% | Readable, maintainable code |
52
+ | Conciseness | 15% | No unnecessary complexity |
53
+ | Relevance | 10% | Addresses stated requirements |
54
+
55
+ ## Output Schema
56
+
57
+ ```json
58
+ {
59
+ "verdict": "pass|fail|unclear",
60
+ "confidence": 0.82,
61
+ "rubric_scores": {
62
+ "accuracy": 7.5,
63
+ "completeness": 8.0,
64
+ "clarity": 9.0,
65
+ "conciseness": 8.5,
66
+ "relevance": 9.0
67
+ },
68
+ "blocking_issues": [
69
+ {
70
+ "severity": "major",
71
+ "file": "src/api.py",
72
+ "line": 42,
73
+ "message": "Missing input validation"
74
+ }
75
+ ],
76
+ "suggestions": [...],
77
+ "rationale": "Overall, the code is well-structured..."
78
+ }
79
+ ```
80
+
81
+ ## Example Usage
82
+
83
+ ```bash
84
+ # Review specific files
85
+ council-review --file-paths "src/main.py,src/utils.py" --snapshot abc123
86
+
87
+ # Review git diff
88
+ council-review --git-diff "$(git diff HEAD~1)" --snapshot $(git rev-parse HEAD)
89
+
90
+ # Review with custom focus
91
+ council-review --rubric-focus Security --file-paths "src/auth.py"
92
+ ```
93
+
94
+ ## Progressive Disclosure
95
+
96
+ - **Level 1**: This metadata (~200 tokens)
97
+ - **Level 2**: Full instructions above (~800 tokens)
98
+ - **Level 3**: See `references/code-review-rubric.md` for detailed scoring anchors
99
+
100
+ ## Related Skills
101
+
102
+ - `council-verify`: General verification
103
+ - `council-gate`: CI/CD quality gate