Project Audit
A real audit is evidence-driven. Every finding points at a line, a route, a
table or a config key, and every finding carries a way to prove the fix. Opinions
without locations are not findings.
Phase 0 — Scope and consent (2 minutes, never skipped)
Establish before reading code:
- What is in scope? Repository only, or also the live site, infrastructure
and third-party accounts?
- What is the audit for? Pre-launch gate, investor due diligence, an
inherited codebase, a security concern, or a general health check. This
changes what gets weighted.
- What may be run? Read-only analysis is always safe. Ask before installing
dependencies, running tests, starting services, or touching anything that
reaches production.
- Is there a live URL? If yes, the
web-presence-audit, accessibility-audit
and privacy-compliance passes become live checks rather than code inference.
Never scan, probe or send traffic to infrastructure the user has not confirmed
they own or are authorised to test.
State the scope in one line and begin.
Phase 1 — Ground truth
Run the discovery protocol from senior-engineer/references/discovery-protocol.md.
scripts/recon.sh (or recon.ps1 on Windows) automates the first pass and
prints a structured summary — run it if the environment allows, and fall back to
the manual commands if not. It is read-only.
Do not proceed to findings until the Ground Truth block is filled in. An audit
built on a misread stack is worse than no audit.
Phase 2 — The fifteen domain passes
Load the specialised skill for each domain rather than working from memory.
| # |
Domain |
Skill to load |
Weight |
| 1 |
Security |
security-hardening |
15 |
| 2 |
Data and persistence |
database-engineering |
12 |
| 3 |
Correctness and testing |
testing-strategy |
11 |
| 4 |
Architecture |
this skill, references/architecture-review.md |
10 |
| 5 |
API design |
api-contracts |
7 |
| 6 |
DevOps and delivery |
devops-platform |
8 |
| 7 |
Observability |
observability-slo |
7 |
| 8 |
Performance |
performance-engineering |
6 |
| 9 |
Accessibility |
accessibility-audit |
6 |
| 10 |
Web presence and SEO |
web-presence-audit |
5 |
| 11 |
Privacy and compliance |
privacy-compliance |
6 |
| 12 |
Documentation |
engineering-standards |
4 |
| 13 |
Dependencies and supply chain |
security-hardening |
5 |
| 14 |
Developer experience |
engineering-standards |
4 |
| 15 |
Cost and scalability |
devops-platform |
4 |
Scale the depth to the project. Not every audit needs all fifteen at full
depth:
- Quick scan (a small app, a first look): domains 1, 2, 3, 11 at depth; the
rest as a one-line status each.
- Standard audit (the default): all fifteen, depth proportional to weight.
- Deep audit (due diligence, pre-funding, regulated): all fifteen at depth,
plus a threat model, a restore drill and a load test.
Say which depth you are running, and why.
Parallelising. For a large codebase, running domain passes concurrently as
subagents is the right call — dispatch security, data, testing and web-presence
as independent reviewers, then merge. This skill authorises that; give each
agent the Ground Truth block so nobody re-derives it.
Phase 3 — Evidence discipline
For every candidate finding, before it enters the report:
Can I point at the exact location? -> if no, keep investigating or drop it
Can I state the concrete consequence? -> if no, it is a preference, not a finding
Did I verify it, or am I inferring? -> label CONFIRMED or PLAUSIBLE
Can I name a way to prove the fix works? -> if no, the fix is underspecified
Confirm before escalating. A missing authorization check might be enforced
in middleware you have not read. A missing index might exist under a different
name. Grep for the mitigating control before calling something a P0 — a false P0
costs you the reader's trust for the whole report.
Sample when exhaustive is impossible. On a large codebase, review every
auth-adjacent, money-adjacent and personal-data-adjacent path exhaustively, and
sample the rest. Say what you sampled and at what rate.
Phase 4 — Score and report
Apply the rubric in senior-engineer/references/severity-and-reporting.md.
Use templates/audit-report.md as the output shape.
Write to a file (AUDIT.md or docs/audit-YYYY-MM-DD.md) when the report is
longer than a screen — a report that scrolls out of a terminal does not get
acted on. Offer to publish it as a shareable artifact if the user wants to
circulate it.
Mandatory sections, in this order:
- Verdict — can this ship, what breaks first, what does the fix cost.
- Score — NN/100 with the three weakest domains named.
- Ground Truth.
- Findings — P0, P1, P2, P3, each fully formed.
- Scorecard — fifteen rows, each with a one-line justification.
- Remediation plan — ordered, with effort estimates.
- What I could not verify — never empty by omission.
Phase 5 — Remediation, on request
If the user asks you to fix rather than only report:
- Fix in severity order, P0 first. One finding per commit.
- Write the failing test before the fix wherever a test is possible.
- Do not bundle refactors with security fixes; a reviewer must be able to see
the fix.
- Re-verify each fix with the verification step written in the finding, and
report the actual result.
- If a fix turns out to be wrong or infeasible, say so and leave the finding
open rather than quietly closing it.
Calibration
Grade against what this project claims to be, not against a hypothetical
ideal. A weekend side project with no users and a fintech handling card data are
held to different standards on scalability and process — and to identical
standards on secrets in git, SQL injection, and honest privacy claims.
Two failure modes to avoid in equal measure:
- Flattery. Grading generously so the user feels good. They asked for a
senior review; give them the number the evidence supports.
- Performative severity. Inflating findings to look thorough. A P0 that is
not exploitable teaches the reader to ignore your P0s.
References and assets
references/architecture-review.md — how to assess structure, boundaries, coupling
references/stack-playbooks.md — per-stack specifics (Next.js, Django, Rails, Laravel, Spring, Go, .NET, Flutter, mobile)
references/quick-scan.md — the 30-minute version and its command sequence
templates/audit-report.md — the full report template
scripts/recon.sh / scripts/recon.ps1 — read-only reconnaissance
1---2name: project-audit3description: Run a full-spectrum senior engineering audit of an existing codebase or product across 15 domains — security, data, testing, architecture, API, DevOps, observability, performance, accessibility, SEO/web presence, privacy, docs, dependencies, DX and cost — producing a prioritised, verifiable findings report with a 0–100 scorecard. Use when the user says "audit my project", "review my codebase", "is this production ready", "what's wrong with my app", "health check", "due diligence", "technical assessment", "security review", "code review of the whole repo", "inherited this codebase", "what would a senior engineer say", "is this safe to launch", "find the problems" or shares a repository or URL and asks for an assessment. By Devleck.4license: MIT5---67# Project Audit89A real audit is evidence-driven. Every finding points at a line, a route, a10table or a config key, and every finding carries a way to prove the fix. Opinions11without locations are not findings.1213## Phase 0 — Scope and consent (2 minutes, never skipped)1415Establish before reading code:16171. **What is in scope?** Repository only, or also the live site, infrastructure18 and third-party accounts?192. **What is the audit for?** Pre-launch gate, investor due diligence, an20 inherited codebase, a security concern, or a general health check. This21 changes what gets weighted.223. **What may be run?** Read-only analysis is always safe. Ask before installing23 dependencies, running tests, starting services, or touching anything that24 reaches production.254. **Is there a live URL?** If yes, the `web-presence-audit`, `accessibility-audit`26 and `privacy-compliance` passes become live checks rather than code inference.2728Never scan, probe or send traffic to infrastructure the user has not confirmed29they own or are authorised to test.3031State the scope in one line and begin.3233## Phase 1 — Ground truth3435Run the discovery protocol from `senior-engineer/references/discovery-protocol.md`.36`scripts/recon.sh` (or `recon.ps1` on Windows) automates the first pass and37prints a structured summary — run it if the environment allows, and fall back to38the manual commands if not. It is read-only.3940Do not proceed to findings until the Ground Truth block is filled in. An audit41built on a misread stack is worse than no audit.4243## Phase 2 — The fifteen domain passes4445Load the specialised skill for each domain rather than working from memory.4647| # | Domain | Skill to load | Weight |48|---|---|---|---|49| 1 | Security | `security-hardening` | 15 |50| 2 | Data and persistence | `database-engineering` | 12 |51| 3 | Correctness and testing | `testing-strategy` | 11 |52| 4 | Architecture | this skill, `references/architecture-review.md` | 10 |53| 5 | API design | `api-contracts` | 7 |54| 6 | DevOps and delivery | `devops-platform` | 8 |55| 7 | Observability | `observability-slo` | 7 |56| 8 | Performance | `performance-engineering` | 6 |57| 9 | Accessibility | `accessibility-audit` | 6 |58| 10 | Web presence and SEO | `web-presence-audit` | 5 |59| 11 | Privacy and compliance | `privacy-compliance` | 6 |60| 12 | Documentation | `engineering-standards` | 4 |61| 13 | Dependencies and supply chain | `security-hardening` | 5 |62| 14 | Developer experience | `engineering-standards` | 4 |63| 15 | Cost and scalability | `devops-platform` | 4 |6465**Scale the depth to the project.** Not every audit needs all fifteen at full66depth:6768- **Quick scan** (a small app, a first look): domains 1, 2, 3, 11 at depth; the69 rest as a one-line status each.70- **Standard audit** (the default): all fifteen, depth proportional to weight.71- **Deep audit** (due diligence, pre-funding, regulated): all fifteen at depth,72 plus a threat model, a restore drill and a load test.7374Say which depth you are running, and why.7576**Parallelising.** For a large codebase, running domain passes concurrently as77subagents is the right call — dispatch security, data, testing and web-presence78as independent reviewers, then merge. This skill authorises that; give each79agent the Ground Truth block so nobody re-derives it.8081## Phase 3 — Evidence discipline8283For every candidate finding, before it enters the report:8485```86Can I point at the exact location? -> if no, keep investigating or drop it87Can I state the concrete consequence? -> if no, it is a preference, not a finding88Did I verify it, or am I inferring? -> label CONFIRMED or PLAUSIBLE89Can I name a way to prove the fix works? -> if no, the fix is underspecified90```9192**Confirm before escalating.** A missing authorization check might be enforced93in middleware you have not read. A missing index might exist under a different94name. Grep for the mitigating control before calling something a P0 — a false P095costs you the reader's trust for the whole report.9697**Sample when exhaustive is impossible.** On a large codebase, review every98auth-adjacent, money-adjacent and personal-data-adjacent path exhaustively, and99sample the rest. Say what you sampled and at what rate.100101## Phase 4 — Score and report102103Apply the rubric in `senior-engineer/references/severity-and-reporting.md`.104Use `templates/audit-report.md` as the output shape.105106Write to a file (`AUDIT.md` or `docs/audit-YYYY-MM-DD.md`) when the report is107longer than a screen — a report that scrolls out of a terminal does not get108acted on. Offer to publish it as a shareable artifact if the user wants to109circulate it.110111Mandatory sections, in this order:1121. **Verdict** — can this ship, what breaks first, what does the fix cost.1132. **Score** — NN/100 with the three weakest domains named.1143. **Ground Truth**.1154. **Findings** — P0, P1, P2, P3, each fully formed.1165. **Scorecard** — fifteen rows, each with a one-line justification.1176. **Remediation plan** — ordered, with effort estimates.1187. **What I could not verify** — never empty by omission.119120## Phase 5 — Remediation, on request121122If the user asks you to fix rather than only report:123124- Fix in severity order, P0 first. One finding per commit.125- Write the failing test **before** the fix wherever a test is possible.126- Do not bundle refactors with security fixes; a reviewer must be able to see127 the fix.128- Re-verify each fix with the verification step written in the finding, and129 report the actual result.130- If a fix turns out to be wrong or infeasible, say so and leave the finding131 open rather than quietly closing it.132133## Calibration134135Grade against **what this project claims to be**, not against a hypothetical136ideal. A weekend side project with no users and a fintech handling card data are137held to different standards on scalability and process — and to *identical*138standards on secrets in git, SQL injection, and honest privacy claims.139140Two failure modes to avoid in equal measure:141142- **Flattery.** Grading generously so the user feels good. They asked for a143 senior review; give them the number the evidence supports.144- **Performative severity.** Inflating findings to look thorough. A P0 that is145 not exploitable teaches the reader to ignore your P0s.146147## References and assets148149- `references/architecture-review.md` — how to assess structure, boundaries, coupling150- `references/stack-playbooks.md` — per-stack specifics (Next.js, Django, Rails, Laravel, Spring, Go, .NET, Flutter, mobile)151- `references/quick-scan.md` — the 30-minute version and its command sequence152- `templates/audit-report.md` — the full report template153- `scripts/recon.sh` / `scripts/recon.ps1` — read-only reconnaissance