Skip to content
Back to skills

Project Diagnosis

ASecurity

Structured gap analysis that identifies what a project is missing — not what's done poorly (that's /audit), but what's absent entirely. Checks for tests, CI, security basics, linting, type safety, deployment readiness, and dependency health. Each finding has a severity and a concrete fix action.

  • 7 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
developmenttypescriptpythongotestinggitapici/cdsecuritydocumentation

Works with

  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add Vimalk0703/shipworthy --skill project-diagnosis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Project Diagnosis?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Project Diagnosis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vimalk0703-project-diagnosis/badge)](https://www.skillsdirectory.com/skills/vimalk0703-project-diagnosis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: project-diagnosis
description: Structured gap analysis that identifies what a project is missing — not what's done poorly (that's /audit), but what's absent entirely. Checks for tests, CI, security basics, linting, type safety, deployment readiness, and dependency health. Each finding has a severity and a concrete fix action.
invoke_when: Use when starting a session (lightweight via hook), running /diagnose for full gap analysis, or when the project-doctor agent needs a gap inventory before fixing things.
---

# Project Diagnosis

## Purpose

Most projects don't fail because their code is bad — they fail because things are missing. No tests, no CI, no input validation, no error handling, no logging. This skill systematically checks for what's absent and surfaces concrete, actionable findings.

**This is NOT a code review.** The `/audit` command reviews code quality. This skill checks project infrastructure completeness.

## Diagnosis Checklist

Run through each category. For each check, record: present (pass), absent (finding), or not applicable (skip).

### 1. Testing Infrastructure
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| Test directory exists | Look for `tests/`, `__tests__/`, `test/`, `spec/`, or test file patterns (`*.test.*`, `*.spec.*`, `test_*.py`, `*_test.go`) | **High** |
| Test runner configured | `package.json` has `test` script, OR `pytest.ini`/`pyproject.toml` has pytest config, OR `go test` works | **High** |
| Coverage configured | `@vitest/coverage-v8`, `pytest-cov`, `go test -cover`, or equivalent is installed | **Medium** |
| At least 1 test exists | At least one test file has actual test cases (not just empty files) | **High** |

### 2. CI/CD Configuration
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| CI config exists | `.github/workflows/`, `.gitlab-ci.yml`, `.circleci/config.yml`, `Jenkinsfile`, `.travis.yml` | **Medium** |
| CI runs tests | CI config includes a test step | **Medium** |
| CI runs linter | CI config includes a lint step | **Low** |

### 3. Security Basics
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| `.env` in `.gitignore` | `.gitignore` exists and contains `.env` | **Critical** |
| No hardcoded secrets | Quick scan for patterns: `password = "`, `apiKey = "`, `secret = "`, `token = "` in source files | **Critical** |
| Input validation present | If API routes exist, check for Zod/Pydantic/validator imports near route handlers | **High** |
| Dependency audit clean | `npm audit` / `pip audit` / `go vuln` shows no critical vulnerabilities | **Medium** |

### 4. Code Quality Tools
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| Linter configured | ESLint config (`.eslintrc*`, `eslint.config.*`), Ruff config (`ruff.toml`, `pyproject.toml` with `[tool.ruff]`), or `golangci-lint` config | **Medium** |
| Formatter configured | Prettier config, Black/Ruff format config, or `gofmt` (built-in) | **Low** |
| Type checking | `tsconfig.json` with `strict: true`, or `mypy`/`pyright` configured, or Go (built-in) | **Medium** |

### 5. Architecture & Documentation
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| Architecture spec | `.shipworthy/architecture.md` exists | **Medium** |
| README exists | `README.md` in project root | **Low** |
| `.gitignore` exists | `.gitignore` in project root | **Medium** |

### 6. Deployment Readiness
| Check | How to Verify | Severity if Missing |
|-------|--------------|-------------------|
| Health endpoint | Scan for `/health`, `/healthz`, `/ping`, or `health_check` route | **Low** |
| Structured logging | Check for `pino`, `winston`, `logging` (Python), `slog` (Go) imports — not `console.log` | **Medium** |
| Error tracking | Check for Sentry, Bugsnag, Datadog, or similar error tracking setup | **Low** |
| Environment config | `.env.example` or environment variables documented somewhere | **Low** |

## Output Format

### For Session-Start Hook (Lightweight)
A single line injected into context:
```
Project health: [X] gaps found — [highest severity] priority: [top 1-2 findings]
```
Example: `Project health: 4 gaps found — Critical priority: .env not in .gitignore, no input validation`

If no gaps found: `Project health: All checks passed`

### For /diagnose Command (Full)
Organized by severity:

```
## Project Diagnosis Report

### Critical (fix immediately)
- [ ] .env not listed in .gitignore — secrets may be committed
- [ ] Hardcoded API key found in src/config.ts:14

### High (fix soon)
- [ ] No test files found — add a tests/ directory and at least one test
- [ ] No input validation — install Zod and validate route inputs

### Medium (improve when convenient)
- [ ] No CI configuration — add .github/workflows/ci.yml
- [ ] No linter configured — install ESLint with strict config

### Low (nice to have)
- [ ] No health endpoint — add GET /health for monitoring
- [ ] No .env.example — document required environment variables

### Passed
- [x] .gitignore exists
- [x] README exists
- [x] TypeScript strict mode enabled
```

## Tier-Adapted Presentation

- **Builder**: Show only Critical findings. Frame them as helpful: "I noticed a couple things I should fix before we go further."
- **Maker**: Show Critical and High. Frame as recommendations: "Here are some gaps I'd recommend addressing."
- **Engineer**: Show everything. Frame as a report: "Full diagnosis results below."

## Auto-Fix Capability

When invoked via `/diagnose --fix` or when the project-doctor agent runs:
- **Can auto-fix**: `.gitignore` creation/updates, linter config, test runner setup, CI workflow generation, health endpoint, `.env.example`
- **Cannot auto-fix**: Removing hardcoded secrets (needs human judgment on replacement), adding input validation to existing routes (needs understanding of expected inputs), configuring error tracking (needs account credentials)
- **Always ask before fixing**: Never silently modify existing files. Create new files freely, but modification requires user approval.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…