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`