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.
Files changed (70) hide show
  1. vibe_coding_qa-0.5.0/MANIFEST.in +3 -0
  2. vibe_coding_qa-0.5.0/PKG-INFO +323 -0
  3. vibe_coding_qa-0.5.0/README.md +312 -0
  4. vibe_coding_qa-0.5.0/dashboard/__init__.py +10 -0
  5. vibe_coding_qa-0.5.0/dashboard/backend/__init__.py +11 -0
  6. vibe_coding_qa-0.5.0/dashboard/backend/__main__.py +6 -0
  7. vibe_coding_qa-0.5.0/dashboard/backend/ai/__init__.py +6 -0
  8. vibe_coding_qa-0.5.0/dashboard/backend/ai/provider.py +102 -0
  9. vibe_coding_qa-0.5.0/dashboard/backend/ai/service.py +757 -0
  10. vibe_coding_qa-0.5.0/dashboard/backend/api/__init__.py +5 -0
  11. vibe_coding_qa-0.5.0/dashboard/backend/api/ai.py +142 -0
  12. vibe_coding_qa-0.5.0/dashboard/backend/api/dashboard.py +34 -0
  13. vibe_coding_qa-0.5.0/dashboard/backend/api/deps.py +51 -0
  14. vibe_coding_qa-0.5.0/dashboard/backend/api/findings.py +102 -0
  15. vibe_coding_qa-0.5.0/dashboard/backend/api/intel.py +41 -0
  16. vibe_coding_qa-0.5.0/dashboard/backend/api/repositories.py +62 -0
  17. vibe_coding_qa-0.5.0/dashboard/backend/api/scans.py +168 -0
  18. vibe_coding_qa-0.5.0/dashboard/backend/api/system.py +69 -0
  19. vibe_coding_qa-0.5.0/dashboard/backend/config.py +180 -0
  20. vibe_coding_qa-0.5.0/dashboard/backend/main.py +183 -0
  21. vibe_coding_qa-0.5.0/dashboard/backend/persistence/__init__.py +5 -0
  22. vibe_coding_qa-0.5.0/dashboard/backend/persistence/database.py +278 -0
  23. vibe_coding_qa-0.5.0/dashboard/backend/persistence/store.py +600 -0
  24. vibe_coding_qa-0.5.0/dashboard/backend/profiles.py +141 -0
  25. vibe_coding_qa-0.5.0/dashboard/backend/schemas.py +452 -0
  26. vibe_coding_qa-0.5.0/dashboard/backend/security.py +158 -0
  27. vibe_coding_qa-0.5.0/dashboard/backend/services/__init__.py +7 -0
  28. vibe_coding_qa-0.5.0/dashboard/backend/services/dashboard.py +172 -0
  29. vibe_coding_qa-0.5.0/dashboard/backend/services/intel.py +341 -0
  30. vibe_coding_qa-0.5.0/dashboard/backend/services/paths.py +38 -0
  31. vibe_coding_qa-0.5.0/dashboard/backend/services/repositories.py +123 -0
  32. vibe_coding_qa-0.5.0/dashboard/backend/services/scans.py +328 -0
  33. vibe_coding_qa-0.5.0/dashboard/backend/services/settings.py +49 -0
  34. vibe_coding_qa-0.5.0/dashboard/frontend/dist/assets/index-COC-CdqD.js +492 -0
  35. vibe_coding_qa-0.5.0/dashboard/frontend/dist/assets/index-hWDLRaLr.css +1 -0
  36. vibe_coding_qa-0.5.0/dashboard/frontend/dist/index.html +29 -0
  37. vibe_coding_qa-0.5.0/dashboard/frontend/dist/phone-mascots.gif +0 -0
  38. vibe_coding_qa-0.5.0/dashboard/launcher.py +48 -0
  39. vibe_coding_qa-0.5.0/pyproject.toml +30 -0
  40. vibe_coding_qa-0.5.0/requirements-dashboard.txt +5 -0
  41. vibe_coding_qa-0.5.0/setup.cfg +4 -0
  42. vibe_coding_qa-0.5.0/tests/test_dashboard_api.py +438 -0
  43. vibe_coding_qa-0.5.0/tests/test_docker_integration.py +186 -0
  44. vibe_coding_qa-0.5.0/tests/test_engine.py +113 -0
  45. vibe_coding_qa-0.5.0/tests/test_regression.py +1752 -0
  46. vibe_coding_qa-0.5.0/tests/test_tool_integrations.py +138 -0
  47. vibe_coding_qa-0.5.0/vibe_coding_qa/__init__.py +140 -0
  48. vibe_coding_qa-0.5.0/vibe_coding_qa/__main__.py +5 -0
  49. vibe_coding_qa-0.5.0/vibe_coding_qa/ai_review.py +165 -0
  50. vibe_coding_qa-0.5.0/vibe_coding_qa/cli.py +157 -0
  51. vibe_coding_qa-0.5.0/vibe_coding_qa/engine.py +860 -0
  52. vibe_coding_qa-0.5.0/vibe_coding_qa/fixes.py +222 -0
  53. vibe_coding_qa-0.5.0/vibe_coding_qa/gates.py +300 -0
  54. vibe_coding_qa-0.5.0/vibe_coding_qa/profile.py +471 -0
  55. vibe_coding_qa-0.5.0/vibe_coding_qa/repo.py +188 -0
  56. vibe_coding_qa-0.5.0/vibe_coding_qa/reporters/__init__.py +253 -0
  57. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/__init__.py +195 -0
  58. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/compliance.py +167 -0
  59. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/database.py +316 -0
  60. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/dependencies.py +595 -0
  61. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/infrastructure.py +125 -0
  62. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/performance.py +84 -0
  63. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/quality.py +129 -0
  64. vibe_coding_qa-0.5.0/vibe_coding_qa/scanners/security.py +521 -0
  65. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/PKG-INFO +323 -0
  66. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/SOURCES.txt +68 -0
  67. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/dependency_links.txt +1 -0
  68. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/entry_points.txt +3 -0
  69. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/requires.txt +4 -0
  70. vibe_coding_qa-0.5.0/vibe_coding_qa.egg-info/top_level.txt +2 -0
@@ -0,0 +1,3 @@
1
+ recursive-include dashboard/frontend/dist *
2
+ include README.md
3
+ include requirements-dashboard.txt
@@ -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__"]