Specification Format

OpenSpec uses a structured Markdown format to ensure specs are parseable by tooling and understandable by LLMs.

Requirement Block

Each requirement describes a normative behavior using SHALL or MUST.

### Requirement: User Authentication
The system SHALL provide secure user authentication.

#### Scenario: Successful login
- **GIVEN** a user with valid credentials
- **WHEN** they submit the login form
- **THEN** they are authenticated and redirected

Delta Format (Changes)

When proposing changes in the changes/ directory, you do not rewrite the full spec. You write Deltas.

Adding Requirements

## ADDED Requirements

### Requirement: OAuth Support
The system SHALL support login via Google.

#### Scenario: Google Redirect
- **WHEN** user clicks "Login with Google"
- **THEN** redirect to OAuth provider

Modifying Requirements

To modify a requirement, copy the header exactly and provide the new body.

## MODIFIED Requirements

### Requirement: User Authentication
The system SHALL provide secure authentication via Email and OAuth.

#### Scenario: ... (updated scenario)

Removing Requirements

## REMOVED Requirements

### Requirement: Legacy Token Auth

Renaming Requirements

## RENAMED Requirements
- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`