---
name: readiness-report
description: LEGACY (hors chaîne BA) — score /100 aggregating roslyn + eslint + cross-validate only. NOT a dev-readiness verdict — it counts no AC coverage, no business rules, no RBAC parity, and nothing in the BA pipeline invokes it. The real dev readiness = the audit-dev-* gates (see banner).
group: validation
cli: cli/
allowed-tools: [Read, Glob, Grep, Bash]  # Bash: CLI invocation
---

# Skill: Readiness Report

> ⚠️ **LEGACY — hors chaîne BA (2026-08, chantier 4.4).** This report's
> GO/NO-GO /100 aggregates THREE static validators only (roslyn, eslint,
> cross-validate — itself with two checks retired). It includes **no AC
> coverage** (DEV-TEST-001/008), **no business-rule enforcement or test
> parity** (DEV-API-008 / DEV-TEST-009), **no RBAC parity** (DEV-CORE-011 /
> DEV-API-021/033), and **nothing in the BA chain invokes it** — a « GO »
> here certifies nothing about dev readiness. **The real dev-readiness
> record is the `audit-dev-*` gate verdicts** (`/ba-develop` runs them
> between phases; BA-side readiness is `/ba-audit-pre-dev`). Do NOT graft
> the new axes onto this score (redundant with the packs, read by no one);
> its fate is re-evaluated when the Studio defines its own aggregate.

> Aggregates results from 3 validators (roslyn, eslint, cross-validate),
> calculates a score /100, and emits a GO / NO-GO / STOP recommendation —
> useful as a quick STANDALONE static-quality pulse on a codebase, nothing
> more.

## When to use this skill

- As a standalone static-quality pulse (roslyn + eslint + cross-validate)
  on a codebase, outside the BA pipeline
- NOT as a dev-readiness gate — see the banner above; the recommendation
  vocabulary (GO/NO-GO/STOP, « Phase 6 ») predates the v5 BA chain

## 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 | 35 pts scaled over the ACTIVE checks (retired checks — permissions-aligned, rbac-consistent — are excluded from the axis, never free points) |
| **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 |
