Windsurf rules
.windsurf/rules/verify-work.mdMulti-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code.
Windsurf rules
Quality
74/100
Scores the file, not the repository.Length
1,184 words
19 headings · 6 code blocksRepository
114
— · pushed 0 days agoLast changed
3 days ago
First indexed 3 days ago.1234567<!-- story: e02s01 e46s03 -->8<!-- story: e38s05 -->9<!-- story: e45s05 -->10<!-- story: e45s09 -->11<!-- story: e45s13 -->12<!-- story: e45s40 -->13<!-- story: e51s03 -->14<!-- story: e20s04 -->15<!-- story: e20s06 -->161718# Verify Work1920> **HARD GATE** — No story is "done" until manual UAT for the active story is confirmed with evidence.21>22> **HARD GATE** — Do NOT run on `main` or `master`. Use the feature branch from `kickoff-branch`.2324Review answers "is the code good?"; Verify answers "does the built thing do what was promised?"2526## Modes2728- Default: full UAT plus gaps loop29- --smoke: Cold-start only plus one happy-path flow. Use for hotfixes.30- --cli: CLI tool verification — replaces cold-start with binary smoke checklist. Use for CLI tools with no server process.3132## Risk-Scaled Depth3334`verify-work` reads the `risk:` field from the story template (defaults to `P1` if absent) to scale verification rigor:35- **P0**: Full verify-work multi-phase + `security-review` (step 5) + NFR evidence gate (step 5b).36- **P1**: Standard verify-work (build, test, lint, step-by-step manual).37- **P2**: Smoke, typecheck, lint only. Skip tests, security scan, and step-by-step manual UAT.38- **P3**: Typecheck and lint only. Skip smoke, tests, security scan, and step-by-step manual UAT.3940## Process4142> **Timing:** `bash scripts/bp-timing.sh start verify-work` at invocation; `bash scripts/bp-timing.sh end verify-work` before handoff.43440. **Branch check** — must not be `main`/`master`.45460a. **Preflight / CI green (HARD GATE — e51s03)** — Run Preflight from `CLAUDE.md` or `BP_PREFLIGHT` (`bp-read-agents.sh`). If PR open: `gh pr checks` (**CI green**). Failure blocks all phases → `quick-fix` or `fix-bug`.47481. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17). Note the `risk:` level (`P0`–`P3`).491a. **Pre-UAT verify validation** — for each task's `verify:` command, run it and detect pattern mismatches before UAT begins. If a grep/awk/jq command fails, check whether the pattern is wrong vs. a genuine failure:50```bash51 # For a failing grep -q 'PATTERN' FILE, check what is actually in FILE52 grep 'PATTERN' FILE || grep -n '' FILE | head -20 # show nearest lines53```54 Report: `"Pattern 'X' not found. Nearest match: 'Y' at line N"` and ask `"Update verify command? [Y/n]"`. Fix before proceeding — a mismatched verify command produces false failures during UAT.552. **Cold-start smoke** (if app; skip if P3): stop server, clear caches, boot from scratch.563. **AGENTS.md preflight** — if 0a skipped BP_PREFLIGHT, run `bash scripts/bp-read-agents.sh` and use detected command.574. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md). Skip tests if P2/P3.5859> **HARD GATE — One-test-minimum terminal verdict (e45s13):** At least one mechanical gate MUST be a **real terminal-verdict command** (shell exits 0 or non-zero — not prose, not combined log excerpts). Record that command's stdout/stderr from a **single contiguous run** in `specs/verifications/eNNsYY-verify.yaml` under `terminal_verdict`. Bug reports and gap logs MUST NOT merge evidence from multiple runs into one verdict — each failing run gets its own evidence block.60615. **Security scan** (skip if P2/P3) — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.625a. **Blind-spot check** — run `bash scripts/check-blind-spots.sh`. This detects structural quality gaps (verify-gap, test-gap, stale-tag, etc.) beyond percentage coverage. If any HIGH-severity findings exist → **block the verify-work PASS gate**. Findings are written to `specs/blind-spots.json`. MEDIUM/LOW findings warn but don't block.635a2. **Completeness critic (e45s05)** — `bash scripts/lib/completeness-critic.sh`. **BLOCKER** aborts merge gate; WARNING → gaps loop; FILLED = evidence only.64655b. **NFR Evidence Gate** (P0 only) — Produces go/no-go output on three dimensions: Performance (response time, throughput), Reliability (error rate, recovery), and Operability (logging, health checks). Reads thresholds from `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` and writes evidence as OKF verification-report bundles to `specs/verifications/NFR-eNNsYY.json`. FAIL on any dimension blocks the gate.666. **Step-by-step UAT** (skip if P2/P3) — one user-observable action at a time.677. **Gaps loop** — failures → log → `plan-work` → re-verify. Unaddressed HIGH findings from step 5 feed into this loop alongside other quality gaps.68697a. **Validation gate (e45s09)** — All tasks `status: passing`; evidence in `specs/verifications/`; update `execution-status.yaml`.707b. **Reopen-don't-refile (e45s09)** — Regressions reopen existing story/bug — no duplicate capsule entries.7172## Verify sub-operations7374### Cold-Start Smoke (absorbed)7576Stop server, clear caches, boot from scratch; confirm no stale config affects behavior.7778### Gaps Loop (absorbed)7980After UAT, identify and close any gaps between promised behavior and actual behavior:8182- Capture what was promised in the epic task description83- Document what actually happened (expected vs actual)84- If behavior doesn't match the promises, log the gap85- Loop back to `plan-work` or `develop-tdd` to fix the gap86- Re-verify until all gaps are closed (gaps count = 0)8788## UAT dialogue8990- Pass: user confirms per step.91- Fail: capture expected vs actual; do not mark done in `execution-status.yaml`.9293## Persist verification evidence9495After UAT passes, write structured evidence to `specs/verifications/eNNsYY-verify.yaml`:9697```yaml98story_id: e01s0199verified_at: "2026-06-11T14:30:00Z"100verifier: verify-work101phases:102 smoke:103 passed: true104 build:105 passed: true106 command: "npm run build"107 typecheck:108 passed: true109 lint:110 passed: true111 tests:112 passed: true113 coverage: "94.2%"114 terminal_verdict:115 command: "npm test"116 exit_code: 0117 captured_at: "2026-06-11T14:25:00Z"118 note: "Single run — do not merge output from other attempts"119 manual:120 steps:121 - step: "Open /login"122 expected: "Login form renders"123 actual: "Login form rendered correctly"124 passed: true125 gaps:126 closed: true127```128129### 5b. OKF wiki LINT (e39s08)130131```bash132for p in specs/skills-wiki/skills/*.md; do s="skills/$(basename "$p" .md)/SKILL.md"; [ -f "$s" ]&&[ "$p" -ot "$s" ]&&echo "STALE: $p"; done133for p in specs/conventions-wiki/*.md; do [ "$(basename "$p")" = "index.md" ]&&continue; grep -q "$(basename "$p" .md)" CONVENTIONS.md||echo "ORPHAN: $p"; done134```135136> **HARD GATE** — Verification evidence MUST be persisted before marking the story done. No evidence = not verified.137138## --cli mode139140CLI tools: use `--cli` when no server process. Binary detect + checklist: [REFERENCE.md](REFERENCE.md#cli-mode).141142## Verify143144→ verify: `find specs/verifications -maxdepth 1 -name '*-verify.yaml' 2>/dev/null | grep -q .`145146## Handoff147READY -> next: audit-code148Writes: state.yaml handoff.next_skill = audit-code149150---151152# Verify Work — Reference153154## Cold-start smoke155156```bash157# Example — adapt to project CLAUDE.md158pkill -f "<dev-server>" 2>/dev/null || true159rm -rf .next/cache node_modules/.cache 2>/dev/null || true160<run command> &161sleep 3 && curl -sf http://localhost:<port>/health || echo "BOOT FAIL"162```163164## Gaps template165166```markdown167## Gaps (verify-work)168169| Step | Expected | Actual | Status |170|------|----------|--------|--------|171| 1 | ... | ... | FAIL |172```173174Feed gaps to `plan-work` as new steps with verify commands, then re-run verify-work.175176## CLI mode177178For CLI tools where cold-start smoke does not apply. Auto-detected when no server process; or use `--cli`.179180**Auto-detect binary name:**181```bash182BINARY=$(grep '^name' Cargo.toml | head -1 | awk -F'"' '{print $2}') # Cargo183BINARY=$(node -e "console.log(require('./package.json').bin && Object.keys(require('./package.json').bin)[0] || '')" 2>/dev/null)184BINARY=$(grep '^BIN\s*=' Makefile 2>/dev/null | awk '{print $3}')185```186187**Checklist (replaces cold-start smoke):**1881. `$BINARY --help` → output contains "Usage"1892. `$BINARY --version` → matches manifest1903. README example command → non-empty output1914. `$BINARY --invalid-flag` → exit ≠ 0 with error message192
Also in danielvm-git/bigpowers
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| danielvm-git/bigpowers.cursor/rules/align-grid.mdc · 114 | Cursor rules | lint-formatdo-notagent-behaviour | 65/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/assess-impact.mdc · 114 | Cursor rules | testtesting-strategydeployment | 66/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/audit-code.mdc · 114 | Cursor rules | setuptestlint-formatstyle+4 | 66/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/audit-plan.mdc · 114 | Cursor rules | buildteststylegit | 74/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/build-epic.mdc · 114 | Cursor rules | buildgit | 58/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/change-request.mdc · 114 | Cursor rules | no sections | 48/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/commit-message.mdc · 114 | Cursor rules | lint-formatstyletypesgit+3 | 82/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/compose-workflow.mdc · 114 | Cursor rules | styledo-notagent-behaviour | 65/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/context7-mcp.mdc · 114 | Cursor rules | style | 54/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/craft-skill.mdc · 114 | Cursor rules | stylearchgitdo-not | 69/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/deepen-architecture.mdc · 114 | Cursor rules | testtesting-strategydo-not | 57/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/define-language.mdc · 114 | Cursor rules | lint-formatdo-not | 65/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/define-success.mdc · 114 | Cursor rules | no sections | 4/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/delegate-task.mdc · 114 | Cursor rules | git | 62/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/deploy.mdc · 114 | Cursor rules | setupbuildtestdeployment | 77/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/design-interface.mdc · 114 | Cursor rules | styleagent-behaviour | 58/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/develop-tdd.mdc · 114 | Cursor rules | teststylearchtesting-strategy+5 | 85/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/diagnose-root.mdc · 114 | Cursor rules | no sections | 39/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/diagnose-stall.mdc · 114 | Cursor rules | no sections | 44/100 | 3 days ago | |
| danielvm-git/bigpowers.cursor/rules/dispatch-agents.mdc · 114 | Cursor rules | git | 54/100 | 3 days ago |
Diff against .cursor/rules/align-grid.mdc Diff against .cursor/rules/assess-impact.mdc Diff against .cursor/rules/audit-code.mdc Diff against .cursor/rules/audit-plan.mdc Diff against .cursor/rules/build-epic.mdc Diff against .cursor/rules/change-request.mdc Diff against .cursor/rules/commit-message.mdc Diff against .cursor/rules/compose-workflow.mdc Diff against .cursor/rules/context7-mcp.mdc Diff against .cursor/rules/craft-skill.mdc Diff against .cursor/rules/deepen-architecture.mdc Diff against .cursor/rules/define-language.mdc Diff against .cursor/rules/define-success.mdc Diff against .cursor/rules/delegate-task.mdc Diff against .cursor/rules/deploy.mdc Diff against .cursor/rules/design-interface.mdc Diff against .cursor/rules/develop-tdd.mdc Diff against .cursor/rules/diagnose-root.mdc Diff against .cursor/rules/diagnose-stall.mdc Diff against .cursor/rules/dispatch-agents.mdc
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| danielvm-git/bigpowers.windsurf/rules/organize-workspace.md · 114 | Windsurf rules | buildstylegitdeployment+2 | 89/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/guard-git.md · 114 | Windsurf rules | stylearchgitsecurity+2 | 89/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/quick-fix.md · 114 | Windsurf rules | teststylegitdeployment+1 | 85/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/develop-tdd.md · 114 | Windsurf rules | teststylearchtesting-strategy+5 | 85/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/session-state.md · 114 | Windsurf rules | lint-formatstyleagent-behaviour | 82/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/commit-message.md · 114 | Windsurf rules | lint-formatstyletypesgit+3 | 82/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/extract-design.md · 114 | Windsurf rules | lint-formatstyledependenciesui | 82/100 | 3 days ago | |
| danielvm-git/bigpowers.windsurf/rules/setup-environment.md · 114 | Windsurf rules | setupstylesecuritydo-not+1 | 81/100 | 3 days ago |
