feat: add Conductor plugin for Context-Driven Development

Add comprehensive Conductor plugin implementing Context-Driven Development
methodology with tracks, specs, and phased implementation plans.

Components:
- 5 commands: setup, new-track, implement, status, revert
- 1 agent: conductor-validator
- 3 skills: context-driven-development, track-management, workflow-patterns
- 18 templates for project artifacts

Documentation updates:
- README.md: Updated counts (68 plugins, 100 agents, 110 skills, 76 tools)
- docs/plugins.md: Added Conductor to Workflows section
- docs/agents.md: Added conductor-validator agent
- docs/agent-skills.md: Added Conductor skills section

Also includes Prettier formatting across all project files.
This commit is contained in:
Seth Hobson
2026-01-15 17:38:21 -05:00
parent 87231b828d
commit f662524f9a
94 changed files with 11610 additions and 1728 deletions

View File

@@ -3,6 +3,7 @@
## Schema Organization
### Modular Schema Structure
```graphql
# user.graphql
type User {
@@ -37,17 +38,19 @@ extend type Query {
## Type Design Patterns
### 1. Non-Null Types
```graphql
type User {
id: ID! # Always required
email: String! # Required
phone: String # Optional (nullable)
posts: [Post!]! # Non-null array of non-null posts
tags: [String!] # Nullable array of non-null strings
id: ID! # Always required
email: String! # Required
phone: String # Optional (nullable)
posts: [Post!]! # Non-null array of non-null posts
tags: [String!] # Nullable array of non-null strings
}
```
### 2. Interfaces for Polymorphism
```graphql
interface Node {
id: ID!
@@ -72,6 +75,7 @@ type Query {
```
### 3. Unions for Heterogeneous Results
```graphql
union SearchResult = User | Post | Comment
@@ -92,13 +96,16 @@ type Query {
}
... on Comment {
text
author { name }
author {
name
}
}
}
}
```
### 4. Input Types
```graphql
input CreateUserInput {
email: String!
@@ -124,6 +131,7 @@ input UpdateUserInput {
## Pagination Patterns
### Relay Cursor Pagination (Recommended)
```graphql
type UserConnection {
edges: [UserEdge!]!
@@ -144,12 +152,7 @@ type PageInfo {
}
type Query {
users(
first: Int
after: String
last: Int
before: String
): UserConnection!
users(first: Int, after: String, last: Int, before: String): UserConnection!
}
# Usage
@@ -171,6 +174,7 @@ type Query {
```
### Offset Pagination (Simpler)
```graphql
type UserList {
items: [User!]!
@@ -187,6 +191,7 @@ type Query {
## Mutation Design Patterns
### 1. Input/Payload Pattern
```graphql
input CreatePostInput {
title: String!
@@ -212,6 +217,7 @@ type Mutation {
```
### 2. Optimistic Response Support
```graphql
type UpdateUserPayload {
user: User
@@ -231,6 +237,7 @@ type Mutation {
```
### 3. Batch Mutations
```graphql
input BatchCreateUserInput {
users: [CreateUserInput!]!
@@ -256,6 +263,7 @@ type Mutation {
## Field Design
### Arguments and Filtering
```graphql
type Query {
posts(
@@ -296,20 +304,20 @@ enum OrderDirection {
```
### Computed Fields
```graphql
type User {
firstName: String!
lastName: String!
fullName: String! # Computed in resolver
fullName: String! # Computed in resolver
posts: [Post!]!
postCount: Int! # Computed, doesn't load all posts
postCount: Int! # Computed, doesn't load all posts
}
type Post {
likeCount: Int!
commentCount: Int!
isLikedByViewer: Boolean! # Context-dependent
isLikedByViewer: Boolean! # Context-dependent
}
```
@@ -366,6 +374,7 @@ type Product {
## Directives
### Built-in Directives
```graphql
type User {
name: String!
@@ -388,6 +397,7 @@ query GetUser($isOwner: Boolean!) {
```
### Custom Directives
```graphql
directive @auth(requires: Role = USER) on FIELD_DEFINITION
@@ -406,6 +416,7 @@ type Mutation {
## Error Handling
### Union Error Pattern
```graphql
type User {
id: ID!
@@ -452,6 +463,7 @@ type Query {
```
### Errors in Payload
```graphql
type CreateUserPayload {
user: User
@@ -476,6 +488,7 @@ enum ErrorCode {
## N+1 Query Problem Solutions
### DataLoader Pattern
```python
from aiodataloader import DataLoader
@@ -493,6 +506,7 @@ async def resolve_posts(user, info):
```
### Query Depth Limiting
```python
from graphql import GraphQLError
@@ -507,6 +521,7 @@ def depth_limit_validator(max_depth: int):
```
### Query Complexity Analysis
```python
def complexity_limit_validator(max_complexity: int):
def calculate_complexity(node):
@@ -522,6 +537,7 @@ def complexity_limit_validator(max_complexity: int):
## Schema Versioning
### Field Deprecation
```graphql
type User {
name: String! @deprecated(reason: "Use firstName and lastName")
@@ -531,6 +547,7 @@ type User {
```
### Schema Evolution
```graphql
# v1 - Initial
type User {

View File

@@ -3,6 +3,7 @@
## URL Structure
### Resource Naming
```
# Good - Plural nouns
GET /api/users
@@ -16,6 +17,7 @@ POST /api/createOrder
```
### Nested Resources
```
# Shallow nesting (preferred)
GET /api/users/{id}/orders
@@ -30,6 +32,7 @@ GET /api/order-items/{id}/reviews
## HTTP Methods and Status Codes
### GET - Retrieve Resources
```
GET /api/users → 200 OK (with list)
GET /api/users/{id} → 200 OK or 404 Not Found
@@ -37,6 +40,7 @@ GET /api/users?page=2 → 200 OK (paginated)
```
### POST - Create Resources
```
POST /api/users
Body: {"name": "John", "email": "john@example.com"}
@@ -50,6 +54,7 @@ POST /api/users (validation error)
```
### PUT - Replace Resources
```
PUT /api/users/{id}
Body: {complete user object}
@@ -60,6 +65,7 @@ PUT /api/users/{id}
```
### PATCH - Partial Update
```
PATCH /api/users/{id}
Body: {"name": "Jane"} (only changed fields)
@@ -68,6 +74,7 @@ PATCH /api/users/{id}
```
### DELETE - Remove Resources
```
DELETE /api/users/{id}
→ 204 No Content (deleted)
@@ -78,6 +85,7 @@ DELETE /api/users/{id}
## Filtering, Sorting, and Searching
### Query Parameters
```
# Filtering
GET /api/users?status=active
@@ -99,6 +107,7 @@ GET /api/users?fields=id,name,email
## Pagination Patterns
### Offset-Based Pagination
```python
GET /api/users?page=2&page_size=20
@@ -113,6 +122,7 @@ Response:
```
### Cursor-Based Pagination (for large datasets)
```python
GET /api/users?limit=20&cursor=eyJpZCI6MTIzfQ
@@ -125,6 +135,7 @@ Response:
```
### Link Header Pagination (RESTful)
```
GET /api/users?page=2
@@ -138,6 +149,7 @@ Link: <https://api.example.com/users?page=3>; rel="next",
## Versioning Strategies
### URL Versioning (Recommended)
```
/api/v1/users
/api/v2/users
@@ -147,6 +159,7 @@ Cons: Multiple URLs for same resource
```
### Header Versioning
```
GET /api/users
Accept: application/vnd.api+json; version=2
@@ -156,6 +169,7 @@ Cons: Less visible, harder to test
```
### Query Parameter
```
GET /api/users?version=2
@@ -166,6 +180,7 @@ Cons: Optional parameter can be forgotten
## Rate Limiting
### Headers
```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 742
@@ -177,6 +192,7 @@ Retry-After: 3600
```
### Implementation Pattern
```python
from fastapi import HTTPException, Request
from datetime import datetime, timedelta
@@ -219,6 +235,7 @@ async def get_users(request: Request):
## Authentication and Authorization
### Bearer Token
```
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
@@ -227,6 +244,7 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
```
### API Keys
```
X-API-Key: your-api-key-here
```
@@ -234,6 +252,7 @@ X-API-Key: your-api-key-here
## Error Response Format
### Consistent Structure
```json
{
"error": {
@@ -253,6 +272,7 @@ X-API-Key: your-api-key-here
```
### Status Code Guidelines
- `200 OK`: Successful GET, PATCH, PUT
- `201 Created`: Successful POST
- `204 No Content`: Successful DELETE
@@ -269,6 +289,7 @@ X-API-Key: your-api-key-here
## Caching
### Cache Headers
```
# Client caching
Cache-Control: public, max-age=3600
@@ -285,6 +306,7 @@ If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
## Bulk Operations
### Batch Endpoints
```python
POST /api/users/batch
{
@@ -306,6 +328,7 @@ Response:
## Idempotency
### Idempotency Keys
```
POST /api/orders
Idempotency-Key: unique-key-123