Release readiness
Judge the proposed use and consequence, not the polish of the preview. This is a scoped readiness review, not a security certification or authorization to launch.
Work
- Identify the artifact, intended audience, data sensitivity, exposure, and claimed readiness. Recover intent from the brief, code, or user context; missing documentation does not prevent inspecting obvious risks.
- Verify the primary task and its critical failure paths. Distinguish real behavior, mocks, and unverified integration.
- Assess data persistence and recovery, server authorization and tenant isolation, input validation, secrets, async writes, accessibility, deployment, observability, and rollback as applicable.
- Use pass, fail, unverified, or not applicable with reasons and evidence. Do not average away a blocker or mark authentication as proof of authorization.
- Name must-fix items for the intended use. A real-data pilot still requires access enforcement and a data recovery decision.
- Record accepted risk only when an actual authorized person accepted it. Otherwise label it a proposed deferral with owner and revisit condition to resolve.
Deliver
Lead with the supported use or blocking conclusion. Follow with area → evidence/status → impact → required action, then checks performed and unknowns. Keep the review focused on the existing product promise.
## Readiness review
**Artifact:**
**Stated use:** demo | pilot | production
**Supported use:**
**Promise still true?** yes / no — [one line]
### Score
| Area | Demo | Pilot | Production | Notes |
|---|---|---|---|---|
| Data & persistence | | | | |
| Auth & permissions | | | | |
| Gap states | | | | |
| Security (UI-owned) | | | | |
| Tests & preview | | | | |
| Observability & rollback | | | | |
### Must fix before treating this as [level]
- [item]
### Accept explicitly
- [risk] — accepted by [who] — revisit when [signal]
### Next artifact
Do not publish, message stakeholders, alter permissions, or claim compliance as a side effect of review. Use $states for targeted recovery work and $craft when visible quality also needs evaluation.
Worked example
Readiness review
Artifact: https://preview.example.com/dashboard
Stated use: production (client asked to "just launch")
Supported use: pilot
Promise still true? Partially — primary job works; billing and invites are stubs
Score
| Area |
Demo |
Pilot |
Production |
Notes |
| Data & persistence |
Pass |
Pass |
Fail |
Real DB; no backup or recovery decision |
| Auth & permissions |
Pass |
Fail |
Fail |
Login works; admin delete has no server check |
| Gap states |
Pass |
Fail |
Fail |
Empty dashboard renders blank |
| Security (UI-owned) |
Pass |
Fail |
Fail |
Delete fires from hidden UI without server enforcement |
| Tests & preview |
Pass |
Fail |
Fail |
Preview exists; no CI checks on the delete path |
| Observability & rollback |
Unverified |
Unverified |
Unverified |
No error tracking; rollback leaves stored deletes in place |
Must fix before treating this as pilot
- Enforce server-side permission on delete and admin routes; hidden UI is not enforcement
- Add empty and error states to the project list with retry that preserves input
- Name the use to the client: pilot, not launch
Accept explicitly
- EN-only — accepted by PM — revisit at first EU customer
- No backups — proposed deferral, owner eng lead — revisit before paying customers
Next artifact
$states on dashboard and project list; then a written client note on pilot limits.
Gotchas
- Let one blocker decide the level; do not average a fail away across passing areas.
- Treat login as identity only; it proves nothing about authorization — verify server enforcement on every consequential action.
- Treat hidden UI as no enforcement; probe the endpoint directly as an unauthorized identity.
- Record accepted risk only with a named authorized person and revisit signal; otherwise log a proposed deferral with owner.
- Remember rollback leaves stored changes and external effects in place; name the recovery decision explicitly.
- Stay inside the review scope; do not publish, message stakeholders, or claim compliance as a side effect.
Boundaries
- Do not use when nothing is runnable — use
$slice to build one real path first.
- Do not use when the question is only visual drift or token/component divergence — use
$system instead.
- Do not use when the question is only missing states — use
$states instead.
1---2name: readiness3description: Assess whether a build can support its intended demo, pilot, or production use using evidence and blocking risks. Use when a preview looks done, a client asks to launch, or a prototype path now faces real data and users.4---56# Release readiness78Judge the proposed use and consequence, not the polish of the preview. This is a scoped readiness review, not a security certification or authorization to launch.910## Work1112- Identify the artifact, intended audience, data sensitivity, exposure, and claimed readiness. Recover intent from the brief, code, or user context; missing documentation does not prevent inspecting obvious risks.13- Verify the primary task and its critical failure paths. Distinguish real behavior, mocks, and unverified integration.14- Assess data persistence and recovery, server authorization and tenant isolation, input validation, secrets, async writes, accessibility, deployment, observability, and rollback as applicable.15- Use pass, fail, unverified, or not applicable with reasons and evidence. Do not average away a blocker or mark authentication as proof of authorization.16- Name must-fix items for the intended use. A real-data pilot still requires access enforcement and a data recovery decision.17- Record accepted risk only when an actual authorized person accepted it. Otherwise label it a proposed deferral with owner and revisit condition to resolve.1819## Deliver2021Lead with the supported use or blocking conclusion. Follow with **area → evidence/status → impact → required action**, then checks performed and unknowns. Keep the review focused on the existing product promise.2223```markdown24## Readiness review2526**Artifact:**27**Stated use:** demo | pilot | production28**Supported use:**29**Promise still true?** yes / no — [one line]3031### Score32| Area | Demo | Pilot | Production | Notes |33|---|---|---|---|---|34| Data & persistence | | | | |35| Auth & permissions | | | | |36| Gap states | | | | |37| Security (UI-owned) | | | | |38| Tests & preview | | | | |39| Observability & rollback | | | | |4041### Must fix before treating this as [level]42- [item]4344### Accept explicitly45- [risk] — accepted by [who] — revisit when [signal]4647### Next artifact48```4950Do not publish, message stakeholders, alter permissions, or claim compliance as a side effect of review. Use `$states` for targeted recovery work and `$craft` when visible quality also needs evaluation.5152## Worked example5354## Readiness review5556**Artifact:** `https://preview.example.com/dashboard`57**Stated use:** production (client asked to "just launch")58**Supported use:** pilot59**Promise still true?** Partially — primary job works; billing and invites are stubs6061### Score62| Area | Demo | Pilot | Production | Notes |63|---|---|---|---|---|64| Data & persistence | Pass | Pass | Fail | Real DB; no backup or recovery decision |65| Auth & permissions | Pass | Fail | Fail | Login works; admin delete has no server check |66| Gap states | Pass | Fail | Fail | Empty dashboard renders blank |67| Security (UI-owned) | Pass | Fail | Fail | Delete fires from hidden UI without server enforcement |68| Tests & preview | Pass | Fail | Fail | Preview exists; no CI checks on the delete path |69| Observability & rollback | Unverified | Unverified | Unverified | No error tracking; rollback leaves stored deletes in place |7071### Must fix before treating this as pilot72- Enforce server-side permission on delete and admin routes; hidden UI is not enforcement73- Add empty and error states to the project list with retry that preserves input74- Name the use to the client: pilot, not launch7576### Accept explicitly77- EN-only — accepted by PM — revisit at first EU customer78- No backups — proposed deferral, owner eng lead — revisit before paying customers7980### Next artifact81`$states` on dashboard and project list; then a written client note on pilot limits.8283## Gotchas8485- Let one blocker decide the level; do not average a fail away across passing areas.86- Treat login as identity only; it proves nothing about authorization — verify server enforcement on every consequential action.87- Treat hidden UI as no enforcement; probe the endpoint directly as an unauthorized identity.88- Record accepted risk only with a named authorized person and revisit signal; otherwise log a proposed deferral with owner.89- Remember rollback leaves stored changes and external effects in place; name the recovery decision explicitly.90- Stay inside the review scope; do not publish, message stakeholders, or claim compliance as a side effect.9192## Boundaries9394- Do not use when nothing is runnable — use `$slice` to build one real path first.95- Do not use when the question is only visual drift or token/component divergence — use `$system` instead.96- Do not use when the question is only missing states — use `$states` instead.