Validates gate criteria before PRD lifecycle advancement. Triggers before advancing from v0.X to v0.Y or explicit `/ghm-gate-check` invocation. Outputs pass/block summary with missing artifacts list.
Validate whether the PRD stage is ready to advance to the next version. Delegates to the three-layer readiness scorer — SoT files → EPICs → stage — then surfaces the leverage view (what to fix first, and which EPICs it unblocks).
scripts/readiness.py run --quiet to refresh status/readiness.jsonstatus/readiness.jsonreferences/gate-criteria.md remains the canonical source of mandatory artifacts per gate. The scorer's GATE_REQUIREMENTS table mirrors it. Do not hand-roll checklists here — the scoring engine is the single source of truth.
Run the orchestrator. It runs SoT → EPIC → stage in dependency order and writes status/readiness.json.
python scripts/readiness.py run --quiet
# exit 0 = all pass, 1 = warn, 2 = block, 3 = error
If the exit code is 3, report a runtime error and stop. If 0/1/2, proceed to Step 2.
If scripts/readiness.py is missing or Python is unavailable, fall back to reading status/readiness.json directly. If that's also absent, report: "Readiness not yet computed — install scripts/requirements.txt and run python scripts/readiness.py run."
cat status/readiness.json
Extract:
summary.current_stage — the gate being evaluated and its scoresummary.top_blockers — ranked SoT files blocking progressstages.{target} — detailed stage block (dimensions, unmet_criteria, caps)epics.{id} — per-EPIC scores (cite the lowest ones)Use this template. Fill every field from the JSON — do not improvise scores.
## Gate Check Report: {stage.gate_description}
**Verdict**: [PASS | WARN | BLOCK]
**Stage Score**: {stage.score} / 100 (warn < {threshold_warn}, block < {threshold_block})
**Date**: {now}
### Stage Dimensions
| Dimension | Score | Weight |
|-----------|-------|--------|
| required_ids_present | {score} | {weight} |
| relevant_sot_readiness | {score} | {weight} |
| cross_ref_integrity | {score} | {weight} |
| downstream_epic_readiness | {score or "n/a"} | {weight or "—"} |
### Top Blockers (leverage view)
1. **{file}** (score {score}) — blocks {N} EPICs: {EPIC-XX, …} — impact {impact}
2. …
### Unmet Criteria (high severity first)
- [high] {ref}: {reason}
- [medium] {ref}: {reason}
### Recommendation
**If PASS**: Advance to {next_version}. Run `ghm-status-sync` to update the README dashboard.
**If WARN / BLOCK**: Do not advance. Address top blockers in order — fixing the highest-impact SoT file cascades up the graph.
**Next action**: {top_blockers[0] → concrete fix}
| Stage score | Verdict | Meaning | |---|---|---| | ≥ 70 | PASS | Safe to advance | | 50–69 | WARN | Advance with documented risk; log in PRD change log | | < 50 | BLOCK | Cannot advance — per rule 05-lifecycle-gates, update the EPIC and STOP |
Always prioritize by impact = (100 − score) × #EPICs blocked. The top blocker is the single highest-leverage fix; cite its blocking_epics list so the human understands what unblocks.
| Pattern | Example | Fix |
|---|---|---|
| Ignoring the score | "Feels ready; pass" | Cite stage.score verbatim |
| Skipping blockers | "Minor stuff, advance anyway" | Block if score < 50; warn if < 70 |
| Hand-rolling criteria | Re-checking IDs manually | Trust the scorer; if wrong, fix GATE_REQUIREMENTS in _readiness/stage.py |
| Forcing PASS | Overriding the verdict | Never override; the score is the contract |
DO:
readiness.pytop_blockers leverage viewDON'T:
status/readiness.json directly — it's computed outputAfter a report:
ghm-status-sync; the gate advancement updates the README dashboardtop_blockers[0] fix is the single most important next actionreferences/gate-criteria.md — canonical gate requirements (consumed by scorer)references/examples.md — pass/warn/block report examples.claude/rules/07-readiness-protocol.md — the discipline ruledocs/READINESS_PROTOCOL.md — full schemaGoogle Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs.
Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks OpenClaw to add a note, list notes, search notes, or manage note folders.
Work with Obsidian vaults (plain Markdown notes) and automate via obsidian-cli.
Use when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
Manage Apple Reminders via remindctl CLI (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.
Manage Trello boards, lists, and cards via the Trello REST API.
Category:productivity