with one click
prouver-verifier
// How to verify implementation with evidence — AVANT/APRÈS methodology, constraint synthesis, CI gate, PR body gate, issue comment gate, and closure gate. Proves code works with concrete evidence, not assumptions.
// How to verify implementation with evidence — AVANT/APRÈS methodology, constraint synthesis, CI gate, PR body gate, issue comment gate, and closure gate. Proves code works with concrete evidence, not assumptions.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | prouver-verifier |
| description | How to verify implementation with evidence — AVANT/APRÈS methodology, constraint synthesis, CI gate, PR body gate, issue comment gate, and closure gate. Proves code works with concrete evidence, not assumptions. |
| allowed-tools | Bash, WebFetch, Read |
How to prove that code works with concrete evidence. Code written ≠ done. Verified with AVANT/APRÈS evidence = done.
"No error in logs" ≠ proof. Trigger the scenario, see a POSITIVE signal.
Force yourself to write expected signals BEFORE looking:
"POST /api/X returns 201 with body.data.id""Log contains '[MESSAGE]' after triggering""Old error '[ERROR]' no longer appears"Then check logs. Match or miss = clear signal.
"If I were an attacker, what test proves my fix blocks me?" Write THAT test. Can't write it → fix isn't proven.
gh run list --branch $BRANCH --limit 1
Status must be completed/success. If failed → identify root cause, fix before PR.
"CI is running" ≠ done.
Closes #XXX present for every linked issue?WIP, [WIP], wip)Add a comment on EVERY linked issue with:
Do NOT wait for post-merge. Batch PRs → each issue gets its own comment.
gh issue view <N> --comments
Does a comment with staging PID + AVANT/APRÈS exist? No → add NOW before merge.
Post-merge closure includes:
Closure without evidence = not closed.
No CI gate mandatory, no staging mandatory.
## VERIFICATION
### AVANT (before fix)
<log excerpt / curl output / screenshot>
### APRÈS (after fix, on staging)
<log excerpt / curl output / screenshot>
### Constraints (written before check)
1. Functional: <expected signal>
2. Behavioral: <expected signal>
3. Negative: <expected absence>
### CI gate
- Run: <URL>
- Status: <success | in_progress | failed>
### PR body gate
- [✓/✗] Closes #XXX present
- [✓/✗] No WIP marker
### Issue comments
- #<N>: comment added with PID + AVANT/APRÈS
### VERDICT
<DONE | PENDING: remaining items>
Never sleep-and-poll. Use Monitor for streaming events, Bash background for one-shot waits.
When: you've already deployed and just need to read what happened.
journalctl -u <service> -n 50 --no-pager
Use Bash (not Monitor, not background).
When: you've just triggered a scenario and want to see the log line confirming it.
Monitor(
description: "staging logs after trigger",
persistent: false,
timeout_ms: 60000,
command: "journalctl -u <service> -f --since now | grep --line-buffered 'KEYWORD'"
)
Critical: grep --line-buffered — without it, pipe buffering delays events minutes.
When: long-running command that blocks until complete (deploy script, test run).
Bash(command="deploy-staging.sh", run_in_background=true)
→ Returns PID immediately. You get notified when it completes.
sleep N && tail — harness blocks it. Use Monitor or background instead.run_in_background for deploys.grep --line-buffered — pipe buffering delays events by minutestimeout_ms (60s typical)