Back to skills
SkillHub ClubShip Full StackFull StackTesting

code-verification

Use when user says "verify code", "check acceptance criteria", "is story ready", or when a story at verifying stage needs execution-based verification - runs tests, checks acceptance criteria, verifies user journeys, generates pass/fail report with evidence, and updates story status.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
1
Hot score
77
Updated
March 20, 2026
Overall rating
C3.2
Composite score
3.2
Best-practice grade
A92.0

Install command

npx @skill-hub/cli install mharbulous-syncopaid-code-verification

Repository

Mharbulous/SyncoPaid

Skill path: .claude/skills/code-verification

Use when user says "verify code", "check acceptance criteria", "is story ready", or when a story at verifying stage needs execution-based verification - runs tests, checks acceptance criteria, verifies user journeys, generates pass/fail report with evidence, and updates story status.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack, Testing.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: Mharbulous.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install code-verification into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/Mharbulous/SyncoPaid before adding code-verification to shared team environments
  • Use code-verification for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: code-verification
description: Use when user says "verify code", "check acceptance criteria", "is story ready", or when a story at verifying stage needs execution-based verification - runs tests, checks acceptance criteria, verifies user journeys, generates pass/fail report with evidence, and updates story status.
---

# Code Verification - Execution-Based Testing

Verify that implemented code works correctly by **running the software** and observing behavior.

> **Critical Distinction:** This is verification (execution), not review (inspection) or validation (judgment).
> See `CLAUDE.md` section "Quality Assurance Terminology" for definitions.

**Announce:** On activation, say: "I'm using the code-verification skill to verify the implementation meets acceptance criteria."

**Database:** `.claude/data/story-tree.db`

**Critical:** Use Python sqlite3 module, NOT sqlite3 CLI.

## Purpose

Bridge the gap between `verifying` and `implemented` stages by **executing tests and observing behavior**. This prevents incomplete implementations from being marked implemented. Stories transition: `stage='verifying'` -> `stage='implemented'` -> `stage='ready'`.

## Verification Phases

Verification covers four areas:

| Phase | What It Checks | Method |
|-------|---------------|--------|
| **1. Test Suite** | Unit/integration tests pass | Run pytest |
| **2. Acceptance Criteria** | Each criterion satisfied | Evidence gathering |
| **3. User Journeys** | Complete workflows work | E2E execution |
| **4. Sibling Integration** | No regressions in related stories | Cross-story tests |

All four phases must pass for full verification.

## Mode Detection

**CI Mode** activates when:
- Environment variable `CI=true` is set, OR
- Trigger phrase includes "(ci)" like "verify code (ci)"

**CI Mode behavior:**
- No confirmation prompts
- Structured JSON output for automation
- Skip interactive review options

**Interactive Mode** (default):
- Present verification results for human review
- Allow manual override of failed criteria
- Offer guidance on addressing failures

## Workflow

### Step 1: Select Story to Verify

**Query stories ready for verification:**

```python
python -c "
import sqlite3, json
conn = sqlite3.connect('.claude/data/story-tree.db')
conn.row_factory = sqlite3.Row
stories = [dict(row) for row in conn.execute('''
    SELECT s.id, s.title, s.description, s.stage, s.project_path, s.human_review,
        (SELECT MIN(depth) FROM story_paths WHERE descendant_id = s.id) as node_depth
    FROM story_nodes s
    WHERE s.stage IN ('verifying', 'reviewing')
      AND s.hold_reason IS NULL AND s.terminus IS NULL
    ORDER BY node_depth ASC
''').fetchall()]
print(json.dumps(stories, indent=2))
conn.close()
"
```

**Selection rules:**
- If user specified ID: validate exists and stage is `verifying` or `reviewing` (not held/disposed)
- Otherwise: select first `verifying` story (shallowest first)
- Interactive only: Confirm selection with user

### Step 2: Parse Acceptance Criteria

Run the criteria parser:

```bash
python .claude/skills/code-verification/parse_criteria.py <story_id>
```

**Expected output:**
```json
{
  "story_id": "1.7",
  "title": "Privacy & Data Security",
  "criteria": [
    {"index": 1, "text": "All data stored locally with no network transmission", "checked": false},
    {"index": 2, "text": "Delete specific time ranges from activity history", "checked": false}
  ],
  "criteria_count": 5
}
```

**Checkbox format recognition:**
- `- [ ]` = unchecked criterion
- `- [x]` or `- [X]` = checked criterion (already verified)

### Step 3: Verify Each Criterion

For each unchecked criterion, gather evidence:

#### 3a. Search for Related Tests

```bash
python .claude/skills/code-verification/find_evidence.py test "<criterion_text>" [project_path]
```

Look for:
- Test files that cover the criterion
- Assertions that validate the behavior
- Test names that match criterion keywords

#### 3b. Search for Implementation Code

```bash
python .claude/skills/code-verification/find_evidence.py code "<criterion_text>" [project_path]
```

Look for:
- Functions/methods implementing the behavior
- Configuration handling for configurable features
- Error handling for edge cases

#### 3c. Run Related Tests

If tests exist:
```bash
python -m pytest <test_file>::<test_function> -v
```

### Step 4: Classify Each Criterion

| Status | Definition | Evidence Required |
|--------|------------|-------------------|
| `PASS` | Criterion fully satisfied | Tests pass + code exists |
| `PARTIAL` | Partially implemented | Some tests pass, gaps identified |
| `FAIL` | Not implemented | No evidence found |
| `UNTESTABLE` | Cannot verify automatically | Requires manual testing |
| `SKIP` | Already checked in description | Criterion marked `[x]` |

### Step 5: Generate Verification Report

```bash
python .claude/skills/code-verification/generate_report.py <story_id>
```

**Report format:**
```
CODE VERIFICATION REPORT
========================

Story: [ID] - [Title]
Status: [current_status]

ACCEPTANCE CRITERIA RESULTS:

1. [PASS] All data stored locally with no network transmission
   Evidence: tests/test_database.py::test_no_network_calls
   Code: src/syncopaid/database.py:45-60

2. [FAIL] Delete specific time ranges from activity history
   Missing: No implementation found for time-range deletion

3. [UNTESTABLE] Clear visual confirmation when sensitive data is deleted
   Reason: UI behavior requires manual verification

SUMMARY:
  Passed:     3/5 (60%)
  Failed:     1/5 (20%)
  Untestable: 1/5 (20%)

RECOMMENDATION: [READY | NEEDS_WORK | MANUAL_REVIEW]
```

### Step 6: Update Story Stage

Based on verification results:

| Result | Action |
|--------|--------|
| All PASS/SKIP | Update stage to `implemented` |
| Any FAIL | Keep stage at `verifying`, set hold_reason='escalated', human_review=1 |
| All PASS but some UNTESTABLE | Keep stage at `verifying`, set hold_reason='escalated', human_review=1 |
| Mixed results | Interactive: ask user; CI: keep at `verifying` with hold |

```bash
python .claude/skills/code-verification/update_status.py <story_id> <new_stage> "<verification_notes>"
```

### Step 7: Update Acceptance Criteria Checkboxes

For criteria that PASS, mark them as checked:

```bash
python .claude/skills/code-verification/update_status.py <story_id> mark-criteria 1,2,3
```

### Step 8: Verify User Journeys

If the story description includes user journeys (workflows), verify each by execution:

**Identify journeys in description:**
- Look for sections titled "User Journey", "Workflow", or "Steps"
- Look for numbered step sequences

**For each journey:**
1. Set up preconditions (required state)
2. Execute each step in sequence
3. Assert expected outcome at each step
4. Confirm final goal is achieved

**Journey verification checklist:**
- [ ] All steps execute without errors
- [ ] Intermediate states are correct
- [ ] Final goal is achieved
- [ ] No side effects on unrelated data

See `references/user-journey-testing.md` for detailed patterns.

### Step 9: Test Sibling Integration

Verify the story works correctly alongside its siblings:

**Find sibling stories:**

```sql
-- Siblings = stories with same parent that are already implemented
SELECT id, title FROM story_nodes
WHERE parent_id = (SELECT parent_id FROM story_nodes WHERE id = :story_id)
  AND id != :story_id
  AND stage IN ('implemented', 'released')
```

**Integration checks:**
1. **Shared resources** - No conflicts in database, config, files
2. **Data flow** - Data passes correctly between features
3. **Regression tests** - Existing sibling tests still pass

See `references/integration-testing-siblings.md` for detailed patterns.

## Output Format

### Full Verification Report (YAML)

```yaml
verification_report:
  story_id: "1.2.3"
  title: "Feature Title"
  verified_at: "2025-12-29T10:30:00Z"

  test_suite:
    executed: true
    passed: 42
    failed: 0
    skipped: 3

  acceptance_criteria:
    - criterion: "User can export data as CSV"
      status: pass
      evidence: "tests/test_export.py::test_csv_format passed"
    - criterion: "Export includes timestamps"
      status: pass
      evidence: "Verified timestamp column in output"

  user_journeys:
    - journey: "Export monthly report"
      status: pass
      steps_completed: 5/5
    - journey: "Filter and export"
      status: pass
      steps_completed: 3/3

  integration:
    sibling_stories_tested: ["1.2.1", "1.2.2"]
    regressions: none

  overall: pass  # pass | fail
```

### CI Mode Output (JSON)

**Success:**
```json
{
  "story_id": "1.7",
  "title": "Privacy & Data Security",
  "previous_status": "verifying",
  "new_status": "implemented",
  "test_suite": {"passed": 12, "failed": 0},
  "criteria_results": [
    {"criterion": "...", "status": "PASS", "evidence": "..."}
  ],
  "summary": {"passed": 5, "failed": 0, "untestable": 0},
  "recommendation": "IMPLEMENTED"
}
```

**Failure:**
```json
{
  "story_id": "1.7",
  "previous_status": "verifying",
  "new_status": "verifying",
  "test_suite": {"passed": 10, "failed": 2},
  "criteria_results": [
    {"criterion": "...", "status": "FAIL", "reason": "No implementation found"}
  ],
  "summary": {"passed": 3, "failed": 2, "untestable": 0},
  "recommendation": "NEEDS_WORK",
  "failures": ["Test: test_export_format", "Criterion 2: ..."]
}
```

## Evidence Collection

Verification requires evidence for human review. See `references/evidence-collection.md` for complete patterns.

**Minimum evidence per criterion:**
- Test file and function that validates it
- Code location implementing the behavior
- Pass/fail result with timestamp

## Exit Conditions

| Result | Transition |
|--------|------------|
| All phases pass | -> Update stage to `implemented` |
| Any phase fails | -> Keep at `verifying`, set `hold_reason='escalated'` |

## Do NOT

- Conflate with code review (inspection-based) - that's `code-review` skill
- Conflate with validation (human judgment) - that's `human-validation` skill
- Include retry loops or debug ladders - that's `debug-orchestrator` skill
- Skip running tests - verification requires execution

## References

### Skill Files
- **Parser:** `.claude/skills/code-verification/parse_criteria.py`
- **Evidence Finder:** `.claude/skills/code-verification/find_evidence.py`
- **Report Generator:** `.claude/skills/code-verification/generate_report.py`
- **Status Updater:** `.claude/skills/code-verification/update_status.py`

### Research Documentation
- **Acceptance Testing:** `references/acceptance-testing-best-practices.md`
- **User Journey Testing:** `references/user-journey-testing.md`
- **Integration Testing:** `references/integration-testing-siblings.md`
- **Evidence Collection:** `references/evidence-collection.md`

### External References
- **Database:** `.claude/data/story-tree.db`
- **Schema:** `.claude/skills/story-tree/references/schema.sql`
- **Three-Field System:** `.claude/skills/story-tree/SKILL.md`
- **QA Terminology:** `CLAUDE.md` (Quality Assurance Terminology section)
code-verification | SkillHub