From rendr-forge-skills
Define and enforce the explicit, written "safe to ship" line for an app, then make the ship / no-ship call. Verifies every Confirmed Hole is Closed, confirms launch-readiness essentials (backups, rollback, error tracking), and deliberately refuses to let hardening or polish block the launch. Use at the end of the plug-the-holes phase, when the user asks "are we ready to launch / is it safe to ship / what's left before go-live", or whenever a security/deslop pass needs a clear go/no-go decision. Consumes FINDINGS.md and SURFACE.md.
How this skill is triggered — by the user, by Claude, or both
Slash command
/rendr-forge-skills:launch-gateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Draw the line, then hold it. The gate exists to answer one question honestly: *is this safe to put in front of customers?* It stops two opposite failure modes: shipping with a Hole open, and never shipping because there's always one more thing to polish.
Draw the line, then hold it. The gate exists to answer one question honestly: is this safe to put in front of customers? It stops two opposite failure modes: shipping with a Hole open, and never shipping because there's always one more thing to polish.
The gate is a line, not a wish. It is written down, per app, before the final check. Everything above it must be true to ship. Nothing below it may move it.
Read ../deslop/GLOSSARY.md. Consumes FINDINGS.md (from /plug-the-holes) and SURFACE.md (from /map-the-surface).
Create GATE.md for the app. The criteria are deliberately a closed list. If it's not on here, it does not block launch. Scannable format — checklist with inline current state in the right margin, numbered open-blocker commands underneath. Default shape:
# GATE — <app name> · target launch: <date>
Re-verified: YYYY-MM-DD by running, not by reading.
## Decision: **SHIP** (or **NO-SHIP**)
Reason: <one line — the single blocking item, or "all line items true">.
## Must be TRUE to ship
- [ ] Every Confirmed Hole in FINDINGS.md is Closed or Closed-by-control (currently: __ / __)
- [ ] Every Accepted Exception is signed off below (currently: __)
- [ ] SURFACE.md Unknowns section is empty (currently: __ unknown)
- [ ] No secrets in repo / history / dist bundle (currently: __)
- [ ] Tenant isolation proven on every tenant-data path (covered by exploit suite)
- [ ] Paid/AI endpoints authed AND rate-limited/capped (covered by H-__)
- [ ] Database backups exist + restore tested (currently: __)
- [ ] Bad deploy can be rolled back (currently: __)
- [ ] Error tracking live; structured logs on money/identity paths (currently: __)
## Open blockers (commands to run)
1. **H-__** — `<exact command to verify or close, e.g. bash .deslop/exploits/h__.sh>`
2. **H-__** — `<…>`
3. **HD-__** — `<launch-task command, e.g. "one rehearsed restore + evidence to ops/restore-YYYY-MM-DD.md">`
## Accepted exceptions
<one line per Accepted Exception: finding ID · what it is · why it's accepted · compensating control if any · OWNER who signed off>
<empty is the healthy default; every line here is a risk you are choosing to ship with>
## Explicitly NOT blocking
- Hardening list (HD-*): <count> → post-gate
- Improvement list (IM-*): <count> → /improve-codebase-architecture
- Parked bugs/races: <count> → /diagnose
Tune the list per app, but tune it now, deliberately, not item-by-item under pressure later. Adding a criterion mid-launch "just to be safe" is gold-plating wearing a hard hat.
On re-run after fix work: update the existing GATE.md in place (re-write the Decision, the Re-verified date, and the inline (currently: …) cells). Don't create a new file per attempt — the diff history in git is the audit trail.
For each "must be true" item, confirm by running, not by trusting the log. For Holes: re-run the exploit tests in .deslop/exploits/ and watch them go green, including the control tests behind any Closed-by-control finding. A findings log that says Closed is evidence. A green exploit test is proof. They can disagree (a later edit reopened something); trust the test.
Accepted Exceptions are not a quiet bypass. Each one needs a named owner and a written justification in the gate doc. An exception with no owner, or one you (the auditor) would not put your own name to, is treated as an open Hole: NO-SHIP. The point of the bucket is to make carried risk visible and owned, never to make it disappear.
If anything is red or unknown, the gate is NO-SHIP. Name the exact failing item. Don't soften it.
/tdd <exploit-test-path> (or matt's /to-prd → /to-issues chain feeding AFK), then re-run /deslop; missing backup/rollback/tracking → it's a launch task, not a deferral, do it now. Give the shortest path to green, not a lecture.Two pressures will try to move the line, both wrong:
The gate's authority comes from being boring and fixed.
Shipping on an ugly-but-safe app is success. Phase 2 (/improve-codebase-architecture, /diagnose, /tdd) now runs incrementally, in production, without a gate, because none of it can hurt a customer on day one.
npx claudepluginhub rendr-web/rendr-forge-skills --plugin rendr-forge-skillsProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.