# OpenSpec Integration This project uses [OpenSpec](https://openspec.dev/) as the **single source of truth** for requirements, specifications, and task tracking. ## Philosophy **Specs live in the repo.** They provide: - Living documentation of system behavior - Context for AI agents implementing features - Reviewable intent before code changes - Traceability from requirements to implementation ## Structure ``` openspec/ ├── README.md # This file ├── specs/ # Living specifications │ ├── docker-infrastructure/ # Phase 1: Docker, Make, env │ ├── database-models/ # Phase 1: SQLAlchemy, Alembic │ ├── auth-oauth/ # Phase 1: Authentication │ ├── user-profile/ # Phase 1: Profiles │ ├── git-repo/ # Phase 1: Repositories │ ├── ssh-keys/ # Phase 1: SSH keys │ ├── project-management/ # Phase 1: Projects │ ├── user-config/ # Phase 1: Preferences │ ├── frontend-foundation/ # Phase 1: React frontend │ ├── api-documentation/ # Phase 1: OpenAPI, health │ ├── tool-types/ # Phase 2: Tool definitions │ ├── tool-instances/ # Phase 2: Container management │ └── tool-terminal/ # Phase 2: Web terminal └── changes/ # Proposed changes (auto-generated) ``` ## Spec-to-PRD Mapping OpenSpec specs map directly to PRD user stories: ### Phase 1: Foundation | Spec | PRD Story | Description | |------|-----------|-------------| | `docker-infrastructure` | US-001 | Docker Compose, Makefiles, environment setup | | `database-models` | US-002 | SQLAlchemy models, Alembic migrations | | `auth-oauth` | US-003 | Authentik OAuth, httpOnly cookies, JWT | | `user-profile` | US-004 | Profile CRUD, avatar upload | | `git-repo` | US-005 | Repository creation, cloning, management | | `ssh-keys` | US-006 | Ed25519 key generation, encryption | | `project-management` | US-007 | Projects, organization, cascading delete | | `user-config` | US-008 | Preferences, JSONB storage | | `frontend-foundation` | US-009 | React, TypeScript, Tailwind, routing | | `api-documentation` | US-010 | OpenAPI/Swagger, health checks, ADRs | ### Phase 2: Tool Runtime | Spec | PRD Story | Description | |------|-----------|-------------| | `tool-types` | US-011 | Docker Compose templates, built-in tools | | `tool-types` | US-012 | ToolInstance model, schema | | `tool-types` | US-013 | Template engine, Jinja2 rendering | | `tool-instances` | US-014 | Tool spawning, Docker integration | | `tool-instances` | US-015 | Traefik routes, subdomain generation | | `tool-terminal` | US-016 | WebSocket terminal, xterm.js | | `tool-instances` | US-017 | Status monitoring, log streaming | | `tool-instances` | US-018 | Frontend tool management UI | | `tool-instances` | US-019 | Config inheritance, env vars | | All Phase 2 | US-020 | Integration, documentation | ## Workflow ### 1. Propose Changes When you want to build something, start with OpenSpec: ```bash # Propose a new change (creates proposal, design, tasks) npx @fission-ai/openspec@latest propose "add repository templates feature" ``` This creates: ``` openspec/changes/add-repo-templates/ ├── .openspec.yaml # Change metadata ├── proposal.md # What & why ├── design.md # How (technical decisions) ├── tasks.md # Implementation steps └── specs/ # Updated spec deltas └── git-repo/ └── spec.md # Modified requirements ``` ### 2. Review the Proposal Read the generated artifacts: - `proposal.md` - Understand what and why - `design.md` - Review technical approach - `tasks.md` - See implementation breakdown - `specs/` - Review requirement changes ### 3. Implement Tasks OpenSpec tasks are the unit of work. Each task from `tasks.md` is implemented directly: ```bash # Apply the change (implements tasks sequentially) npx @fission-ai/openspec@latest apply add-repo-templates ``` Or implement manually by reading `tasks.md` and working through each task. ### 4. Complete the Change When all tasks are done: ```bash # Archive the completed change npx @fission-ai/openspec@latest archive add-repo-templates ``` ## Commands Reference ### OpenSpec ```bash # Propose a change npx @fission-ai/openspec@latest propose "description" # List active changes npx @fission-ai/openspec@latest list # Apply a change (implements tasks) npx @fission-ai/openspec@latest apply # Archive completed change npx @fission-ai/openspec@latest archive # Explore existing specs npx @fission-ai/openspec@latest explore # Check change status npx @fission-ai/openspec@latest status --change ``` ## Quality Gates All changes must: 1. **Update specs first** if requirements change 2. Pass backend tests: `pytest`, `mypy .`, `ruff check .` 3. Pass frontend tests: `npm run typecheck`, `npm run lint` 4. Maintain spec-code alignment (specs reflect actual behavior) ## Rules 1. **Specs are source of truth** - Code implements specs, not the other way around 2. **Changes flow through OpenSpec** - Every feature starts as an OpenSpec proposal 3. **Living documentation** - Update specs when behavior changes 4. **Review intent first** - Review spec deltas before reviewing code diffs ## Integration with AGENTS.md This project follows the workflow defined in `AGENTS.md`: 1. Read OpenSpec specs for context 2. Use superpowers skills for planning 3. Implement tasks from OpenSpec changes 4. Verify against quality gates ## Dependencies - [OpenSpec CLI](https://openspec.dev/) - `npx @fission-ai/openspec@latest`