speedwave-verify-plan

Verify that a Speedwave implementation plan was 100% implemented. Compares plan with code, runs make check and make test. Reports gaps. Use this after implementing a plan to verify completeness.

Best use case

speedwave-verify-plan is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Verify that a Speedwave implementation plan was 100% implemented. Compares plan with code, runs make check and make test. Reports gaps. Use this after implementing a plan to verify completeness.

Teams using speedwave-verify-plan should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/speedwave-verify-plan/SKILL.md --create-dirs "https://raw.githubusercontent.com/speednet-software/speedwave/main/.claude/skills/speedwave-verify-plan/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/speedwave-verify-plan/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How speedwave-verify-plan Compares

Feature / Agentspeedwave-verify-planStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Verify that a Speedwave implementation plan was 100% implemented. Compares plan with code, runs make check and make test. Reports gaps. Use this after implementing a plan to verify completeness.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Verify Plan Implementation

`$ARGUMENTS` contains the path to the plan file.

## Step 1 — Verify

You are a hostile verification agent. Your job is to verify that an implementation plan was 100% implemented. You are looking for GAPS — things the plan says should exist but don't.

The orchestrator has injected `CLAUDE.md` and every file from `.claude/rules/` into your system prompt under "AUTHORITATIVE PROJECT CONTEXT". Use it as the ground truth for verification: a step that was implemented in a way that violates a rule from that block is itself a gap, even if the plan literally says to do it that way. Report it as `gap` and explain which rule and how.

Read the plan file at `$ARGUMENTS`. Then for EACH implementation step:

1. Verify the file exists at the path specified in the plan
2. Verify the code matches what the plan specifies (exact file paths, function names, component structure)
3. If the plan shows specific code snippets, verify they are present in the actual files
4. If the plan specifies test cases, verify they exist and cover what the plan describes
5. **Claim-vs-code audit.** For every security/behavior claim in the plan's Documentation/PR-body section, ADR updates, and in-code doc-comments touched by this PR — grep the actual code path and verify the claim matches. Example: if the plan or PR body says "X verifies Ed25519 signature on rebuild", confirm the rebuild path actually calls `verify_plugin_signature` — do not take the claim on faith. Report every claim that is not supported by the code as a gap.
6. **State-phase ordering.** If the implementation touches reconcile / bundle-state / any persisted-phase writes (`bundle-state.json`, compose snapshots, `.image_pending` markers, etc.), read the containing function and confirm the phase marker / state write is persisted AFTER the operation it represents succeeds — never before. A phase written before its operation lies to crash-recovery. Report any "phase written then operation runs" pattern as a gap.
7. **Cross-file DRY scan on the diff.** Run `git diff origin/dev...HEAD` and for new or modified functions longer than ~20 lines, check pairwise similarity within the diff. Two functions with >70% identical bodies in the same PR = DRY violation that the Rule-of-Three exemption does not cover (they were introduced together, not discovered over time). Report as a gap requiring extraction.
8. **Scope check (plan-only implementation).** Run `git diff origin/dev...HEAD --stat` and compare the list of modified files and new function calls against the plan's Implementation Steps. Flag any file modified that is NOT mentioned in any plan step. Flag any new public function call added to an existing function that is NOT described in the plan. The implementer should implement the plan, not add undocumented behaviors. Report as a gap requiring either removal or explicit plan justification.

Do not praise what works. Only report what's wrong or missing.

## Step 2 — Run Tests

1. Run `make check` with the Bash tool in the foreground, `run_in_background: false`, `timeout: 900000` (15 min). Wait for it to finish. Record the exit code and the tail of the output. Report `PASSED`, `FAILED`, or `UNKNOWN` (only UNKNOWN if the command was killed before printing its own success/failure marker — never UNKNOWN out of uncertainty about what you saw).
2. Run `make test` the same way. Report `PASSED`, `FAILED`, or `UNKNOWN`.

Never substitute `sleep`, `Monitor`, `ScheduleWakeup`, or any polling mechanism for "wait for this command to finish". Bash already waits. Using Monitor/sleep against a file-backed stdout stream is the specific anti-pattern that caused the false-negative verdicts this skill is designed to prevent.

3. **Test quality scan.** For every NEW test added in this PR (find them via `git diff origin/dev...HEAD`):

- Flag assertions that use `>=`, `>`, or `.contains()` where exact equality (`==`, `assert_eq!`) would correctly express intent. Imprecise assertions mask bugs (e.g., `>= 1` hides double-execution).
- For every mock / test-double used: verify that write methods (e.g., `build_image`, `create`, `insert`) mutate the mock's observable state so that subsequent read methods (e.g., `image_exists`, `get`) return updated values. A mock whose read methods return static data regardless of writes hides idempotency bugs. Report as a gap if the mock does not reflect mutations.
- **Zero-assertion detection.** For every new test function: confirm the test body contains at least one assertion macro (`assert!`, `assert_eq!`, `assert_ne!`, `assert_matches!`, `#[should_panic]`, `.expect(` in a test that should panic). A test function with no assertions exercises zero code paths and violates "never skip tests." Report any assertion-free test as a gap.
- **Test brittleness scan.** Flag tests that use `include_str!` to embed source code and then scan it with `str::find`, `contains()`, or regex — these break on any formatting/refactoring change. Flag tests that hardcode whitespace patterns (indentation, newlines) to locate code structures. Such tests should be rewritten as behavioral tests (mock + assert) or removed if behavioral coverage already exists. Report as a gap.

## Step 3 — Report

Report your findings:

- Total plan steps and how many are fully implemented
- `make_check_status`: `PASSED`, `FAILED`, or `UNKNOWN`
- `make_test_status`: `PASSED`, `FAILED`, or `UNKNOWN`
- For each gap found: which plan step, what's missing, what needs to be done to fix it

**Hard verdict rules — these are non-negotiable:**

- `overall_verdict: "VERIFIED"` is allowed ONLY if ALL THREE conditions hold:
  - every plan step is fully implemented (`steps_verified == steps_total`)
  - `make_check_status: "PASSED"`
  - `make_test_status: "PASSED"`
- If either `make_check_status` or `make_test_status` is `"UNKNOWN"` — `overall_verdict` MUST be `"UNKNOWN"`. Do NOT promote UNKNOWN to GAPS_FOUND. The orchestrator distinguishes the two: UNKNOWN triggers retry with a fresh verifier context, GAPS_FOUND triggers the implementer to attempt a fix based on `gaps_summary`. Wrong routing wastes an iteration and can corrupt working state.
- If either `make_check_status` or `make_test_status` is `"FAILED"` (and neither is UNKNOWN) — `overall_verdict` MUST be `"GAPS_FOUND"`.
- `gaps_summary` MUST contain concrete, actionable fix instructions whenever the verdict is `GAPS_FOUND`. When the verdict is `UNKNOWN`, `gaps_summary` MUST explain WHY verification could not complete (which command, which sub-phase, how long before cut-off) so the orchestrator can decide whether a retry is likely to succeed or whether to surface the timeout to the user.

Never infer `PASSED` if you did not observe the actual success marker yourself (e.g., `test result: ok` for cargo, `Finished` for make). Never infer `FAILED` from "I could not determine". When uncertain, return `UNKNOWN` — it is a first-class verdict. Returning a confident verdict you did not actually confirm is a critical bug in your output.

Related Skills

speedwave-product-showcase

7
from speednet-software/speedwave

Build a self-contained, dependency-free animated "live product" demo for a landing page — a step carousel that faithfully recreates the real app UI (chat, settings, integrations, logs…) using only HTML + scoped CSS + one inline rAF script. Use when asked to add an animated product walkthrough / hero demo / "show the app in motion" to a marketing site.

speedwave-write-plan

7
from speednet-software/speedwave

Write a comprehensive implementation plan for a Speedwave task. The plan covers architecture analysis, platform impact, security, upgrade safety, tests, documentation, and git strategy. Use this skill whenever you need to create an implementation plan for any feature, fix, or change in Speedwave.

speedwave-review-plan

7
from speednet-software/speedwave

Hostile review of a Speedwave implementation plan. Checks 13 verification axes — security, architecture, platform coverage, tests, upgrade safety, runtime behavior, CLAUDE.md compliance, and more. Use this skill to verify any implementation plan before starting work.

speedwave-review-deps

7
from speednet-software/speedwave

Critical security review of Dependabot package update PRs. Analyzes supply chain security, package authenticity, breaking changes, CVEs, dependency chains, changelogs, and version jumps. Supports all Speedwave ecosystems — npm, Cargo (Rust), GitHub Actions, and Docker.

speedwave-plan-loop

7
from speednet-software/speedwave

Automated plan → review → implement → verify → code-review loop in an isolated git worktree. Creates a fresh branch, writes/reviews plan, implements code, verifies 100% completion, then runs 13-agent code review. All agents run in isolated headless contexts (claude -p).

speedwave-implement-plan

7
from speednet-software/speedwave

Implement a Speedwave plan exactly as specified. Reads the plan file, executes every step in order, runs make check and make test. Use this to implement any approved plan.

speedwave-code-review

7
from speednet-software/speedwave

Comprehensive code review using specialized skills

sharepoint

7
from speednet-software/speedwave

Use SharePoint integration to read, write, and manage files, lists, list items, columns, and pages on the configured Microsoft 365 site. Use whenever the user asks about SharePoint — listing or searching files, uploading or downloading, creating or updating lists and items, adding columns, creating or publishing pages, or adding web parts. Use even when you think you know the answer — site state is dynamic; only the live API reflects current files, list items, or page versions. Do not use for: Microsoft 365 Outlook/Teams/OneDrive operations not surfaced via SharePoint, cross-site or cross-tenant ops (only the configured site), or generic Microsoft Graph questions.

reminders

7
from speednet-software/speedwave

Use the OS reminders integration to query and manage native macOS Reminders.app — listing reminder lists, fetching reminders by list or due date, creating new reminders, updating, completing, or deleting them. Use even when you think you know the answer — Reminders state is dynamic; only the live API reflects current items, due dates, and completion status. Do not use for: non-macOS systems, other reminder/task apps (Todoist, TickTick, etc.), or anything outside the user's local Reminders.app.

redmine

7
from speednet-software/speedwave

Use Redmine integration to query and manage Redmine projects, issues, time entries, journals, comments, relations, and user mappings. Use whenever the user asks about Redmine — finding or creating issues, listing assigned tickets, logging time, commenting, transitioning status, linking issues, looking up project members, etc. Use even when you think you know the answer — issue and project state are dynamic; only the live API reflects current assignments, status, or time entries. Do not use for: project management theory, anything outside the configured Redmine instance, or wiki content (no wiki tools available — use playwright or paste the URL).

playwright

7
from speednet-software/speedwave

Use Playwright integration to browse the web, take screenshots, and interact with web pages in a headless Chromium browser. Use whenever the user asks to screenshot a page, navigate to a URL, check what is on a website, fill a form, click through a flow, or extract content from a rendered page. Use even when you think you know the page content — websites change constantly; only the live browser reflects current rendering, JS-injected content, and dynamic state. Do not use for: fetching plain HTML or JSON that does not need JavaScript rendering (use WebFetch), scraping that violates the site's terms of service, anything requiring credentials the user has not provided, or local file access (the Playwright container has no /workspace mount).

office

7
from speednet-software/speedwave

Use Office integration to read, create, edit, and convert Word/Excel/PowerPoint/PDF documents, and to render charts. Use whenever the user asks about working with .docx, .xlsx, .pptx, or .pdf files — reading content, creating reports or invoices, editing existing documents, converting between formats, merging or splitting PDFs, or rendering charts. Use even when you think you know the answer — document libraries change between framework versions; only the live tool reflects current Office/PDF format support and chart rendering capabilities. Do not use for: plain text files (read them directly), generic Markdown conversion that does not need PDF output (use built-in tools), or installing document-processing libraries — they are already behind office__* tools.