From jaan-to
Validates integrated build pipelines and running services using health checks and smoke tests. Use when verifying project builds and service health.
npx claudepluginhub parhumm/jaan-to --plugin jaan-toThis skill uses the workspace's default tool permissions.
> Validate integrated build pipeline and running services with health checks and smoke tests.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Validate integrated build pipeline and running services with health checks and smoke tests.
$JAAN_CONTEXT_DIR/tech.md — Tech stack (determines build commands, ports, health endpoints)
#current-stack, #frameworks, #constraints$JAAN_CONTEXT_DIR/config.md — Project configuration$JAAN_TEMPLATES_DIR/jaan-to-dev-verify.template.md — Report template$JAAN_LEARN_DIR/jaan-to-dev-verify.learn.md — Past lessons (loaded in Pre-Execution)${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md — Language resolution protocolArguments: $ARGUMENTS
--build-only — Skip runtime verification (Phase 3). Only compile/type-check.--runtime-only — Skip build verification (Phase 2). Only health checks.--skip-smoke — Skip smoke tests in Phase 3.--skip-fix — Report build errors without auto-fixing.--port PORT — Override default port for a specific service.MANDATORY — Read and execute ALL steps in: ${CLAUDE_PLUGIN_ROOT}/docs/extending/pre-execution-protocol.md
Skill name: dev-verify
Execute: Step 0 (Init Guard) → A (Load Lessons) → B (Resolve Template) → C (Offer Template Seeding)
Also read context files if available:
$JAAN_CONTEXT_DIR/tech.md — Know the tech stack for build commands and health endpoints$JAAN_CONTEXT_DIR/config.md — Project configurationRead and apply language protocol: ${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md
Override field for this skill: language_dev-verify
Language exception: Generated code output, compiler error messages, and command output are NOT affected by this setting.
ultrathink
Use extended reasoning for:
Read $JAAN_CONTEXT_DIR/tech.md #current-stack section. If missing, invoke context-scout agent. Extract:
Build detection table:
| tech.md value | Type Check | Dep Install | Build |
|---|---|---|---|
| Node.js / TypeScript | npx tsc --noEmit | pnpm install / npm install | turbo run build / pnpm run build |
| PHP | vendor/bin/phpstan analyse | composer install | composer run build |
| Go | go vet ./... + go build ./... | go mod download | go build ./cmd/... |
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Build Pipeline Sequences" for ORM generate commands, conditional steps, and monorepo variants.
Health detection table:
| tech.md Backend | Default Port | Health Endpoint | Protocol |
|---|---|---|---|
| Node.js / Fastify | 3000 | GET /health | HTTP JSON |
| Node.js / Express | 3000 | GET /health | HTTP JSON |
| Node.js / Next.js | 3000 | GET /api/health | HTTP JSON |
| PHP / Laravel | 8000 | GET /api/health | HTTP JSON |
| PHP / Symfony | 8000 | GET /health | HTTP JSON |
| Go / Chi | 8080 | GET /health | HTTP JSON |
| Go / stdlib | 8080 | GET /health | HTTP JSON |
| Storybook (dev server) | 6006 | GET / | HTTP HTML |
| tech.md Database/Cache | Default Port | Health Command | Protocol |
|---|---|---|---|
| PostgreSQL | 5432 | pg_isready -U $user | TCP + CLI |
| MySQL | 3306 | mysqladmin ping -u $user | TCP + CLI |
| Redis | 6379 | redis-cli PING | TCP + CLI |
| MongoDB | 27017 | nc -z | TCP |
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Frontend Health Detection" and "Framework-Agnostic Routing Detection" for frontend frameworks and shared-port services.
Check for $JAAN_OUTPUTS_DIR/.last-integration-manifest (written by dev-output-integrate Step 13).
Present scope summary:
Integration manifest: {found/not found}. Validation scope: {N files from manifest / entire project}.
For build verification (skip if --runtime-only):
package.json / composer.json / go.mod for dependency manifestturbo.json, pnpm-workspace.yaml)prisma/schema.prisma, drizzle.config.ts).storybook/ directory)dev-project-assemble):
next.config.ts → reactCompiler: true → requires babel-plugin-react-compilernext.config.ts → @next/mdx import → requires @next/mdx + @mdx-js/reactcomposer.json → laravel/octane → requires swoole or roadrunnergo.mod → sqlc generate config → requires sqlc binarymissing-dependency errorsReference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Config-Implied Dependency Validation" for full detection table.
For runtime verification (skip if --build-only):
docker-compose.yml / compose.yml for service definitions and port mappings.env, .env.local, .env.development for port overrides (PORT, API_PORT, DATABASE_URL)lsof -i -P -n (macOS/Darwin) or ss -tlnp (Linux)Skip if --build-only.
openapi.yaml, openapi.json, swagger.yaml in project root and docs/$JAAN_OUTPUTS_DIR/backend/api-contract/*/ for jaan-to-generated specsBuild plan (if not --runtime-only):
.storybook/ detected)Runtime plan (if not --build-only):
Present summary:
VERIFICATION PLAN
=================
Tech Stack: {detected stack}
Manifest Scope: {N files / entire project}
Build Plan: {type check → build sequence}
Runtime Plan: {N services to check}
Estimated Steps: {count}
Use AskUserQuestion:
Do NOT proceed to Phase 2 without explicit approval.
Skip entirely if --runtime-only or user chose "Runtime only".
Bootstrap Validation Sequence (follows dev-output-integrate-reference.md order):
1. {pkg_manager} install — Install dependencies
2. ORM generate (if applicable) — prisma generate / drizzle-kit generate / go generate
3. npx tsc --noEmit / phpstan / go vet — Type/compile check
4. {pkg_manager} run build — Full build
Run stack-appropriate install command from detection table. Report any install failures. Include config-implied dependencies detected in Step 3.
Execute type checker from detection table. If ORM detected in Step 3, run ORM generate first (e.g., npx prisma generate). Collect all errors from stdout/stderr.
| Category | Auto-Fix? | Action |
|---|---|---|
missing-dependency | Yes | Install package (includes config-implied deps) |
export-import-mismatch | Yes | Fix export/import names |
type-mismatch | Conditional | Fix if simple cast, else report |
schema-drift | No | Report only, suggest upstream re-run |
config-mismatch | Yes | Update config entry |
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Error Pattern Matching" for per-stack error patterns, detection regex, and auto-fix command sequences.
Skip if --skip-fix or user chose "Report only".
For each auto-fixable error:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Auto-Fix Command Sequences" for per-stack install/fix commands and safety matrix.
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Build Pipeline Sequences" for per-stack build order with conditional ORM steps.
Skip if .storybook/ was not detected in Step 3.
package.json scripts for a Storybook build script:
build-storybook, storybook:build, or similar{pkg_manager} run {script_name}{pkg_manager} run build-storybook as fallbacknc -z -w 2 localhost 6006curl -s -o /dev/null -w "%{http_code}" --max-time 5 http://localhost:6006/Present build results:
BUILD RESULTS
=============
Type Check: {errors_before} → {errors_after} errors
Auto-Fixed: {count} issues
Remaining: {count} errors
Full Build: ✓ Pass / ✗ Failed at {stage}
Storybook: ✓ Pass / ✗ Failed / ⊘ Not detected
If --build-only: skip to Step 15 (Quality Check).
Skip entirely if --build-only or user chose "Build only".
For each service in approved plan:
nc -z -w 2 localhost {port}curl -s -o /dev/null -w "%{http_code} %{time_total}" --max-time 5 http://localhost:{port}{path}docker compose exec -T {service} {health_command}nc -z fallbackSecurity: curl restricted to localhost/127.0.0.1 only. No external URLs.
Runtime error categories:
| Error Category | Meaning | HTTP Analogy |
|---|---|---|
service-unavailable | Port not listening | 503 |
unhealthy-response | Health endpoint returned non-2xx | 503 |
invalid-response-format | Unexpected response body/content-type | 500 |
timeout | No response within deadline | 504 |
configuration-mismatch | Expected service not found or wrong port | 400 |
authentication-required | Health endpoint behind auth | 401 |
Skip if no OpenAPI spec found in Step 4.
Enhanced validation (if tools available):
npx --no-install @stoplight/spectral-cli --version): run npx @stoplight/spectral-cli lint {spec_path} for standards-based lintingnpx --no-install @stoplight/prism-cli --version): run proxy validation against running API/jaan-to:qa-contract-validate for full validation pipelineFallback (structural-only, always available):
contract-violation with expected vs actualSkip if --skip-smoke.
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-verify-reference.mdsection "Smoke Test Patterns" for per-framework endpoint conventions and production detection rules.
Only if both phases ran:
Present runtime results:
RUNTIME RESULTS
===============
Services Checked: {count}
Healthy: {count}
Unhealthy: {count}
Contract Checks: {pass}/{total}
Smoke Tests: {pass}/{total} (or skipped)
Build Verification:
Runtime Verification:
Cross-Validation:
Report Safety:
If any check fails, fix before proceeding.
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/id-generator.sh"
SUBDOMAIN_DIR="$JAAN_OUTPUTS_DIR/dev/verify"
mkdir -p "$SUBDOMAIN_DIR"
NEXT_ID=$(generate_next_id "$SUBDOMAIN_DIR")
slug="{verification-slug}"
OUTPUT_FOLDER="${SUBDOMAIN_DIR}/${NEXT_ID}-${slug}"
Preview:
Output Configuration
- ID: {NEXT_ID}
- Folder:
$JAAN_OUTPUTS_DIR/dev/verify/{NEXT_ID}-{slug}/- Main file:
{NEXT_ID}-{slug}.md
Use template from: $JAAN_TEMPLATES_DIR/jaan-to-dev-verify.template.md
Write {NEXT_ID}-{slug}.md with:
Update index:
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/index-updater.sh"
add_to_index \
"$SUBDOMAIN_DIR/README.md" \
"$NEXT_ID" \
"${NEXT_ID}-${slug}" \
"{Verification Title}" \
"{Executive summary — 1-2 sentences}"
Confirm:
Verification report written to:
$JAAN_OUTPUTS_DIR/dev/verify/{NEXT_ID}-{slug}/{NEXT_ID}-{slug}.mdIndex updated:$JAAN_OUTPUTS_DIR/dev/verify/README.md
Context-aware recommendations:
/jaan-to:devops-deploy-activate/jaan-to:backend-api-contract/jaan-to:backend-data-model/jaan-to:qa-test-generateUse AskUserQuestion:
If "Learn from this": Run /jaan-to:learn-add dev-verify "{feedback}"
/jaan-to:devops-deploy-activate)curl restricted to localhost/127.0.0.1 onlydev-output-integrate + dev-project-assemble + sec-audit-remediate
|
v
dev-verify
|
v
devops-deploy-activate
tech.md detection$JAAN_OUTPUTS_DIR path$JAAN_OUTPUTS_DIR/dev/verify/{id}-{slug}/