Files
Mike Swanson 75ce1c2fd5 feat: Add Sequential Thinking to Code Review + Frontend Validation
Enhanced code review and frontend validation with intelligent triggers:

Code Review Agent Enhancement:
- Added Sequential Thinking MCP integration for complex issues
- Triggers on 2+ rejections or 3+ critical issues
- New escalation format with root cause analysis
- Comprehensive solution strategies with trade-off evaluation
- Educational feedback to break rejection cycles
- Files: .claude/agents/code-review.md (+308 lines)
- Docs: CODE_REVIEW_ST_ENHANCEMENT.md, CODE_REVIEW_ST_TESTING.md

Frontend Design Skill Enhancement:
- Automatic invocation for ANY UI change
- Comprehensive validation checklist (200+ checkpoints)
- 8 validation categories (visual, interactive, responsive, a11y, etc.)
- 3 validation levels (quick, standard, comprehensive)
- Integration with code review workflow
- Files: .claude/skills/frontend-design/SKILL.md (+120 lines)
- Docs: UI_VALIDATION_CHECKLIST.md (462 lines), AUTOMATIC_VALIDATION_ENHANCEMENT.md (587 lines)

Settings Optimization:
- Repaired .claude/settings.local.json (fixed m365 pattern)
- Reduced permissions from 49 to 33 (33% reduction)
- Removed duplicates, sorted alphabetically
- Created SETTINGS_PERMISSIONS.md documentation

Checkpoint Command Enhancement:
- Dual checkpoint system (git + database)
- Saves session context to API for cross-machine recall
- Includes git metadata in database context
- Files: .claude/commands/checkpoint.md (+139 lines)

Decision Rationale:
- Sequential Thinking MCP breaks rejection cycles by identifying root causes
- Automatic frontend validation catches UI issues before code review
- Dual checkpoints enable complete project memory across machines
- Settings optimization improves maintainability

Total: 1,200+ lines of documentation and enhancements

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 16:23:52 -07:00

1 line
51 KiB
Plaintext

{"openapi":"3.1.0","info":{"title":"Autocoder+","description":"Enhanced autonomous coding agent with permission management and dual-agent execution","version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health Check","description":"Health check endpoint for monitoring server status.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/health":{"get":{"summary":"Api Health Check","description":"Alternative health check endpoint under /api prefix.","operationId":"api_health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/debug/tables":{"get":{"summary":"Get Database Tables","description":"Debug endpoint to list all database tables.","operationId":"get_database_tables_api_debug_tables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/projects":{"get":{"tags":["projects"],"summary":"List Projects","description":"List all projects.","operationId":"list_projects_api_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListResponse"}}}}}},"post":{"tags":["projects"],"summary":"Create Project","description":"Create a new project.","operationId":"create_project_api_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}":{"get":{"tags":["projects"],"summary":"Get Project","description":"Get a project by name.","operationId":"get_project_api_projects__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["projects"],"summary":"Update Project","description":"Update a project by name.","operationId":"update_project_api_projects__name__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Project","description":"Delete a project by name.","operationId":"delete_project_api_projects__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/duplicate":{"post":{"tags":["projects"],"summary":"Duplicate Project","description":"Duplicate a project with a new name, including permissions and infrastructure.","operationId":"duplicate_project_api_projects__name__duplicate_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateProjectRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/agents/status":{"get":{"tags":["agents"],"summary":"Get Agents Status","description":"Get status of both agents for a project.","operationId":"get_agents_status_api_projects__name__agents_status_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/agents/{agent_id}/start":{"post":{"tags":["agents"],"summary":"Start Agent","description":"Start an agent for a project.","operationId":"start_agent_api_projects__name__agents__agent_id__start_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/agents/{agent_id}/stop":{"post":{"tags":["agents"],"summary":"Stop Agent","description":"Stop an agent for a project.","operationId":"stop_agent_api_projects__name__agents__agent_id__stop_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/agents/{agent_id}/pause":{"post":{"tags":["agents"],"summary":"Pause Agent","description":"Pause an agent for a project.","operationId":"pause_agent_api_projects__name__agents__agent_id__pause_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/agents/{agent_id}/resume":{"post":{"tags":["agents"],"summary":"Resume Agent","description":"Resume a paused agent for a project.","operationId":"resume_agent_api_projects__name__agents__agent_id__resume_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features":{"get":{"tags":["features"],"summary":"List Features","description":"List features for a project with optional filters.","operationId":"list_features_api_projects__name__features_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: pending, passing, in_progress, stalled","title":"Status"},"description":"Filter by status: pending, passing, in_progress, stalled"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["features"],"summary":"Create Feature","description":"Create a new feature for a project.","operationId":"create_feature_api_projects__name__features_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features/stats":{"get":{"tags":["features"],"summary":"Get Feature Stats","description":"Get feature statistics for a project.","operationId":"get_feature_stats_api_projects__name__features_stats_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features/{feature_id}":{"get":{"tags":["features"],"summary":"Get Feature","description":"Get a specific feature by ID.","operationId":"get_feature_api_projects__name__features__feature_id__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["features"],"summary":"Update Feature","description":"Update a feature (limited fields).","operationId":"update_feature_api_projects__name__features__feature_id__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features/{feature_id}/unstall":{"post":{"tags":["features"],"summary":"Unstall Feature","description":"Clear stalled status from a feature.","operationId":"unstall_feature_api_projects__name__features__feature_id__unstall_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features/{feature_id}/dependencies":{"get":{"tags":["features"],"summary":"Get Feature Dependencies","description":"Get dependency information for a feature.","operationId":"get_feature_dependencies_api_projects__name__features__feature_id__dependencies_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyChainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["features"],"summary":"Set Feature Dependencies","description":"Set dependencies for a feature.\n\nIf the feature or any of its dependencies are already assigned to an agent,\nall features in the dependency chain will be assigned to the same agent.","operationId":"set_feature_dependencies_api_projects__name__features__feature_id__dependencies_put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDependenciesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/features/{feature_id}/assign-agent":{"post":{"tags":["features"],"summary":"Assign Feature To Agent","description":"Assign a feature and all its dependencies to an agent.\n\nThis ensures that all features in the dependency chain are assigned\nto the same agent to prevent conflicts.","operationId":"assign_feature_to_agent_api_projects__name__features__feature_id__assign_agent_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"integer","title":"Feature Id"}},{"name":"agent_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[AB]$","description":"Agent ID (A or B)","title":"Agent Id"},"description":"Agent ID (A or B)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureResponse"},"title":"Response Assign Feature To Agent Api Projects Name Features Feature Id Assign Agent Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permissions":{"get":{"tags":["permissions"],"summary":"List Permissions","description":"List all permissions for a project.","operationId":"list_permissions_api_projects__name__permissions_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["permissions"],"summary":"Create Permission","description":"Create a new permission for a project.","operationId":"create_permission_api_projects__name__permissions_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permissions/export":{"get":{"tags":["permissions"],"summary":"Export Permissions","description":"Export permissions to a configuration format.","operationId":"export_permissions_api_projects__name__permissions_export_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permissions/import":{"post":{"tags":["permissions"],"summary":"Import Permissions","description":"Import permissions from a configuration file.","operationId":"import_permissions_api_projects__name__permissions_import_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permissions/{permission_id}":{"get":{"tags":["permissions"],"summary":"Get Permission","description":"Get a specific permission by ID.","operationId":"get_permission_api_projects__name__permissions__permission_id__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"permission_id","in":"path","required":true,"schema":{"type":"integer","title":"Permission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["permissions"],"summary":"Update Permission","description":"Update a permission.","operationId":"update_permission_api_projects__name__permissions__permission_id__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"permission_id","in":"path","required":true,"schema":{"type":"integer","title":"Permission Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["permissions"],"summary":"Delete Permission","description":"Delete a permission.","operationId":"delete_permission_api_projects__name__permissions__permission_id__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"permission_id","in":"path","required":true,"schema":{"type":"integer","title":"Permission Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permission-requests":{"get":{"tags":["permissions"],"summary":"List Permission Requests","description":"List permission requests for a project.","operationId":"list_permission_requests_api_projects__name__permission_requests_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["permissions"],"summary":"Create Permission Request","description":"Create a new permission request (typically called by agents).","operationId":"create_permission_request_api_projects__name__permission_requests_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permission-requests/{request_id}/grant":{"post":{"tags":["permissions"],"summary":"Grant Permission Request","description":"Grant a pending permission request.","operationId":"grant_permission_request_api_projects__name__permission_requests__request_id__grant_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/permission-requests/{request_id}/deny":{"post":{"tags":["permissions"],"summary":"Deny Permission Request","description":"Deny a pending permission request.","operationId":"deny_permission_request_api_projects__name__permission_requests__request_id__deny_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/spec":{"get":{"tags":["spec"],"summary":"Get Current Spec","description":"Get the current (latest) spec for a project.","operationId":"get_current_spec_api_projects__name__spec_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["spec"],"summary":"Update Spec","description":"Update the spec (creates a new version).","operationId":"update_spec_api_projects__name__spec_put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/spec/history":{"get":{"tags":["spec"],"summary":"Get Spec History","description":"Get the spec version history for a project.","operationId":"get_spec_history_api_projects__name__spec_history_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecHistoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/spec/rollback/{version}":{"post":{"tags":["spec"],"summary":"Rollback Spec","description":"Rollback to a previous spec version.","operationId":"rollback_spec_api_projects__name__spec_rollback__version__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/spec/analyze-changes":{"post":{"tags":["spec"],"summary":"Analyze Spec Changes","description":"Preview the impact of spec changes before applying them.","operationId":"analyze_spec_changes_api_projects__name__spec_analyze_changes_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure":{"get":{"tags":["infrastructure"],"summary":"List Infrastructure","description":"List all infrastructure services for a project.","operationId":"list_infrastructure_api_projects__name__infrastructure_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["infrastructure"],"summary":"Create Infrastructure","description":"Create a new infrastructure service for a project.","operationId":"create_infrastructure_api_projects__name__infrastructure_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure/{service_id}":{"get":{"tags":["infrastructure"],"summary":"Get Infrastructure","description":"Get a specific infrastructure service by ID.","operationId":"get_infrastructure_api_projects__name__infrastructure__service_id__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"integer","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["infrastructure"],"summary":"Update Infrastructure","description":"Update an infrastructure service.","operationId":"update_infrastructure_api_projects__name__infrastructure__service_id__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"integer","title":"Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["infrastructure"],"summary":"Delete Infrastructure","description":"Delete an infrastructure service.","operationId":"delete_infrastructure_api_projects__name__infrastructure__service_id__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"integer","title":"Service Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure/{service_id}/health-check":{"post":{"tags":["infrastructure"],"summary":"Check Infrastructure Health","description":"Perform a health check on an infrastructure service.","operationId":"check_infrastructure_health_api_projects__name__infrastructure__service_id__health_check_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"integer","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure/{service_id}/test":{"post":{"tags":["infrastructure"],"summary":"Test Infrastructure Connectivity","description":"Test connectivity to an infrastructure service (alias for health-check).","operationId":"test_infrastructure_connectivity_api_projects__name__infrastructure__service_id__test_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"service_id","in":"path","required":true,"schema":{"type":"integer","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure/discover":{"post":{"tags":["infrastructure"],"summary":"Discover Infrastructure","description":"Discover infrastructure services for a project based on port scanning.","operationId":"discover_infrastructure_api_projects__name__infrastructure_discover_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/infrastructure/discover/add":{"post":{"tags":["infrastructure"],"summary":"Add Discovered Service","description":"Add a discovered service to the project infrastructure.","operationId":"add_discovered_service_api_projects__name__infrastructure_discover_add_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveredService"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfrastructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AffectedFeatureResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["id","name","category","reason"],"title":"AffectedFeatureResponse","description":"Schema for an affected feature in change analysis."},"AgentActionResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["agent_id","status","message"],"title":"AgentActionResponse","description":"Schema for agent action response."},"AgentStatus":{"properties":{"status":{"type":"string","title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"paused_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paused At"}},"type":"object","required":["status"],"title":"AgentStatus","description":"Schema for agent status."},"AgentStatusResponse":{"properties":{"agent_a":{"$ref":"#/components/schemas/AgentStatus"},"agent_b":{"$ref":"#/components/schemas/AgentStatus"}},"type":"object","required":["agent_a","agent_b"],"title":"AgentStatusResponse","description":"Schema for agent status response (both agents)."},"DependencyChainResponse":{"properties":{"feature_id":{"type":"integer","title":"Feature Id"},"depends_on":{"items":{"type":"integer"},"type":"array","title":"Depends On"},"depended_by":{"items":{"type":"integer"},"type":"array","title":"Depended By"},"chain":{"items":{"type":"integer"},"type":"array","title":"Chain"}},"type":"object","required":["feature_id","depends_on","depended_by","chain"],"title":"DependencyChainResponse","description":"Schema for dependency chain response."},"DiscoveredService":{"properties":{"service_type":{"type":"string","title":"Service Type"},"service_name":{"type":"string","title":"Service Name"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"is_healthy":{"type":"boolean","title":"Is Healthy","default":true}},"type":"object","required":["service_type","service_name","host","port"],"title":"DiscoveredService","description":"Schema for a discovered service (not yet in database)."},"DiscoveryResponse":{"properties":{"discovered_services":{"items":{"$ref":"#/components/schemas/DiscoveredService"},"type":"array","title":"Discovered Services"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["discovered_services","count"],"title":"DiscoveryResponse","description":"Schema for infrastructure discovery response."},"DuplicateProjectRequest":{"properties":{"new_name":{"type":"string","title":"New Name"}},"type":"object","required":["new_name"],"title":"DuplicateProjectRequest"},"FeatureCreate":{"properties":{"priority":{"type":"integer","title":"Priority","default":0},"category":{"type":"string","title":"Category","default":"general"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"items":{"type":"string"},"type":"array","title":"Steps"},"depends_on":{"items":{"type":"integer"},"type":"array","title":"Depends On"}},"type":"object","required":["name"],"title":"FeatureCreate","description":"Schema for creating a feature."},"FeatureListResponse":{"properties":{"features":{"items":{"$ref":"#/components/schemas/FeatureResponse"},"type":"array","title":"Features"},"count":{"type":"integer","title":"Count"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["features","count","total"],"title":"FeatureListResponse","description":"Schema for feature list response."},"FeatureResponse":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"priority":{"type":"integer","title":"Priority"},"category":{"type":"string","title":"Category"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"items":{"type":"string"},"type":"array","title":"Steps"},"passes":{"type":"boolean","title":"Passes"},"in_progress":{"type":"boolean","title":"In Progress"},"stalled":{"type":"boolean","title":"Stalled"},"stall_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Reason"},"assigned_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent"},"depends_on":{"items":{"type":"integer"},"type":"array","title":"Depends On","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","priority","category","name","description","steps","passes","in_progress","stalled","stall_reason","assigned_agent","created_at","updated_at"],"title":"FeatureResponse","description":"Schema for feature response."},"FeatureStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"passing":{"type":"integer","title":"Passing"},"in_progress":{"type":"integer","title":"In Progress"},"stalled":{"type":"integer","title":"Stalled"},"pending":{"type":"integer","title":"Pending"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["total","passing","in_progress","stalled","pending","percentage"],"title":"FeatureStatsResponse","description":"Schema for feature statistics."},"FeatureUpdate":{"properties":{"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"passes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passes"},"in_progress":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"In Progress"},"stalled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Stalled"},"stall_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Reason"},"assigned_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent"},"depends_on":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Depends On"}},"type":"object","title":"FeatureUpdate","description":"Schema for updating a feature.\n\nNote: Only specific fields are allowed to be updated.\nFields like name, description, category, and steps are immutable\nafter creation and will be ignored if provided."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthCheckResponse":{"properties":{"service_id":{"type":"integer","title":"Service Id"},"service_name":{"type":"string","title":"Service Name"},"is_healthy":{"type":"boolean","title":"Is Healthy"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["service_id","service_name","is_healthy","checked_at"],"title":"HealthCheckResponse","description":"Schema for health check response."},"InfrastructureCreate":{"properties":{"service_type":{"type":"string","maxLength":50,"minLength":1,"title":"Service Type"},"service_name":{"type":"string","maxLength":100,"minLength":1,"title":"Service Name"},"host":{"type":"string","maxLength":255,"minLength":1,"title":"Host"},"port":{"type":"integer","maximum":65535.0,"minimum":1.0,"title":"Port"},"credentials_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credentials Ref"},"health_check_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Check Url"}},"type":"object","required":["service_type","service_name","host","port"],"title":"InfrastructureCreate","description":"Schema for creating an infrastructure service."},"InfrastructureListResponse":{"properties":{"services":{"items":{"$ref":"#/components/schemas/InfrastructureResponse"},"type":"array","title":"Services"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["services","count"],"title":"InfrastructureListResponse","description":"Schema for infrastructure list response."},"InfrastructureResponse":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"service_type":{"type":"string","title":"Service Type"},"service_name":{"type":"string","title":"Service Name"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"credentials_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credentials Ref"},"health_check_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Check Url"},"last_health_check":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check"},"is_healthy":{"type":"boolean","title":"Is Healthy"}},"type":"object","required":["id","project_id","service_type","service_name","host","port","credentials_ref","health_check_url","last_health_check","is_healthy"],"title":"InfrastructureResponse","description":"Schema for infrastructure service response."},"InfrastructureUpdate":{"properties":{"service_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Type"},"service_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Name"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"credentials_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credentials Ref"},"health_check_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Check Url"}},"type":"object","title":"InfrastructureUpdate","description":"Schema for updating an infrastructure service."},"PermissionCreate":{"properties":{"permission_type":{"type":"string","maxLength":50,"minLength":1,"title":"Permission Type"},"permission_value":{"type":"string","maxLength":500,"minLength":1,"title":"Permission Value"},"granted":{"type":"boolean","title":"Granted","default":true}},"type":"object","required":["permission_type","permission_value"],"title":"PermissionCreate","description":"Schema for creating a permission."},"PermissionExportItem":{"properties":{"permission_type":{"type":"string","title":"Permission Type"},"permission_value":{"type":"string","title":"Permission Value"},"granted":{"type":"boolean","title":"Granted"}},"type":"object","required":["permission_type","permission_value","granted"],"title":"PermissionExportItem","description":"Schema for a single permission in export."},"PermissionExportResponse":{"properties":{"project_name":{"type":"string","title":"Project Name"},"permissions":{"items":{"$ref":"#/components/schemas/PermissionExportItem"},"type":"array","title":"Permissions"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["project_name","permissions","count"],"title":"PermissionExportResponse","description":"Schema for export response."},"PermissionImportItem":{"properties":{"permission_type":{"type":"string","maxLength":50,"minLength":1,"title":"Permission Type"},"permission_value":{"type":"string","maxLength":500,"minLength":1,"title":"Permission Value"},"granted":{"type":"boolean","title":"Granted","default":true}},"type":"object","required":["permission_type","permission_value"],"title":"PermissionImportItem","description":"Schema for a single permission in import."},"PermissionImportRequest":{"properties":{"permissions":{"items":{"$ref":"#/components/schemas/PermissionImportItem"},"type":"array","title":"Permissions"},"replace_existing":{"type":"boolean","title":"Replace Existing","default":false}},"type":"object","required":["permissions"],"title":"PermissionImportRequest","description":"Schema for importing permissions from configuration."},"PermissionImportResponse":{"properties":{"imported":{"type":"integer","title":"Imported"},"skipped":{"type":"integer","title":"Skipped"},"message":{"type":"string","title":"Message"}},"type":"object","required":["imported","skipped","message"],"title":"PermissionImportResponse","description":"Schema for import response."},"PermissionListResponse":{"properties":{"permissions":{"items":{"$ref":"#/components/schemas/PermissionResponse"},"type":"array","title":"Permissions"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["permissions","count"],"title":"PermissionListResponse","description":"Schema for permission list response."},"PermissionRequestCreate":{"properties":{"agent_id":{"type":"string","maxLength":1,"minLength":1,"title":"Agent Id"},"permission_type":{"type":"string","maxLength":50,"minLength":1,"title":"Permission Type"},"permission_value":{"type":"string","maxLength":500,"minLength":1,"title":"Permission Value"},"feature_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feature Id"}},"type":"object","required":["agent_id","permission_type","permission_value"],"title":"PermissionRequestCreate","description":"Schema for creating a permission request."},"PermissionRequestListResponse":{"properties":{"requests":{"items":{"$ref":"#/components/schemas/PermissionRequestResponse"},"type":"array","title":"Requests"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["requests","count"],"title":"PermissionRequestListResponse","description":"Schema for permission request list response."},"PermissionRequestResponse":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"feature_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feature Id"},"agent_id":{"type":"string","title":"Agent Id"},"permission_type":{"type":"string","title":"Permission Type"},"permission_value":{"type":"string","title":"Permission Value"},"status":{"type":"string","title":"Status"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"}},"type":"object","required":["id","project_id","feature_id","agent_id","permission_type","permission_value","status","requested_at","resolved_at"],"title":"PermissionRequestResponse","description":"Schema for permission request response."},"PermissionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"permission_type":{"type":"string","title":"Permission Type"},"permission_value":{"type":"string","title":"Permission Value"},"granted":{"type":"boolean","title":"Granted"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","project_id","permission_type","permission_value","granted","created_at"],"title":"PermissionResponse","description":"Schema for permission response."},"PermissionUpdate":{"properties":{"granted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Granted"}},"type":"object","title":"PermissionUpdate","description":"Schema for updating a permission."},"ProjectCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Unique project name"},"path":{"type":"string","maxLength":1024,"minLength":1,"title":"Path","description":"Project directory path"}},"type":"object","required":["name","path"],"title":"ProjectCreate","description":"Schema for creating a new project."},"ProjectListResponse":{"properties":{"projects":{"items":{"$ref":"#/components/schemas/ProjectResponse"},"type":"array","title":"Projects"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["projects","count"],"title":"ProjectListResponse","description":"Schema for project list response."},"ProjectResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"spec_version":{"type":"integer","title":"Spec Version"}},"type":"object","required":["id","name","path","created_at","updated_at","spec_version"],"title":"ProjectResponse","description":"Schema for project response."},"ProjectUpdate":{"properties":{"path":{"anyOf":[{"type":"string","maxLength":1024,"minLength":1},{"type":"null"}],"title":"Path"}},"type":"object","title":"ProjectUpdate","description":"Schema for updating a project."},"SetDependenciesRequest":{"properties":{"depends_on":{"items":{"type":"integer"},"type":"array","title":"Depends On"}},"type":"object","title":"SetDependenciesRequest","description":"Schema for setting feature dependencies."},"SpecAnalysisResponse":{"properties":{"affected_features":{"items":{"$ref":"#/components/schemas/AffectedFeatureResponse"},"type":"array","title":"Affected Features"},"affected_count":{"type":"integer","title":"Affected Count"},"change_summary":{"type":"string","title":"Change Summary"}},"type":"object","required":["affected_features","affected_count","change_summary"],"title":"SpecAnalysisResponse","description":"Schema for spec change analysis response."},"SpecHistoryListResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/SpecHistoryResponse"},"type":"array","title":"History"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["history","count"],"title":"SpecHistoryListResponse","description":"Schema for spec history list."},"SpecHistoryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"project_id":{"type":"integer","title":"Project Id"},"version":{"type":"integer","title":"Version"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"change_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Summary"}},"type":"object","required":["id","project_id","version","content","created_at","change_summary"],"title":"SpecHistoryResponse","description":"Schema for spec history entry."},"SpecResponse":{"properties":{"project_id":{"type":"integer","title":"Project Id"},"version":{"type":"integer","title":"Version"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"change_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Summary"}},"type":"object","required":["project_id","version","content","created_at","change_summary"],"title":"SpecResponse","description":"Schema for current spec response."},"SpecUpdate":{"properties":{"content":{"type":"string","minLength":1,"title":"Content"},"change_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Summary"}},"type":"object","required":["content"],"title":"SpecUpdate","description":"Schema for updating a spec."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}