Spec-Driven Development: Enforcing Architectural Contracts for Coding Agents