---
name: readiness-report
description: SmartStack readiness report — score /100, aggregation roslyn + eslint + cross-validate
group: validation
cli: cli/
allowed-tools: [Read, Glob, Grep, Bash]  # Bash: CLI invocation
---

# Skill: Readiness Report

> Aggregates results from 3 validators (roslyn, eslint, cross-validate),
> calculates a score /100, and emits a GO / NO-GO / STOP recommendation.

## When to use this skill

- Before launching Phase 6 (deployment)
- To verify overall project compliance
- After corrections to confirm passing the GO threshold

## Scoring Sources

| Source | Max Points | Calculation |
|--------|-----------|--------|
| roslyn-validator | 40 | 4 pts per SS rule without errors (10 rules SS001-SS010) |
| eslint-smartstack | 25 | 5 pts per ss/ rule without errors (5 rules) |
| cross-validate-stack | 35 | 7 pts per check without errors (5 checks) |
| **Total** | **100** | |

## Recommendation Thresholds

| Score | Recommendation | Meaning |
|-------|---------------|---------|
| >= 90 | GO | Phase 6 development authorized |
| 70-89 | NO-GO | Corrections required before Phase 6 |
| < 70 | STOP | Return to Phase 3 or 4 |

## CLI Invocation

```bash
# Full report with fancy console
npx --prefer-offline tsx skills/validation/readiness-report/cli/index.ts \
  --specs <specs-directory> --src <src-directory>

# JSON output only
npx --prefer-offline tsx skills/validation/readiness-report/cli/index.ts \
  --specs <specs-directory> --src <src-directory> --json
```

## Console Output

```
+==========================================+
|   SmartStack Readiness Report            |
+==========================================+
|  roslyn-validator      36/40   warning   |
|  eslint-smartstack     25/25   ok        |
|  cross-validate-stack  28/35   warning   |
+==========================================+
|  TOTAL SCORE           89/100            |
|  RECOMMENDATION     warning NO-GO        |
+==========================================+
```

## JSON Output

```json
{
  "timestamp": "2026-03-31T...",
  "scores": {
    "roslyn": { "score": 36, "max": 40, "status": "warning", "errors": 1, "details": [...] },
    "eslint": { "score": 25, "max": 25, "status": "ok", "errors": 0, "details": [] },
    "cross-validate": { "score": 28, "max": 35, "status": "warning", "errors": 1, "details": [...] }
  },
  "total": 89,
  "max": 100,
  "recommendation": "NO-GO",
  "blockers": ["SS004: ClientController.cs:45 -- endpoint without RequirePermission"]
}
```

## Expected Behavior

1. User requests a readiness report
2. Claude Code identifies specs and src directories
3. Claude Code calls the CLI with `--specs` and `--src`
4. CLI executes the 3 validators as subprocesses
5. CLI aggregates scores and emits a recommendation
6. Claude Code presents the report and suggests corrections if NO-GO or STOP

## Conversation Example

```
User: Is my project ready for Phase 6?
Claude Code: Launching readiness report...
> npx --prefer-offline tsx skills/validation/readiness-report/cli/index.ts --specs ./specs --src ./src --json
< { "total": 92, "recommendation": "GO", ... }
Claude Code: Score 92/100 — GO. Your project is ready for Phase 6.
  - roslyn-validator: 40/40
  - eslint-smartstack: 25/25
  - cross-validate-stack: 27/35 (1 check in warning)
```

## Exit Codes

| Code | Meaning |
|------|---------|
| 0 | GO (score >= 90) |
| 1 | NO-GO (score 70-89) |
| 2 | STOP (score < 70) or internal error |
