Files
client/specs/VSDD.md
2026-03-07 19:46:19 +01:00

4.1 KiB

Verified Spec-Driven Development (VSDD)

The Fusion: VDD x TDD x SDD for AI-Native Engineering

Overview

VSDD is the unified software engineering methodology used for all forage development. It fuses three paradigms into a single AI-orchestrated pipeline:

  • Spec-Driven Development (SDD): Define the contract before writing a single line of implementation. Specs are the source of truth.
  • Test-Driven Development (TDD): Tests are written before code. Red -> Green -> Refactor. No code exists without a failing test that demanded it.
  • Verification-Driven Development (VDD): Subject all surviving code to adversarial refinement until a hyper-critical reviewer is forced to hallucinate flaws.

The Toolchain

Role Entity Function
The Architect Human Developer Strategic vision, domain expertise, acceptance authority
The Builder Claude Spec authorship, test generation, code implementation, refactoring
The Adversary External reviewer Hyper-critical reviewer with zero patience

The Pipeline

Phase 1 - Spec Crystallization

Nothing gets built until the contract is airtight.

Step 1a: Behavioral Specification

  • Behavioral Contract: preconditions, postconditions, invariants
  • Interface Definition: input types, output types, error types
  • Edge Case Catalog: exhaustive boundary conditions and failure modes
  • Non-Functional Requirements: performance, memory, security

Step 1b: Verification Architecture

  • Provable Properties Catalog: which invariants must be formally verified
  • Purity Boundary Map: deterministic pure core vs effectful shell
  • Property Specifications: formal property definitions where applicable

Step 1c: Spec Review Gate

  • Reviewed by both human and adversary before any tests

Phase 2 - Test-First Implementation (The TDD Core)

Red -> Green -> Refactor, enforced by AI.

Step 2a: Test Suite Generation

  • Unit tests per behavioral contract item
  • Edge case tests from the catalog
  • Integration tests for system context
  • Property-based tests for invariants

The Red Gate: All tests must fail before implementation begins.

Enforcement note (from Review 002): When writing tests alongside templates and routes, use stub handlers returning 501 to verify tests fail before implementing the real logic. This prevents false confidence from tests that were never red.

Step 2b: Minimal Implementation

  1. Pick the next failing test
  2. Write the smallest implementation that makes it pass
  3. Run the full suite - nothing else should break
  4. Repeat

Step 2c: Refactor After all tests green, refactor for clarity and performance.

Phase 3 - Adversarial Refinement

The code survived testing. Now it faces the gauntlet.

Reviews: spec fidelity, test quality, code quality, security surface, spec gaps.

Phase 4 - Feedback Integration Loop

Critique feeds back through the pipeline:

  • Spec-level flaws -> Phase 1
  • Test-level flaws -> Phase 2a
  • Implementation flaws -> Phase 2c
  • New edge cases -> Spec update -> new tests -> fix

Phase 5 - Formal Hardening

  • Fuzz testing on the pure core
  • Security static analysis (cargo-audit, clippy)
  • Mutation testing where applicable

Phase 6 - Convergence

Done when:

  • Adversary critiques are nitpicks, not real issues
  • No meaningful untested scenarios remain
  • Implementation matches spec completely
  • Security analysis is clean

Core Principles

  1. Spec Supremacy: The spec is the highest authority below the human developer
  2. Verification-First Architecture: Pure core, effectful shell - designed from Phase 1
  3. Red Before Green: No implementation without a failing test
  4. Anti-Slop Bias: First "correct" version assumed to contain hidden debt
  5. Minimal Implementation: Three similar lines > premature abstraction

Applying VSDD in This Project

Each feature follows this flow:

  1. Create spec in specs/features/<feature-name>.md
  2. Spec review with human
  3. Write failing tests in appropriate crate
  4. Implement minimally in pure core (forage-core)
  5. Wire up in effectful shell (forage-server, forage-db)
  6. Adversarial review
  7. Iterate until convergence