docs: document .venv fix so documented test commands work - #274
Conversation
📊 Code Complexity AnalysisSummary:
|
| File | Function | Complexity | Line |
|---|---|---|---|
core/risk_scorer.py |
score_pull_request |
35 | 141 |
autopilot/autopilot.py |
generate_summary |
24 | 195 |
autopilot/staleness_engine.py |
process_stale_prs |
16 | 281 |
autopilot/ai_optimization/performance_monitor.py |
get_benchmark_stats |
15 | 184 |
.github/scripts/batch_scan_dependabot.py |
main |
15 | 64 |
.github/scripts/weekly_digest.py |
build_blocks |
15 | 38 |
autopilot/recommendation_contract.py |
validate |
14 | 54 |
.github/scripts/workflow_monitor.py |
get_workflow_statistics |
14 | 216 |
.github/scripts/metrics_collector.py |
parse_workflow_metrics |
14 | 148 |
.github/scripts/setup_branch_protection.py |
main |
14 | 240 |
... and 19 more
Recommendations:
- Break down large functions into smaller, focused units
- Extract complex conditional logic into separate functions
- Use early returns to reduce nesting
🔧 Low Maintainability Files
These files have low maintainability scores and may need refactoring:
| File | Score | Status |
|---|---|---|
.github/scripts/health_dashboard_generator.py |
28.14 | 🔴 |
.github/scripts/workflow_monitor.py |
33.73 | 🔴 |
.github/scripts/ai_code_suggestor.py |
33.76 | 🔴 |
.github/scripts/ai_workflow_optimizer.py |
35.51 | 🔴 |
.github/scripts/performance_benchmark.py |
39.46 | 🔴 |
.github/scripts/self_healing_system.py |
40.27 | 🔴 |
.github/scripts/threshold_monitor.py |
41.13 | 🔴 |
.github/scripts/parallel_code_analyzer_optimized.py |
41.16 | 🔴 |
autopilot/tests/test_recommendation_contract.py |
42.05 | 🔴 |
autopilot/autopilot.py |
42.45 | 🔴 |
autopilot/ai_optimization/anomaly_detector.py |
42.56 | 🔴 |
.github/scripts/refactoring_assistant.py |
43.03 | 🔴 |
autopilot/ai_optimization/intelligent_cache.py |
43.28 | 🔴 |
autopilot/ai_optimization/commit_summarizer.py |
44.05 | 🔴 |
.github/scripts/async_parallel_analyzer.py |
44.47 | 🔴 |
autopilot/ai_optimization/performance_monitor.py |
44.69 | 🔴 |
.github/scripts/badge_generator.py |
45.28 | 🔴 |
.github/scripts/copilot_integration.py |
45.37 | 🔴 |
.github/scripts/distributed_monitoring.py |
45.53 | 🔴 |
autopilot/dependency_graph.py |
45.65 | 🔴 |
.github/scripts/elite_copilot.py |
45.69 | 🔴 |
.github/scripts/issue_auto_creator.py |
46.39 | 🔴 |
.github/scripts/cost_calculator.py |
46.4 | 🔴 |
.github/scripts/inline_pr_commenter.py |
46.63 | 🔴 |
.github/scripts/complexity_reporter.py |
46.78 | 🔴 |
.github/scripts/pr_triage.py |
47.13 | 🔴 |
core/risk_scorer.py |
48.15 | 🔴 |
autopilot/ai_optimization/nlp_relevance_filter.py |
48.43 | 🔴 |
.github/scripts/pr_inline_commenter.py |
48.47 | 🔴 |
.github/scripts/dependency_audit.py |
48.7 | 🔴 |
autopilot/staleness_engine.py |
48.73 | 🔴 |
.github/scripts/metrics_collector.py |
48.91 | 🔴 |
.github/scripts/dependency_updater.py |
48.91 | 🔴 |
autopilot/ai_optimization/ml_priority_scorer.py |
49.53 | 🔴 |
.github/scripts/parallel_code_analyzer.py |
49.96 | 🔴 |
autopilot/ai_optimization/api_optimizer.py |
50.46 | 🟡 |
.github/scripts/workflow_optimizer.py |
51.67 | 🟡 |
.github/scripts/cot_selector.py |
51.73 | 🟡 |
.github/scripts/release_manager.py |
51.92 | 🟡 |
.github/scripts/check_quality.py |
52.33 | 🟡 |
.github/scripts/auto_pr.py |
52.72 | 🟡 |
.github/scripts/changelog_generator.py |
53.13 | 🟡 |
.github/scripts/notification_manager.py |
53.58 | 🟡 |
.github/scripts/prometheus_exporter.py |
54.96 | 🟡 |
.github/scripts/weekly_digest.py |
55.02 | 🟡 |
.github/scripts/llm_router.py |
55.19 | 🟡 |
core/audit_logger.py |
55.6 | 🟡 |
.github/scripts/gather_context.py |
56.0 | 🟡 |
.github/scripts/batch_scan_dependabot.py |
56.3 | 🟡 |
core/llm_provider.py |
56.32 | 🟡 |
.github/scripts/streaming_results.py |
56.64 | 🟡 |
.github/scripts/setup_branch_protection.py |
57.0 | 🟡 |
.github/scripts/optimized_github_client.py |
58.27 | 🟡 |
agents/orchestrator_agent.py |
59.02 | 🟡 |
core/incident_freeze.py |
59.67 | 🟡 |
core/github_client.py |
61.96 | 🟡 |
core/message_queue.py |
63.22 | 🟡 |
core/agent_config.py |
63.82 | 🟡 |
autopilot/decisions/ledger.py |
63.92 | 🟡 |
core/idempotency.py |
64.45 | 🟡 |
Maintainability Index Guide:
- 🟢 85-100: Excellent maintainability
- 🟡 65-84: Good maintainability
- 🟠 50-64: Moderate maintainability (consider refactoring)
- 🔴 0-49: Poor maintainability (needs refactoring)
🟢 Risk Assessment: LOW (0.0/10)Analysed 2 files, 21+ / 0− lines. Test coverage unchanged or improved. Scoring breakdown
|
🤖 Elite AI Copilot AnalysisElite AI Copilot Analysis ReportGenerated: 2026-08-27 06:27:03 🎯 Health Score: 100.0/100🚀 Top Recommendations
📊 Detailed InsightsCode Quality Baseline Established
Security Scan Initiated
Repository Structure Analyzed
Performance Baseline Captured
Documentation Structure Good
Powered by Elite AI Copilot v1.0 |
🔍 Pre-commit Checks✅ All pre-commit checks passed! Your code follows the project style guidelines. Pre-commit hooks help maintain code quality and consistency. |
Code Quality Analysis ❌ FAILEDDuration: 0.03s Tool Results
View detailed results{
"timestamp": "2026-08-27 06:27:11",
"elapsed_seconds": 0.03,
"summary": {
"total_issues": 10,
"critical": 0,
"high": 0,
"medium": 0,
"low": 0
},
"tools": {
"pylint": {
"status": "failed",
"output": "",
"errors": "Pylint error: [Errno 2] No such file or directory: 'pylint'"
},
"flake8": {
"status": "failed",
"output": "",
"errors": "Flake8 error: [Errno 2] No such file or directory: 'flake8'"
},
"bandit": {
"status": "failed",
"output": "",
"errors": "Bandit error: [Errno 2] No such file or directory: 'bandit'"
},
"radon_cc": {
"status": "failed",
"output": "",
"errors": "Radon error: [Errno 2] No such file or directory: 'radon'"
},
"radon_mi": {
"status": "failed",
"output": "",
"errors": "Radon MI error: [Errno 2] No such file or directory: 'radon'"
}
},
"passed": false
} |
🔒 Security Scan Results🛡️ Bandit Security Scan
📦 Dependency Vulnerabilities
Vulnerable Dependencies:
Security scans run automatically on every PR. View detailed reports in the Actions tab. |
🤖 DRC Agent AnalysisRecommendation: 🟠 P1 IMPORTANT Summary: REALIST recommended Solution 2 (CLAUDE.md + Automated venv Bootstrap Script) over DREAMER's top pick of Solution 4 (Devcontainer). This is the correct pragmatic call given solo operator bandwidth constraints and the immediate need to unblock the documented workflow. Next steps:
Strategic fit: Consulting: medium · Product: medium · Tech debt: reduces Analysed by GadgetLab DRC Agent (Dreamer → Realist → Critic) · Run |
There was a problem hiding this comment.
🟡 Changes recommended
It includes an out-of-scope devcontainer lockfile change for a docs-focused PR and the new CLAUDE.md note should be clarified to avoid implying the repo “ships” a prebuilt .venv.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Documents a host-specific workaround for a broken local .venv so the repository’s documented pytest/ruff commands run successfully, and (incidentally) adds a devcontainer feature lockfile.
Changes:
- Add a CLAUDE.md note describing the one-line
pyvenv.cfgchange (include-system-site-packages = true) to makepytest/ruffavailable via system site-packages on the affected host. - Add
.devcontainer/devcontainer-lock.jsonlocking the devcontainer feature SHAs/versions.
File summaries
| File | Description |
|---|---|
CLAUDE.md |
Adds documentation about a host-local .venv misconfiguration and the workaround to restore the documented test flow. |
.devcontainer/devcontainer-lock.json |
Introduces a devcontainer lockfile pinning feature versions/digests (extra change beyond the docs scope). |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| pip install -r requirements.txt # install all deps if venv is missing packages | ||
| ``` | ||
|
|
||
| > ⚠️ **Venv misconfiguration (fixed in place 2026-08-27).** On this host `.venv/bin/python` is a symlink to `/usr/bin/python3`, and the venv shipped with `include-system-site-packages = false` — so `source .venv/bin/activate && pytest` failed with `No module named pytest`. The fix is one reversible line in `.venv/pyvenv.cfg`: set `include-system-site-packages = true`. After that the documented flow works and `pytest`/`ruff` resolve from the system install (full suite: **1492 passed, 2 skipped; 77.65% coverage**). If a fresh checkout reverts it, re-flip that one flag — **do NOT `rm -rf .venv`** (rebuilds are blocked). Fallback without the venv: `/usr/bin/python3 -m pytest tests/ -q -p no:cacheprovider`. |
| { | ||
| "features": { | ||
| "ghcr.io/devcontainers/features/docker-in-docker:2": { | ||
| "version": "2.17.0", | ||
| "resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:25b9f05705ffba7dbe503230ac76081419306f8c8bc88e0ce78c4ecd99a0c78c", |
What
.venv: setinclude-system-site-packages = truein.venv/pyvenv.cfgso the documentedsource .venv/bin/activate && pytestflow resolves pytest/ruff from the system install..venv/bin/pythonis a symlink to /usr/bin/python3 but the venv shipped withinclude-system-site-packages = falseand zero installed packages, sopytestfailed withNo module named pytest.Why
The test suite was never red — under the system python it's
1492 passed, 2 skippedat 77.65% coverage. The ".venv" trap was an environment/config issue, not a code bug. The note prevents the next session from re-tripping it.Verification (already run on host)
source .venv/bin/activate && python -m pytest --version-> pytest 9.0.31492 passed, 2 skipped; coverage 77.65% (gate met)python -m ruff check .-> All checks passed!Note
.venv/pyvenv.cfgis gitignored, so the cfg flip itself is host-local (applied on m900). This PR only records the knowledge in CLAUDE.md. Do NOTrm -rf .venv.(Note: this commit also carries a pre-existing staged
.devcontainer/devcontainer-lock.jsonfrom the working tree; it is unrelated to this change and can be dropped on merge if undesired.)