vibe-coding-qa 0.5.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.
- vibe_coding_qa-0.5.0/MANIFEST.in +3 -0
- vibe_coding_qa-0.5.0/PKG-INFO +323 -0
- vibe_coding_qa-0.5.0/README.md +312 -0
- vibe_coding_qa-0.5.0/dashboard/__init__.py +10 -0
- vibe_coding_qa-0.5.0/dashboard/backend/__init__.py +11 -0
- vibe_coding_qa-0.5.0/dashboard/backend/__main__.py +6 -0
- vibe_coding_qa-0.5.0/dashboard/backend/ai/__init__.py +6 -0
- vibe_coding_qa-0.5.0/dashboard/backend/ai/provider.py +102 -0
- vibe_coding_qa-0.5.0/dashboard/backend/ai/service.py +757 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/__init__.py +5 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/ai.py +142 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/dashboard.py +34 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/deps.py +51 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/findings.py +102 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/intel.py +41 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/repositories.py +62 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/scans.py +168 -0
- vibe_coding_qa-0.5.0/dashboard/backend/api/system.py +69 -0
- vibe_coding_qa-0.5.0/dashboard/backend/config.py +180 -0
- vibe_coding_qa-0.5.0/dashboard/backend/main.py +183 -0
- vibe_coding_qa-0.5.0/dashboard/backend/persistence/__init__.py +5 -0
- vibe_coding_qa-0.5.0/dashboard/backend/persistence/database.py +278 -0
- vibe_coding_qa-0.5.0/dashboard/backend/persistence/store.py +600 -0
- vibe_coding_qa-0.5.0/dashboard/backend/profiles.py +141 -0
- vibe_coding_qa-0.5.0/dashboard/backend/schemas.py +452 -0
- vibe_coding_qa-0.5.0/dashboard/backend/security.py +158 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/__init__.py +7 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/dashboard.py +172 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/intel.py +341 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/paths.py +38 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/repositories.py +123 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/scans.py +328 -0
- vibe_coding_qa-0.5.0/dashboard/backend/services/settings.py +49 -0
- vibe_coding_qa-0.5.0/dashboard/frontend/dist/assets/index-COC-CdqD.js +492 -0
- vibe_coding_qa-0.5.0/dashboard/frontend/dist/assets/index-hWDLRaLr.css +1 -0
- vibe_coding_qa-0.5.0/dashboard/frontend/dist/index.html +29 -0
- vibe_coding_qa-0.5.0/dashboard/frontend/dist/phone-mascots.gif +0 -0
- vibe_coding_qa-0.5.0/dashboard/launcher.py +48 -0
- vibe_coding_qa-0.5.0/pyproject.toml +30 -0
- vibe_coding_qa-0.5.0/requirements-dashboard.txt +5 -0
- vibe_coding_qa-0.5.0/setup.cfg +4 -0
- vibe_coding_qa-0.5.0/tests/test_dashboard_api.py +438 -0
- vibe_coding_qa-0.5.0/tests/test_docker_integration.py +186 -0
- vibe_coding_qa-0.5.0/tests/test_engine.py +113 -0
- vibe_coding_qa-0.5.0/tests/test_regression.py +1752 -0
- vibe_coding_qa-0.5.0/tests/test_tool_integrations.py +138 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/__init__.py +140 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/__main__.py +5 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/ai_review.py +165 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/cli.py +157 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/engine.py +860 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/fixes.py +222 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/gates.py +300 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/profile.py +471 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/repo.py +188 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/reporters/__init__.py +253 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/__init__.py +195 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/compliance.py +167 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/database.py +316 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/dependencies.py +595 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/infrastructure.py +125 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/performance.py +84 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/quality.py +129 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/security.py +521 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/PKG-INFO +323 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/SOURCES.txt +68 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/dependency_links.txt +1 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/entry_points.txt +3 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/requires.txt +4 -0
- vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/top_level.txt +2 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vibe-coding-qa
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Local static-analysis QA dashboard for AI-assisted web products - runs on your machine, your data stays on your PC.
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: fastapi<1,>=0.115
|
|
8
|
+
Requires-Dist: pydantic<3,>=2.8
|
|
9
|
+
Requires-Dist: uvicorn<1,>=0.30
|
|
10
|
+
Requires-Dist: httpx<1,>=0.27
|
|
11
|
+
|
|
12
|
+
# Vibe Coding QA
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<img src="phone-mascots.gif" alt="Looping cartoon of Mario and Luigi in red and green outfits" width="560">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
A Claude Code skill and Python engine for taking product ideas and AI-assisted web projects from research to a safer, evidence-based launch. It helps assess product opportunities before building, then **inspect real repositories, run automated security and quality checks, map findings to file and line numbers, suggest or apply fixes, rerun tests, and block release** when critical issues remain.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
Clone this repository and open it in Claude Code; the skill is available at `.claude/skills/vibe-coding-qa/SKILL.md`.
|
|
23
|
+
|
|
24
|
+
To add it to another project, copy the `vibe-coding-qa` folder into that project's `.claude/skills/` directory.
|
|
25
|
+
|
|
26
|
+
[Download the skill bundle](https://github.com/stratonflorentin-dot/vibe-coding-qa/raw/refs/heads/main/vibe-coding-qa.zip)
|
|
27
|
+
|
|
28
|
+
## Local Dashboard (v0.5.0)
|
|
29
|
+
|
|
30
|
+
The optional dashboard runs the existing Python scanning engine through a local FastAPI API and a React interface. The CLI remains usable without installing dashboard dependencies.
|
|
31
|
+
|
|
32
|
+
### Run it as a local app (recommended)
|
|
33
|
+
|
|
34
|
+
The dashboard ships as a pip-installable package with the frontend **prebuilt**, so users need **only Python 3.10+** — no Node, no cloning. Each person runs their own copy and **all data stays on their machine**: a local SQLite database at `~/.vibe-coding-qa/vcqa.sqlite3`. Nothing is ever sent to a server.
|
|
35
|
+
|
|
36
|
+
Install with [pipx](https://pipx.pypa.io) (isolated) from the built wheel:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pipx install vibe_coding_qa-0.5.0-py3-none-any.whl
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
or with pip inside a virtual environment:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pip install vibe_coding_qa-0.5.0-py3-none-any.whl
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Then launch it — this starts the local server and opens your browser at `http://127.0.0.1:8756`:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
vibe-coding-qa
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The standalone command-line engine is also installed, as `vcqa`. Notes:
|
|
55
|
+
|
|
56
|
+
- The server binds to **loopback only** and refuses any non-loopback address, so it is never reachable from outside the machine. No login is needed locally.
|
|
57
|
+
- Override the database location with `VCQA_DASHBOARD_DB`; set `VCQA_NO_BROWSER=1` to skip auto-opening the browser.
|
|
58
|
+
- AI features are optional and off by default (set `VCQA_AI_API_KEY` to enable).
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
For development from source (contributors), use the steps below instead.
|
|
63
|
+
|
|
64
|
+
Install the backend extras from the repository root:
|
|
65
|
+
|
|
66
|
+
```powershell
|
|
67
|
+
python -m pip install -r requirements-dashboard.txt
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Start the API in one terminal:
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
python -m dashboard.backend
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
In a second terminal, install and start the frontend:
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
cd dashboard/frontend
|
|
80
|
+
npm ci
|
|
81
|
+
npm run dev
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Open `http://127.0.0.1:5173`. The API is available at `http://127.0.0.1:8756/api/docs`. The default repository allowlist includes the current user's home directory and this project; set `VCQA_ALLOWED_REPO_ROOTS` to add other approved roots. The backend refuses non-loopback bind hosts because remote access has no authentication layer.
|
|
85
|
+
|
|
86
|
+
AI is optional. Configure credentials in the backend process environment before starting it; they are never submitted from the browser or stored in SQLite:
|
|
87
|
+
|
|
88
|
+
```powershell
|
|
89
|
+
$env:VCQA_AI_PROVIDER = 'openrouter'
|
|
90
|
+
$env:VCQA_AI_API_KEY = 'your-server-side-key'
|
|
91
|
+
$env:VCQA_AI_BASE_URL = 'https://openrouter.ai/api/v1'
|
|
92
|
+
$env:VCQA_AI_MODEL = 'openai/gpt-3.5-turbo'
|
|
93
|
+
python -m dashboard.backend
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Scans persist in `dashboard/data/vcqa.sqlite3`. Docker test execution is disabled by default and requires both operator enablement in Settings and explicit per-scan permission. The backend never pulls images or installs repository dependencies.
|
|
97
|
+
|
|
98
|
+
The dashboard includes persisted overview metrics, repositories, real scan jobs and SSE events, scan comparison, findings and triage, static architecture and dependency views, AI chat/reviews/remediation proposals, reports, and scan/AI settings. Limitations: architecture relationships are static-analysis evidence rather than a runtime graph; reports can be printed to PDF by the browser but do not currently have server-side PDF generation; GitHub pull-request/CI integrations, SARIF export, authentication, and verified post-patch rescan workflows are not implemented. AI output remains advisory and never controls the release gate.
|
|
99
|
+
|
|
100
|
+
## What it helps with
|
|
101
|
+
|
|
102
|
+
- **Product intelligence:** research product ideas, markets, competitors, customer pain, feasibility, and MVP strategy before investing in a build.
|
|
103
|
+
- **Engineering QA:** clone or point to a repo and scan actual source code for security, quality, database, infrastructure, performance, compliance, and dependency/supply-chain issues.
|
|
104
|
+
- **File-and-line findings:** every issue includes the file path and line number.
|
|
105
|
+
- **Fixes:** preview or apply safe automated fixes (e.g. remove `console.log`, strip `debugger`) with path validation, backups, diffs, and rollback.
|
|
106
|
+
- **Tests:** detects npm scripts, pytest, and standard-library unittest; execution requires `--explicit-permission` and an available Docker daemon plus a locally available image. The original repository is never mutated: a temporary secret-filtered snapshot is mounted read-only and copied into a size-bounded writable workspace before the suite runs, with networking disabled, a read-only root filesystem, memory/CPU/PID limits, and a wall-clock timeout. Images are never pulled automatically. Test status is decided by classification (see below), not by the exit code alone.
|
|
107
|
+
- **Release gate:** score the repo 0-100 with explainable deductions; deduplicate findings; configurable thresholds; reports one of `PASS`, `FAIL`, `BLOCKED`, or `NOT VERIFIED`.
|
|
108
|
+
- **Framework guidance:** plan features, trust boundaries, authentication, RLS, secrets, input validation, CSRF, API abuse controls, TLS/headers, email/SMS flows, and Tanzania-focused privacy checks.
|
|
109
|
+
- **External tools:** optionally integrate Fallow, REA, PentAGI, API Anything, and UI guidance.
|
|
110
|
+
- **AI-assisted review (optional):** provider-agnostic interface for OpenRouter/Groq-compatible APIs; reads credentials from environment; core works without it.
|
|
111
|
+
|
|
112
|
+
## What to expect
|
|
113
|
+
|
|
114
|
+
It won’t do everything automatically: external tools must be installed and configured, the research command creates a brief rather than conducting live research, and static analysis can only find patterns, not prove runtime behavior. The engine distinguishes high-confidence detections from heuristics and asks a human to verify anything that requires runtime context.
|
|
115
|
+
|
|
116
|
+
## Automated QA Engine
|
|
117
|
+
|
|
118
|
+
The scanner uses only the Python standard library (and Git for repository cloning). Test execution additionally requires a running Docker daemon and a locally available image; the CLI never pulls images or installs project dependencies.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Scan a local repository
|
|
122
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --output vcqa-reports
|
|
123
|
+
|
|
124
|
+
# Scan a public GitHub repository
|
|
125
|
+
python -m vibe_coding_qa.cli scan --repo stratonflorentin-dot/vibe-coding-qa --output vcqa-reports
|
|
126
|
+
|
|
127
|
+
# Run detected tests (project scripts execute code; this explicit flag is required)
|
|
128
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --explicit-permission --output vcqa-reports
|
|
129
|
+
|
|
130
|
+
# Static analysis only (test execution is skipped and decision is NOT VERIFIED)
|
|
131
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --no-execution --output vcqa-reports
|
|
132
|
+
|
|
133
|
+
# Preview safe fixes
|
|
134
|
+
python -m vibe_coding_qa.cli fix --repo /path/to/project --output vcqa-reports
|
|
135
|
+
|
|
136
|
+
# Apply safe fixes (review the report first)
|
|
137
|
+
python -m vibe_coding_qa.cli fix --repo /path/to/project --apply --output vcqa-reports
|
|
138
|
+
|
|
139
|
+
# Run a release gate with explicit test permission
|
|
140
|
+
python -m vibe_coding_qa.cli gate --repo /path/to/project --explicit-permission --test-timeout 300 --max-memory-mb 512 --max-cpu-seconds 60 --output vcqa-reports
|
|
141
|
+
|
|
142
|
+
# Static-only gate; decision is NOT VERIFIED, not PASS
|
|
143
|
+
python -m vibe_coding_qa.cli gate --repo /path/to/project --no-execution --output vcqa-reports
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Reports are written as `vcqa-report.md`, `vcqa-report.json`, and `vcqa-report.html` in the output directory. For private GitHub repositories, set `VCQA_GITHUB_TOKEN` (or `GITHUB_TOKEN`) in the environment; the CLI intentionally accepts no token argument to avoid process-list exposure. Credentials are used through a temporary Git credential store and removed after cloning.
|
|
147
|
+
|
|
148
|
+
### What the engine checks
|
|
149
|
+
|
|
150
|
+
| Module | Examples |
|
|
151
|
+
|--------|----------|
|
|
152
|
+
| **Security** | exposed secrets, client-side API keys, `.env` files, insecure eval, wildcard CORS, SQL injection patterns, unvalidated file uploads, path traversal, SSRF, insecure cookies, debug endpoints, shell execution, rate limits, session secrets, Firebase rules |
|
|
153
|
+
| **Quality** | `console.log`, `debugger`, `TODO/FIXME`, `any` types, missing error boundaries, source maps in production |
|
|
154
|
+
| **Database** | missing RLS, weak RLS policies, editable role fields, client-side role updates, Supabase query auth review, Prisma RLS review |
|
|
155
|
+
| **Infrastructure** | weak TLS, missing HSTS/CSP/X-Frame-Options, Docker `latest` tags, root user in containers, exposed ports |
|
|
156
|
+
| **Performance** | blocking handlers, large images, large source files |
|
|
157
|
+
| **Compliance** | Tanzania PDPA consent checkboxes, RFC 8058 unsubscribe, TCRA SMS opt-out, DPO/PDPC documentation |
|
|
158
|
+
| **Dependencies** | outdated/vulnerable packages, missing lockfiles, CI workflow risks (pull_request_target, outdated checkout, secrets in PRs), Docker risks, license hints |
|
|
159
|
+
|
|
160
|
+
The gate uses the same stored assessment in CLI output and Markdown/JSON/HTML reports. `PASS` means all configured criteria and tests passed; `FAIL` means a non-critical threshold or test failed; `BLOCKED` means a critical finding remains; and `NOT VERIFIED` means tests were skipped, unavailable, or not executed. Exit codes are `0` pass, `1` fail, `2` blocked, and `3` not verified.
|
|
161
|
+
|
|
162
|
+
The engine returns a weighted 0-100 score and never treats skipped test execution as a successful verification.
|
|
163
|
+
|
|
164
|
+
### Test status classification
|
|
165
|
+
|
|
166
|
+
A zero exit code alone never produces `PASS`. The engine parses the runner output and classifies every test as discovered, executed, passed, failed, skipped, or errored, then decides:
|
|
167
|
+
|
|
168
|
+
| Result | Decision |
|
|
169
|
+
|--------|----------|
|
|
170
|
+
| At least one test executed, none failed, exit code 0 | `PASS` |
|
|
171
|
+
| Any test failed or errored | `FAIL` |
|
|
172
|
+
| All tests skipped | `NOT VERIFIED` |
|
|
173
|
+
| No tests discovered | `NOT VERIFIED` |
|
|
174
|
+
| Output not recognized as a known runner | `NOT VERIFIED` |
|
|
175
|
+
| Docker daemon or required dependency unavailable | `NOT VERIFIED` |
|
|
176
|
+
| Timeout or output/resource limit exceeded | `FAIL` |
|
|
177
|
+
|
|
178
|
+
Supported output parsers: Python `unittest` and `pytest`, and JavaScript `Jest` and `Vitest`. The same authoritative decision is used by the CLI, the release gate, and the Markdown/JSON/HTML reports; a custom command that simply exits 0 without recognized test output is reported as `NOT VERIFIED`, not `PASS`.
|
|
179
|
+
|
|
180
|
+
### Docker workspace design
|
|
181
|
+
|
|
182
|
+
Isolated test execution keeps the audited repository untouched:
|
|
183
|
+
|
|
184
|
+
1. A temporary snapshot of the repository is created with common secret files removed (`.env*` except `.env.example`, credential files, private-key extensions) and detected credentials redacted in copied text files.
|
|
185
|
+
2. The snapshot is bind-mounted **read-only** at `/vcqa-src`.
|
|
186
|
+
3. A separate size-bounded **writable** tmpfs is mounted at `/workspace`; the snapshot is copied into it before the test command runs, and the working directory is set there. Build artifacts and temp files are allowed; the container root filesystem stays read-only.
|
|
187
|
+
4. The container runs with `--network none`, `--cap-drop ALL`, `--security-opt no-new-privileges`, read-only rootfs, memory/CPU/PID limits, a bounded `/tmp` and `/workspace`, `--shm-size 1m`, and a wall-clock timeout. Only an allowlisted set of environment variables is inherited.
|
|
188
|
+
5. The snapshot is removed after the run, including on failure paths.
|
|
189
|
+
|
|
190
|
+
### Dependency preparation
|
|
191
|
+
|
|
192
|
+
The engine **never installs packages or pulls images**. If a dependency is missing, the run is reported as `NOT VERIFIED` (infrastructure unavailable) rather than `PASS`. To provide dependencies without network access inside the sandbox, prepare a local image ahead of time and select it with `--test-image`:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Python project with pytest already installed
|
|
196
|
+
docker build -t my-org/vcqa-python:latest - <<'EOF'
|
|
197
|
+
FROM python:3.12-slim
|
|
198
|
+
RUN pip install --no-cache-dir pytest
|
|
199
|
+
EOF
|
|
200
|
+
|
|
201
|
+
# Node project with dependencies installed
|
|
202
|
+
docker build -t my-org/vcqa-node:latest - <<'EOF'
|
|
203
|
+
FROM node:22-bookworm-slim
|
|
204
|
+
EOF
|
|
205
|
+
|
|
206
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project \
|
|
207
|
+
--explicit-permission --test-image my-org/vcqa-python:latest --output vcqa-reports
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Default images are `python:3.12-slim` and `node:22-bookworm-slim`. `node_modules`, virtual environments, and credential files are not copied into the snapshot, so for Node projects install dependencies into the image (or a base image that already contains them) rather than relying on the working tree. If the selected image is not available locally, the run stops with `NOT VERIFIED` and never pulls.
|
|
211
|
+
|
|
212
|
+
### Limitations
|
|
213
|
+
|
|
214
|
+
- Static analysis only: it cannot prove runtime behavior, access control bypasses, or business-logic bugs.
|
|
215
|
+
- Pattern-based detection produces false positives and false negatives; treat every finding as a review prompt, not a certification.
|
|
216
|
+
- Test execution is opt-in and requires Docker. The engine copies a secret-filtered snapshot into a bounded writable workspace, mounts the snapshot read-only rather than mounting the original repository, disables networking, keeps the container root filesystem read-only, applies memory/CPU/PID limits and a wall-clock timeout, and captures output within a bounded size. It does not inherit developer environment variables. Container isolation is not a proof against all kernel/runtime vulnerabilities; tests remain unverified if the daemon, image, or a required dependency is unavailable. Make the selected image available before the audit (default images are `python:3.12-slim` and `node:22-bookworm-slim`), or set `--test-image`; the CLI does not pull images or install project dependencies.
|
|
217
|
+
- Dependency checks use local package metadata and conservative historical heuristics by default. Optional OSV lookup is explicit and offline by default. It resolves npm `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, Python `poetry.lock`, `uv.lock`, `Pipfile.lock`, and exactly pinned `requirements.txt` dependencies; npm transitive lock entries are included. Results are queried by exact package version, capped at 250 dependencies, and report the OSV advisory source; other lockfile formats and unresolved version ranges remain outside coverage. Failed or timed-out OSV lookups are reported as incomplete coverage, never as a clean result.
|
|
218
|
+
- Secret detection inspects the matched credential value, not the file name or the surrounding text. Real credentials are still reported inside test, fixture, mock, and example files, and private keys are always reported. Genuinely synthetic placeholders (for example `your-api-key-here` or `xxxx`) may be suppressed; review such matches in context.
|
|
219
|
+
- Database RLS analysis is a conservative, identifier-aware heuristic, not a full PostgreSQL parser. Complex constructs (dynamic SQL, `DO` blocks, `plpgsql` functions) are reported as coverage limitations, and optional `pglast` validation is used when installed.
|
|
220
|
+
- Compliance checks are heuristics, not legal advice; confirm requirements with official sources and qualified specialists.
|
|
221
|
+
|
|
222
|
+
## Repository automation and branch protection
|
|
223
|
+
|
|
224
|
+
The CI workflow in [`.github/workflows/tests.yml`](.github/workflows/tests.yml) runs the unit-test matrix (Python 3.10/3.11/3.12) and a Docker integration job that executes real containers through the production code path. Recommended repository settings (configure these in GitHub; the tool never changes external repository settings):
|
|
225
|
+
|
|
226
|
+
- Mark the `unittest` (all matrix versions) and `docker-integration` checks as required status checks on the protected branch.
|
|
227
|
+
- Require the branch to be up to date before merging and require a pull request review.
|
|
228
|
+
- Keep the default workflow `permissions: contents: read`.
|
|
229
|
+
|
|
230
|
+
Run the Docker integration tests locally with:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
docker pull python:3.12-slim
|
|
234
|
+
VCQA_DOCKER_INTEGRATION=1 python -m unittest discover -s tests -p "test_docker_integration.py" -v
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Without `VCQA_DOCKER_INTEGRATION=1` those tests are skipped, so the standard unit-test suite needs no Docker.
|
|
238
|
+
|
|
239
|
+
## Configuration
|
|
240
|
+
|
|
241
|
+
Create a `.vcqaignore` file in the repository root to exclude paths from scanning (one pattern per line, supports globs and directory names):
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
# Example .vcqaignore
|
|
245
|
+
dist/
|
|
246
|
+
build/
|
|
247
|
+
*.generated.ts
|
|
248
|
+
vendor/
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Set environment variables for optional AI review:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
export VCQA_AI_PROVIDER=openrouter
|
|
255
|
+
export VCQA_AI_API_KEY=your-key
|
|
256
|
+
export VCQA_AI_BASE_URL=https://openrouter.ai/api/v1
|
|
257
|
+
export VCQA_AI_MODEL=openai/gpt-3.5-turbo
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
AI review is optional. The default request contains finding metadata only; source snippets are not read unless `VCQA_AI_INCLUDE_SOURCE=1` is explicitly set. Secret-related findings are excluded unless `VCQA_AI_INCLUDE_SECRETS=1`; any opted-in content is redacted before transmission, but review the provider and data handling before enabling sharing.
|
|
261
|
+
|
|
262
|
+
Optional OSV online lookup is disabled by default. Enable it with `VCQA_OSV_ENABLED=1`; network failures are reported as incomplete scanner notes, and static/local scanning remains available offline.
|
|
263
|
+
|
|
264
|
+
Configure the release gate minimum score with `VCQA_MINIMUM_SCORE` (for example, `70`). On Windows Command Prompt, use `set VCQA_MINIMUM_SCORE=70`; in PowerShell, use `$env:VCQA_MINIMUM_SCORE = '70'`.
|
|
265
|
+
|
|
266
|
+
## Reports
|
|
267
|
+
|
|
268
|
+
Reports include:
|
|
269
|
+
- **Technology stack** (languages, frameworks, package manager, databases, auth providers, test runners, deployment targets)
|
|
270
|
+
- **Test results** (status, command, duration, skipped count)
|
|
271
|
+
- **Fixes** (applied/skipped with diffs in preview mode)
|
|
272
|
+
- **Coverage gaps** (missing tests, lockfiles, auth, CI, .gitignore)
|
|
273
|
+
- **Findings** grouped by severity with file/line, message, suggestion, confidence, and auto-fixability
|
|
274
|
+
- **Score explanation** with per-finding penalty breakdown
|
|
275
|
+
|
|
276
|
+
Formats: Markdown (`vcqa-report.md`), JSON (`vcqa-report.json`), HTML (`vcqa-report.html` with escaped content).
|
|
277
|
+
|
|
278
|
+
## Existing Skill CLI
|
|
279
|
+
|
|
280
|
+
The original skill CLI remains available for research briefs, checklists, templates, and external tool adapters:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# From the skill directory
|
|
284
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py --help
|
|
285
|
+
|
|
286
|
+
# Product research
|
|
287
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py research --product "AI code review tool" --mode deep --output research-brief.md
|
|
288
|
+
|
|
289
|
+
# Pre-launch audit checklists
|
|
290
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist launch
|
|
291
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist security
|
|
292
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist tanzania
|
|
293
|
+
|
|
294
|
+
# Work templates
|
|
295
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type feature-brief
|
|
296
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type verification
|
|
297
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type finding
|
|
298
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type launch-decision
|
|
299
|
+
|
|
300
|
+
# Install skill into another project
|
|
301
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py init --path /path/to/project
|
|
302
|
+
|
|
303
|
+
# Optional external tool integrations
|
|
304
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools doctor
|
|
305
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools fallow --action audit --root .
|
|
306
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools ui-guide --topic stress
|
|
307
|
+
|
|
308
|
+
# Validate skill structure
|
|
309
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py validate
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
The skill CLI loads reference files from `.claude/skills/vibe-coding-qa/references/` and can be used independently of the agent skill. It does not perform live web research; it creates a brief for the agent to execute with authorized research tools. Optional adapters run Fallow and REA, make a read-only PentAGI status request, guard API Anything calls, and print UI review guidance; see [`scripts/tool-integrations.md`](.claude/skills/vibe-coding-qa/scripts/tool-integrations.md) for setup, exact limits, and examples. External tools are not installed automatically.
|
|
313
|
+
|
|
314
|
+
The skill records what was actually verified and flags unknowns. Its regulatory checklists are not legal advice or compliance certification; confirm current requirements with official sources and qualified specialists.
|
|
315
|
+
|
|
316
|
+
## Mascot animation
|
|
317
|
+
|
|
318
|
+
The looping cartoon GIF is generated with Python and Pillow. Recreate it from the repository root with:
|
|
319
|
+
|
|
320
|
+
```sh
|
|
321
|
+
python -m pip install pillow
|
|
322
|
+
python scripts/generate_mascots.py
|
|
323
|
+
```
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Vibe Coding QA
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="phone-mascots.gif" alt="Looping cartoon of Mario and Luigi in red and green outfits" width="560">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
A Claude Code skill and Python engine for taking product ideas and AI-assisted web projects from research to a safer, evidence-based launch. It helps assess product opportunities before building, then **inspect real repositories, run automated security and quality checks, map findings to file and line numbers, suggest or apply fixes, rerun tests, and block release** when critical issues remain.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
Clone this repository and open it in Claude Code; the skill is available at `.claude/skills/vibe-coding-qa/SKILL.md`.
|
|
12
|
+
|
|
13
|
+
To add it to another project, copy the `vibe-coding-qa` folder into that project's `.claude/skills/` directory.
|
|
14
|
+
|
|
15
|
+
[Download the skill bundle](https://github.com/stratonflorentin-dot/vibe-coding-qa/raw/refs/heads/main/vibe-coding-qa.zip)
|
|
16
|
+
|
|
17
|
+
## Local Dashboard (v0.5.0)
|
|
18
|
+
|
|
19
|
+
The optional dashboard runs the existing Python scanning engine through a local FastAPI API and a React interface. The CLI remains usable without installing dashboard dependencies.
|
|
20
|
+
|
|
21
|
+
### Run it as a local app (recommended)
|
|
22
|
+
|
|
23
|
+
The dashboard ships as a pip-installable package with the frontend **prebuilt**, so users need **only Python 3.10+** — no Node, no cloning. Each person runs their own copy and **all data stays on their machine**: a local SQLite database at `~/.vibe-coding-qa/vcqa.sqlite3`. Nothing is ever sent to a server.
|
|
24
|
+
|
|
25
|
+
Install with [pipx](https://pipx.pypa.io) (isolated) from the built wheel:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pipx install vibe_coding_qa-0.5.0-py3-none-any.whl
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
or with pip inside a virtual environment:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install vibe_coding_qa-0.5.0-py3-none-any.whl
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then launch it — this starts the local server and opens your browser at `http://127.0.0.1:8756`:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
vibe-coding-qa
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The standalone command-line engine is also installed, as `vcqa`. Notes:
|
|
44
|
+
|
|
45
|
+
- The server binds to **loopback only** and refuses any non-loopback address, so it is never reachable from outside the machine. No login is needed locally.
|
|
46
|
+
- Override the database location with `VCQA_DASHBOARD_DB`; set `VCQA_NO_BROWSER=1` to skip auto-opening the browser.
|
|
47
|
+
- AI features are optional and off by default (set `VCQA_AI_API_KEY` to enable).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
For development from source (contributors), use the steps below instead.
|
|
52
|
+
|
|
53
|
+
Install the backend extras from the repository root:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python -m pip install -r requirements-dashboard.txt
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Start the API in one terminal:
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
python -m dashboard.backend
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
In a second terminal, install and start the frontend:
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
cd dashboard/frontend
|
|
69
|
+
npm ci
|
|
70
|
+
npm run dev
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Open `http://127.0.0.1:5173`. The API is available at `http://127.0.0.1:8756/api/docs`. The default repository allowlist includes the current user's home directory and this project; set `VCQA_ALLOWED_REPO_ROOTS` to add other approved roots. The backend refuses non-loopback bind hosts because remote access has no authentication layer.
|
|
74
|
+
|
|
75
|
+
AI is optional. Configure credentials in the backend process environment before starting it; they are never submitted from the browser or stored in SQLite:
|
|
76
|
+
|
|
77
|
+
```powershell
|
|
78
|
+
$env:VCQA_AI_PROVIDER = 'openrouter'
|
|
79
|
+
$env:VCQA_AI_API_KEY = 'your-server-side-key'
|
|
80
|
+
$env:VCQA_AI_BASE_URL = 'https://openrouter.ai/api/v1'
|
|
81
|
+
$env:VCQA_AI_MODEL = 'openai/gpt-3.5-turbo'
|
|
82
|
+
python -m dashboard.backend
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Scans persist in `dashboard/data/vcqa.sqlite3`. Docker test execution is disabled by default and requires both operator enablement in Settings and explicit per-scan permission. The backend never pulls images or installs repository dependencies.
|
|
86
|
+
|
|
87
|
+
The dashboard includes persisted overview metrics, repositories, real scan jobs and SSE events, scan comparison, findings and triage, static architecture and dependency views, AI chat/reviews/remediation proposals, reports, and scan/AI settings. Limitations: architecture relationships are static-analysis evidence rather than a runtime graph; reports can be printed to PDF by the browser but do not currently have server-side PDF generation; GitHub pull-request/CI integrations, SARIF export, authentication, and verified post-patch rescan workflows are not implemented. AI output remains advisory and never controls the release gate.
|
|
88
|
+
|
|
89
|
+
## What it helps with
|
|
90
|
+
|
|
91
|
+
- **Product intelligence:** research product ideas, markets, competitors, customer pain, feasibility, and MVP strategy before investing in a build.
|
|
92
|
+
- **Engineering QA:** clone or point to a repo and scan actual source code for security, quality, database, infrastructure, performance, compliance, and dependency/supply-chain issues.
|
|
93
|
+
- **File-and-line findings:** every issue includes the file path and line number.
|
|
94
|
+
- **Fixes:** preview or apply safe automated fixes (e.g. remove `console.log`, strip `debugger`) with path validation, backups, diffs, and rollback.
|
|
95
|
+
- **Tests:** detects npm scripts, pytest, and standard-library unittest; execution requires `--explicit-permission` and an available Docker daemon plus a locally available image. The original repository is never mutated: a temporary secret-filtered snapshot is mounted read-only and copied into a size-bounded writable workspace before the suite runs, with networking disabled, a read-only root filesystem, memory/CPU/PID limits, and a wall-clock timeout. Images are never pulled automatically. Test status is decided by classification (see below), not by the exit code alone.
|
|
96
|
+
- **Release gate:** score the repo 0-100 with explainable deductions; deduplicate findings; configurable thresholds; reports one of `PASS`, `FAIL`, `BLOCKED`, or `NOT VERIFIED`.
|
|
97
|
+
- **Framework guidance:** plan features, trust boundaries, authentication, RLS, secrets, input validation, CSRF, API abuse controls, TLS/headers, email/SMS flows, and Tanzania-focused privacy checks.
|
|
98
|
+
- **External tools:** optionally integrate Fallow, REA, PentAGI, API Anything, and UI guidance.
|
|
99
|
+
- **AI-assisted review (optional):** provider-agnostic interface for OpenRouter/Groq-compatible APIs; reads credentials from environment; core works without it.
|
|
100
|
+
|
|
101
|
+
## What to expect
|
|
102
|
+
|
|
103
|
+
It won’t do everything automatically: external tools must be installed and configured, the research command creates a brief rather than conducting live research, and static analysis can only find patterns, not prove runtime behavior. The engine distinguishes high-confidence detections from heuristics and asks a human to verify anything that requires runtime context.
|
|
104
|
+
|
|
105
|
+
## Automated QA Engine
|
|
106
|
+
|
|
107
|
+
The scanner uses only the Python standard library (and Git for repository cloning). Test execution additionally requires a running Docker daemon and a locally available image; the CLI never pulls images or installs project dependencies.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Scan a local repository
|
|
111
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --output vcqa-reports
|
|
112
|
+
|
|
113
|
+
# Scan a public GitHub repository
|
|
114
|
+
python -m vibe_coding_qa.cli scan --repo stratonflorentin-dot/vibe-coding-qa --output vcqa-reports
|
|
115
|
+
|
|
116
|
+
# Run detected tests (project scripts execute code; this explicit flag is required)
|
|
117
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --explicit-permission --output vcqa-reports
|
|
118
|
+
|
|
119
|
+
# Static analysis only (test execution is skipped and decision is NOT VERIFIED)
|
|
120
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project --no-execution --output vcqa-reports
|
|
121
|
+
|
|
122
|
+
# Preview safe fixes
|
|
123
|
+
python -m vibe_coding_qa.cli fix --repo /path/to/project --output vcqa-reports
|
|
124
|
+
|
|
125
|
+
# Apply safe fixes (review the report first)
|
|
126
|
+
python -m vibe_coding_qa.cli fix --repo /path/to/project --apply --output vcqa-reports
|
|
127
|
+
|
|
128
|
+
# Run a release gate with explicit test permission
|
|
129
|
+
python -m vibe_coding_qa.cli gate --repo /path/to/project --explicit-permission --test-timeout 300 --max-memory-mb 512 --max-cpu-seconds 60 --output vcqa-reports
|
|
130
|
+
|
|
131
|
+
# Static-only gate; decision is NOT VERIFIED, not PASS
|
|
132
|
+
python -m vibe_coding_qa.cli gate --repo /path/to/project --no-execution --output vcqa-reports
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Reports are written as `vcqa-report.md`, `vcqa-report.json`, and `vcqa-report.html` in the output directory. For private GitHub repositories, set `VCQA_GITHUB_TOKEN` (or `GITHUB_TOKEN`) in the environment; the CLI intentionally accepts no token argument to avoid process-list exposure. Credentials are used through a temporary Git credential store and removed after cloning.
|
|
136
|
+
|
|
137
|
+
### What the engine checks
|
|
138
|
+
|
|
139
|
+
| Module | Examples |
|
|
140
|
+
|--------|----------|
|
|
141
|
+
| **Security** | exposed secrets, client-side API keys, `.env` files, insecure eval, wildcard CORS, SQL injection patterns, unvalidated file uploads, path traversal, SSRF, insecure cookies, debug endpoints, shell execution, rate limits, session secrets, Firebase rules |
|
|
142
|
+
| **Quality** | `console.log`, `debugger`, `TODO/FIXME`, `any` types, missing error boundaries, source maps in production |
|
|
143
|
+
| **Database** | missing RLS, weak RLS policies, editable role fields, client-side role updates, Supabase query auth review, Prisma RLS review |
|
|
144
|
+
| **Infrastructure** | weak TLS, missing HSTS/CSP/X-Frame-Options, Docker `latest` tags, root user in containers, exposed ports |
|
|
145
|
+
| **Performance** | blocking handlers, large images, large source files |
|
|
146
|
+
| **Compliance** | Tanzania PDPA consent checkboxes, RFC 8058 unsubscribe, TCRA SMS opt-out, DPO/PDPC documentation |
|
|
147
|
+
| **Dependencies** | outdated/vulnerable packages, missing lockfiles, CI workflow risks (pull_request_target, outdated checkout, secrets in PRs), Docker risks, license hints |
|
|
148
|
+
|
|
149
|
+
The gate uses the same stored assessment in CLI output and Markdown/JSON/HTML reports. `PASS` means all configured criteria and tests passed; `FAIL` means a non-critical threshold or test failed; `BLOCKED` means a critical finding remains; and `NOT VERIFIED` means tests were skipped, unavailable, or not executed. Exit codes are `0` pass, `1` fail, `2` blocked, and `3` not verified.
|
|
150
|
+
|
|
151
|
+
The engine returns a weighted 0-100 score and never treats skipped test execution as a successful verification.
|
|
152
|
+
|
|
153
|
+
### Test status classification
|
|
154
|
+
|
|
155
|
+
A zero exit code alone never produces `PASS`. The engine parses the runner output and classifies every test as discovered, executed, passed, failed, skipped, or errored, then decides:
|
|
156
|
+
|
|
157
|
+
| Result | Decision |
|
|
158
|
+
|--------|----------|
|
|
159
|
+
| At least one test executed, none failed, exit code 0 | `PASS` |
|
|
160
|
+
| Any test failed or errored | `FAIL` |
|
|
161
|
+
| All tests skipped | `NOT VERIFIED` |
|
|
162
|
+
| No tests discovered | `NOT VERIFIED` |
|
|
163
|
+
| Output not recognized as a known runner | `NOT VERIFIED` |
|
|
164
|
+
| Docker daemon or required dependency unavailable | `NOT VERIFIED` |
|
|
165
|
+
| Timeout or output/resource limit exceeded | `FAIL` |
|
|
166
|
+
|
|
167
|
+
Supported output parsers: Python `unittest` and `pytest`, and JavaScript `Jest` and `Vitest`. The same authoritative decision is used by the CLI, the release gate, and the Markdown/JSON/HTML reports; a custom command that simply exits 0 without recognized test output is reported as `NOT VERIFIED`, not `PASS`.
|
|
168
|
+
|
|
169
|
+
### Docker workspace design
|
|
170
|
+
|
|
171
|
+
Isolated test execution keeps the audited repository untouched:
|
|
172
|
+
|
|
173
|
+
1. A temporary snapshot of the repository is created with common secret files removed (`.env*` except `.env.example`, credential files, private-key extensions) and detected credentials redacted in copied text files.
|
|
174
|
+
2. The snapshot is bind-mounted **read-only** at `/vcqa-src`.
|
|
175
|
+
3. A separate size-bounded **writable** tmpfs is mounted at `/workspace`; the snapshot is copied into it before the test command runs, and the working directory is set there. Build artifacts and temp files are allowed; the container root filesystem stays read-only.
|
|
176
|
+
4. The container runs with `--network none`, `--cap-drop ALL`, `--security-opt no-new-privileges`, read-only rootfs, memory/CPU/PID limits, a bounded `/tmp` and `/workspace`, `--shm-size 1m`, and a wall-clock timeout. Only an allowlisted set of environment variables is inherited.
|
|
177
|
+
5. The snapshot is removed after the run, including on failure paths.
|
|
178
|
+
|
|
179
|
+
### Dependency preparation
|
|
180
|
+
|
|
181
|
+
The engine **never installs packages or pulls images**. If a dependency is missing, the run is reported as `NOT VERIFIED` (infrastructure unavailable) rather than `PASS`. To provide dependencies without network access inside the sandbox, prepare a local image ahead of time and select it with `--test-image`:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Python project with pytest already installed
|
|
185
|
+
docker build -t my-org/vcqa-python:latest - <<'EOF'
|
|
186
|
+
FROM python:3.12-slim
|
|
187
|
+
RUN pip install --no-cache-dir pytest
|
|
188
|
+
EOF
|
|
189
|
+
|
|
190
|
+
# Node project with dependencies installed
|
|
191
|
+
docker build -t my-org/vcqa-node:latest - <<'EOF'
|
|
192
|
+
FROM node:22-bookworm-slim
|
|
193
|
+
EOF
|
|
194
|
+
|
|
195
|
+
python -m vibe_coding_qa.cli scan --repo /path/to/project \
|
|
196
|
+
--explicit-permission --test-image my-org/vcqa-python:latest --output vcqa-reports
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Default images are `python:3.12-slim` and `node:22-bookworm-slim`. `node_modules`, virtual environments, and credential files are not copied into the snapshot, so for Node projects install dependencies into the image (or a base image that already contains them) rather than relying on the working tree. If the selected image is not available locally, the run stops with `NOT VERIFIED` and never pulls.
|
|
200
|
+
|
|
201
|
+
### Limitations
|
|
202
|
+
|
|
203
|
+
- Static analysis only: it cannot prove runtime behavior, access control bypasses, or business-logic bugs.
|
|
204
|
+
- Pattern-based detection produces false positives and false negatives; treat every finding as a review prompt, not a certification.
|
|
205
|
+
- Test execution is opt-in and requires Docker. The engine copies a secret-filtered snapshot into a bounded writable workspace, mounts the snapshot read-only rather than mounting the original repository, disables networking, keeps the container root filesystem read-only, applies memory/CPU/PID limits and a wall-clock timeout, and captures output within a bounded size. It does not inherit developer environment variables. Container isolation is not a proof against all kernel/runtime vulnerabilities; tests remain unverified if the daemon, image, or a required dependency is unavailable. Make the selected image available before the audit (default images are `python:3.12-slim` and `node:22-bookworm-slim`), or set `--test-image`; the CLI does not pull images or install project dependencies.
|
|
206
|
+
- Dependency checks use local package metadata and conservative historical heuristics by default. Optional OSV lookup is explicit and offline by default. It resolves npm `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, Python `poetry.lock`, `uv.lock`, `Pipfile.lock`, and exactly pinned `requirements.txt` dependencies; npm transitive lock entries are included. Results are queried by exact package version, capped at 250 dependencies, and report the OSV advisory source; other lockfile formats and unresolved version ranges remain outside coverage. Failed or timed-out OSV lookups are reported as incomplete coverage, never as a clean result.
|
|
207
|
+
- Secret detection inspects the matched credential value, not the file name or the surrounding text. Real credentials are still reported inside test, fixture, mock, and example files, and private keys are always reported. Genuinely synthetic placeholders (for example `your-api-key-here` or `xxxx`) may be suppressed; review such matches in context.
|
|
208
|
+
- Database RLS analysis is a conservative, identifier-aware heuristic, not a full PostgreSQL parser. Complex constructs (dynamic SQL, `DO` blocks, `plpgsql` functions) are reported as coverage limitations, and optional `pglast` validation is used when installed.
|
|
209
|
+
- Compliance checks are heuristics, not legal advice; confirm requirements with official sources and qualified specialists.
|
|
210
|
+
|
|
211
|
+
## Repository automation and branch protection
|
|
212
|
+
|
|
213
|
+
The CI workflow in [`.github/workflows/tests.yml`](.github/workflows/tests.yml) runs the unit-test matrix (Python 3.10/3.11/3.12) and a Docker integration job that executes real containers through the production code path. Recommended repository settings (configure these in GitHub; the tool never changes external repository settings):
|
|
214
|
+
|
|
215
|
+
- Mark the `unittest` (all matrix versions) and `docker-integration` checks as required status checks on the protected branch.
|
|
216
|
+
- Require the branch to be up to date before merging and require a pull request review.
|
|
217
|
+
- Keep the default workflow `permissions: contents: read`.
|
|
218
|
+
|
|
219
|
+
Run the Docker integration tests locally with:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
docker pull python:3.12-slim
|
|
223
|
+
VCQA_DOCKER_INTEGRATION=1 python -m unittest discover -s tests -p "test_docker_integration.py" -v
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Without `VCQA_DOCKER_INTEGRATION=1` those tests are skipped, so the standard unit-test suite needs no Docker.
|
|
227
|
+
|
|
228
|
+
## Configuration
|
|
229
|
+
|
|
230
|
+
Create a `.vcqaignore` file in the repository root to exclude paths from scanning (one pattern per line, supports globs and directory names):
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
# Example .vcqaignore
|
|
234
|
+
dist/
|
|
235
|
+
build/
|
|
236
|
+
*.generated.ts
|
|
237
|
+
vendor/
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Set environment variables for optional AI review:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
export VCQA_AI_PROVIDER=openrouter
|
|
244
|
+
export VCQA_AI_API_KEY=your-key
|
|
245
|
+
export VCQA_AI_BASE_URL=https://openrouter.ai/api/v1
|
|
246
|
+
export VCQA_AI_MODEL=openai/gpt-3.5-turbo
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
AI review is optional. The default request contains finding metadata only; source snippets are not read unless `VCQA_AI_INCLUDE_SOURCE=1` is explicitly set. Secret-related findings are excluded unless `VCQA_AI_INCLUDE_SECRETS=1`; any opted-in content is redacted before transmission, but review the provider and data handling before enabling sharing.
|
|
250
|
+
|
|
251
|
+
Optional OSV online lookup is disabled by default. Enable it with `VCQA_OSV_ENABLED=1`; network failures are reported as incomplete scanner notes, and static/local scanning remains available offline.
|
|
252
|
+
|
|
253
|
+
Configure the release gate minimum score with `VCQA_MINIMUM_SCORE` (for example, `70`). On Windows Command Prompt, use `set VCQA_MINIMUM_SCORE=70`; in PowerShell, use `$env:VCQA_MINIMUM_SCORE = '70'`.
|
|
254
|
+
|
|
255
|
+
## Reports
|
|
256
|
+
|
|
257
|
+
Reports include:
|
|
258
|
+
- **Technology stack** (languages, frameworks, package manager, databases, auth providers, test runners, deployment targets)
|
|
259
|
+
- **Test results** (status, command, duration, skipped count)
|
|
260
|
+
- **Fixes** (applied/skipped with diffs in preview mode)
|
|
261
|
+
- **Coverage gaps** (missing tests, lockfiles, auth, CI, .gitignore)
|
|
262
|
+
- **Findings** grouped by severity with file/line, message, suggestion, confidence, and auto-fixability
|
|
263
|
+
- **Score explanation** with per-finding penalty breakdown
|
|
264
|
+
|
|
265
|
+
Formats: Markdown (`vcqa-report.md`), JSON (`vcqa-report.json`), HTML (`vcqa-report.html` with escaped content).
|
|
266
|
+
|
|
267
|
+
## Existing Skill CLI
|
|
268
|
+
|
|
269
|
+
The original skill CLI remains available for research briefs, checklists, templates, and external tool adapters:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
# From the skill directory
|
|
273
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py --help
|
|
274
|
+
|
|
275
|
+
# Product research
|
|
276
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py research --product "AI code review tool" --mode deep --output research-brief.md
|
|
277
|
+
|
|
278
|
+
# Pre-launch audit checklists
|
|
279
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist launch
|
|
280
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist security
|
|
281
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py audit --checklist tanzania
|
|
282
|
+
|
|
283
|
+
# Work templates
|
|
284
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type feature-brief
|
|
285
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type verification
|
|
286
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type finding
|
|
287
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py template --type launch-decision
|
|
288
|
+
|
|
289
|
+
# Install skill into another project
|
|
290
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py init --path /path/to/project
|
|
291
|
+
|
|
292
|
+
# Optional external tool integrations
|
|
293
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools doctor
|
|
294
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools fallow --action audit --root .
|
|
295
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py tools ui-guide --topic stress
|
|
296
|
+
|
|
297
|
+
# Validate skill structure
|
|
298
|
+
python .claude/skills/vibe-coding-qa/scripts/vibe_coding_qa.py validate
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
The skill CLI loads reference files from `.claude/skills/vibe-coding-qa/references/` and can be used independently of the agent skill. It does not perform live web research; it creates a brief for the agent to execute with authorized research tools. Optional adapters run Fallow and REA, make a read-only PentAGI status request, guard API Anything calls, and print UI review guidance; see [`scripts/tool-integrations.md`](.claude/skills/vibe-coding-qa/scripts/tool-integrations.md) for setup, exact limits, and examples. External tools are not installed automatically.
|
|
302
|
+
|
|
303
|
+
The skill records what was actually verified and flags unknowns. Its regulatory checklists are not legal advice or compliance certification; confirm current requirements with official sources and qualified specialists.
|
|
304
|
+
|
|
305
|
+
## Mascot animation
|
|
306
|
+
|
|
307
|
+
The looping cartoon GIF is generated with Python and Pillow. Recreate it from the repository root with:
|
|
308
|
+
|
|
309
|
+
```sh
|
|
310
|
+
python -m pip install pillow
|
|
311
|
+
python scripts/generate_mascots.py
|
|
312
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Vibe Coding QA dashboard (backend API + web UI).
|
|
2
|
+
|
|
3
|
+
The dashboard is an optional layer on top of the ``vibe_coding_qa`` engine: the
|
|
4
|
+
engine stays the single source of truth for scanning, scoring and the release
|
|
5
|
+
gate, and every dashboard feature works without AI.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from vibe_coding_qa import __version__
|
|
9
|
+
|
|
10
|
+
__all__ = ["__version__"]
|