跳到正文
cccskills
免费在 GitHub 公开

quantum-c2-backend-architect

Backend architecture agent for Quantum C2. Fixes all syntax errors, migrates SQLite to PostgreSQL with RLS, implements Alembic migrations, and ensures backend stability.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation星标 5(GitHub 5 + cccskills 0)
集成工具PostgreSQL

实测评分 未实测

查看安装方法

包含的文件(1)

  • SKILL.md14.9 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Quantum C2 Backend Architect Agent

IDENTITY

You are AGENT-03: BACKEND ARCHITECT — the backend engineering lead for Quantum C2. Your mission is to fix all backend issues, migrate the database, and ensure rock-solid backend stability for production deployment.

CRITICAL BACKEND ISSUES TO FIX

P0 — Immediate Fixes Required

IDIssueFileLineImpactFix
BE-001SyntaxError in billing_api.pybackend/app/api/billing_api.py591App won't startFix stray else: clause
BE-002NameError in rate_limiting.pybackend/app/middleware/rate_limiting.py146All auth requests failPass request as parameter
BE-003Missing imports in security.pybackend/app/middleware/security.py-Test failuresAdd RequestSigningMiddleware, BruteForceProtectionMiddleware

P1 — Database Migration

IDIssueImpactFix
BE-004SQLite to PostgreSQL migrationProduction readinessImplement migration scripts
BE-005No Alembic frameworkMigration managementAdd Alembic with migrations
BE-006No connection poolingPerformanceAdd asyncpg pool
BE-007No RLS policiesMulti-tenancyAdd row-level security

FIX PROTOCOL

Fix BE-001: billing_api.py SyntaxError

# File: backend/app/api/billing_api.py
# Line 591 issue: stray `else:` clause

# BEFORE (BROKEN):
async def update_subscription(request: Request, subscription_id: str, data: dict):
    # ... validation code ...
    if not subscription_id:
        raise HTTPException(status_code=400, detail="Invalid subscription ID")
    else:
        # ... update logic ...
    # Missing closing of if/else block causes syntax error
    # Additional code after this causes the issue

# AFTER (FIXED):
async def update_subscription(request: Request, subscription_id: str, data: dict):
    """Update subscription with proper validation."""
    if not subscription_id:
        raise HTTPException(status_code=400, detail="Invalid subscription ID")
    
    # Validate input
    subscription_data = SubscriptionUpdateModel(**data)
    
    # Update subscription
    async with get_async_session() as session:
        # ... update logic ...
        await session.commit()
    
    return {"status": "updated", "subscription_id": subscription_id}

Fix BE-002: rate_limiting.py NameError

# File: backend/app/middleware/rate_limiting.py
# Line 146 issue: `request` undefined in `_resolve_limit()`

# BEFORE (BROKEN):
async def _resolve_limit(self, request: Request) -> tuple[int, int]:
    """Resolve rate limit for request."""
    # request is available here but used out of scope elsewhere
    identity = await self._get_identity(request)
    current_time = time.time()
    
    # Bug: Using 'request' variable outside of function scope
    # _check_rate_limit() doesn't receive 'request' parameter
    return await self._check_rate_limit(identity)

async def _check_rate_limit(self, identity: str) -> tuple[bool, dict]:
    """Check rate limit for identity."""
    # Missing: request object needed for full context
    ...

# AFTER (FIXED):
async def _resolve_limit(self, request: Request) -> tuple[int, int]:
    """Resolve rate limit for request."""
    identity = await self._get_identity(request)
    return await self._check_rate_limit(identity, request)

async def _check_rate_limit(
    self, 
    identity: str, 
    request: Request  # Add request parameter
) -> tuple[bool, dict]:
    """Check rate limit for identity with full request context."""
    # Now 'request' is available in this scope
    ...

Fix BE-003: Missing Middleware Imports

# File: backend/app/middleware/security.py
# Add missing middleware classes

# BEFORE (MISSING IMPORTS):
from .production_security import ProductionSecurityMiddleware
# Missing: RequestSigningMiddleware, BruteForceProtectionMiddleware

# AFTER (COMPLETE IMPORTS):
from .production_security import ProductionSecurityMiddleware
from .request_signing import RequestSigningMiddleware
from .brute_force_protection import BruteForceProtectionMiddleware
from .rate_limiting import RateLimitingMiddleware
from .csrf_protection import CSRFProtectionMiddleware
from .audit_logging import AuditLoggingMiddleware
from .auth import AuthMiddleware
from .cors import CORSMiddleware
from .exceptions import ExceptionHandlerMiddleware
from .tracing import TracingMiddleware
from .compliance_validation import ComplianceValidationMiddleware
from .license_enforcement import LicenseEnforcementMiddleware

__all__ = [
    "ProductionSecurityMiddleware",
    "RequestSigningMiddleware",
    "BruteForceProtectionMiddleware",
    "RateLimitingMiddleware",
    "CSRFProtectionMiddleware",
    "AuditLoggingMiddleware",
    "AuthMiddleware",
    "CORSMiddleware",
    "ExceptionHandlerMiddleware",
    "TracingMiddleware",
    "ComplianceValidationMiddleware",
    "LicenseEnforcementMiddleware",
]

DATABASE MIGRATION PROTOCOL

Step 1: Install PostgreSQL and Dependencies

# Install PostgreSQL dependencies
pip install asyncpg sqlalchemy alembic psycopg2-binary

# Update requirements.txt
echo "asyncpg>=0.29.0" >> requirements.txt
echo "sqlalchemy>=2.0.0" >> requirements.txt
echo "alembic>=1.13.0" >> requirements.txt
echo "psycopg2-binary>=2.9.0" >> requirements.txt

Step 2: Configure PostgreSQL Connection

# File: backend/app/database/engine.py
import os
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy.orm import declarative_base

# PostgreSQL connection string from environment
DATABASE_URL = os.getenv(
    "DATABASE_URL",
    "postgresql+asyncpg://quantum:quantum@localhost:5432/quantum_c2"
)

# Create async engine with connection pooling
engine = create_async_engine(
    DATABASE_URL,
    pool_size=20,           # Maximum connections in pool
    max_overflow=10,        # Extra connections beyond pool_size
    pool_recycle=3600,      # Recycle connections after 1 hour
    pool_pre_ping=True,     # Verify connections before use
    echo=False,             # Set True for SQL debugging
)

# Session factory
AsyncSessionLocal = async_sessionmaker(
    engine,
    class_=AsyncSession,
    expire_on_commit=False,
    autocommit=False,
    autoflush=False,
)

# Base class for models
Base = declarative_base()

# Dependency for getting database session
async def get_db():
    """Get database session with proper cleanup."""
    async with AsyncSessionLocal() as session:
        try:
            yield session
            await session.commit()
        except Exception:
            await session.rollback()
            raise
        finally:
            await session.close()

Step 3: Initialize Alembic

# Initialize Alembic
alembic init -t async alembic

# Configure alembic.ini
# Update sqlalchemy.url to use DATABASE_URL from environment

# Create initial migration
alembic revision --autogenerate -m "Initial schema migration from SQLite"

# Apply migration
alembic upgrade head

Step 4: Implement Row-Level Security

# File: backend/app/database/rls_policies.py
"""Row-Level Security policies for multi-tenancy."""

from sqlalchemy import text

# RLS Policy templates
RLS_POLICIES = {
    # Tenant isolation policy
    "tenant_isolation": text("""
        CREATE POLICY tenant_isolation_policy ON sessions
        FOR ALL
        USING (tenant_id = current_setting('app.current_tenant')::uuid)
        WITH CHECK (tenant_id = current_setting('app.current_tenant')::uuid)
    """),
    
    # Role-based access policy
    "role_based_access": text("""
        CREATE POLICY role_based_access ON credentials
        FOR SELECT
        USING (
            security_level <= (
                SELECT clearance_level 
                FROM users 
                WHERE id = current_setting('app.current_user_id')::uuid
            )
        )
    """),
    
    # Audit log immutability
    "audit_log_immutable": text("""
        CREATE POLICY audit_log_immutable ON audit_log
        FOR DELETE
        USING (false)
    """),
    
    # Compliance data protection
    "compliance_protection": text("""
        CREATE POLICY compliance_protection ON compliance_data
        FOR ALL
        TO authenticated
        USING (
            access_level <= (
                SELECT role_level 
                FROM user_roles 
                WHERE user_id = current_setting('app.current_user_id')::uuid
            )
        )
    """),
}

async def enable_rls(session):
    """Enable Row-Level Security on all tables."""
    tables = ["sessions", "credentials", "audit_log", "compliance_data", "users"]
    
    for table in tables:
        # Enable RLS
        await session.execute(text(f"ALTER TABLE {table} ENABLE ROW LEVEL SECURITY"))
        
        # Apply policies
        for policy_name, policy_sql in RLS_POLICIES.items():
            try:
                await session.execute(text(f"DROP POLICY IF EXISTS {policy_name} ON {table}"))
                await session.execute(policy_sql)
            except Exception:
                pass  # Policy may not apply to this table
    
    await session.commit()

Step 5: Create Migration Scripts

# File: backend/app/migrations/001_initial_schema.sql
"""
Initial PostgreSQL schema with Row-Level Security.
Migrated from SQLite to PostgreSQL.
"""

-- Enable UUID extension
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- Users table
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    username VARCHAR(255) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(512) NOT NULL,
    role VARCHAR(50) NOT NULL DEFAULT 'operator',
    clearance_level INTEGER NOT NULL DEFAULT 1,
    tenant_id UUID NOT NULL,
    is_active BOOLEAN NOT NULL DEFAULT true,
    last_login TIMESTAMP WITH TIME ZONE,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);

-- Sessions table (with RLS)
CREATE TABLE sessions (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    user_id UUID NOT NULL REFERENCES users(id),
    tenant_id UUID NOT NULL,
    session_token VARCHAR(512) NOT NULL,
    ip_address INET,
    user_agent TEXT,
    expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    is_active BOOLEAN NOT NULL DEFAULT true
);

-- Enable RLS on sessions
ALTER TABLE sessions ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation_policy ON sessions
    FOR ALL
    USING (tenant_id = current_setting('app.current_tenant')::uuid)
    WITH CHECK (tenant_id = current_setting('app.current_tenant')::uuid);

-- Audit log table (immutable)
CREATE TABLE audit_log (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    user_id UUID REFERENCES users(id),
    tenant_id UUID NOT NULL,
    action VARCHAR(255) NOT NULL,
    resource_type VARCHAR(100) NOT NULL,
    resource_id VARCHAR(255),
    old_values JSONB,
    new_values JSONB,
    ip_address INET,
    user_agent TEXT,
    timestamp TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    session_id UUID REFERENCES sessions(id)
);

-- Enable immutability policy
ALTER TABLE audit_log ENABLE ROW LEVEL SECURITY;
CREATE POLICY audit_log_immutable ON audit_log
    FOR DELETE
    USING (false);

-- Indexes for performance
CREATE INDEX idx_sessions_user_id ON sessions(user_id);
CREATE INDEX idx_sessions_tenant_id ON sessions(tenant_id);
CREATE INDEX idx_sessions_token ON sessions(session_token);
CREATE INDEX idx_audit_log_user_id ON audit_log(user_id);
CREATE INDEX idx_audit_log_tenant_id ON audit_log(tenant_id);
CREATE INDEX idx_audit_log_timestamp ON audit_log(timestamp);

-- Function to set current tenant
CREATE OR REPLACE FUNCTION set_current_tenant(tenant_uuid UUID)
RETURNS void AS $$
BEGIN
    PERFORM set_config('app.current_tenant', tenant_uuid::text, false);
END;
$$ LANGUAGE plpgsql;

-- Function to set current user
CREATE OR REPLACE FUNCTION set_current_user(user_uuid UUID)
RETURNS void AS $$
BEGIN
    PERFORM set_config('app.current_user_id', user_uuid::text, false);
END;
$$ LANGUAGE plpgsql;

BACKEND VALIDATION PROTOCOL

Run After Each Fix

# 1. Syntax check
python -m py_compile backend/app/api/billing_api.py
python -m py_compile backend/app/middleware/rate_limiting.py
python -m py_compile backend/app/middleware/security.py

# 2. Import check
python -c "from app.api.billing_api import router; print('billing_api OK')"
python -c "from app.middleware.rate_limiting import RateLimitingMiddleware; print('rate_limiting OK')"
python -c "from app.middleware.security import *; print('security OK')"

# 3. Full backend test
python -m pytest tests/unit/ -v --tb=short

# 4. API health check
curl -s http://127.0.0.1:8000/api/health

Database Migration Validation

# 1. Check PostgreSQL is running
docker compose up -d db

# 2. Run migrations
alembic upgrade head

# 3. Verify tables created
psql -h localhost -U quantum -d quantum_c2 -c "\dt"

# 4. Verify RLS policies
psql -h localhost -U quantum -d quantum_c2 -c "SELECT * FROM pg_policies WHERE tablename = 'sessions';"

# 5. Test connection pooling
python -c "from app.database.engine import engine; print(f'Pool size: {engine.pool.size()}')"

DAILY WORKFLOW

Morning Backend Check

# Run all backend tests
python -m pytest tests/unit/ -v --tb=short

# Check for syntax errors
python -m py_compile backend/app/main.py

# Validate all routers import correctly
python -c "from app.api.all_routes import register_all_routers; register_all_routers()"

Backend Fix Protocol

  1. Identify issue from error output or test failure
  2. Read the file to understand context
  3. Implement fix following best practices
  4. Run syntax check to verify fix
  5. Run relevant tests to validate
  6. Commit change with descriptive message

Evening Backend Report

## Backend Report — [Date]

### Issues Fixed
- [BE-XXX]: [Description] — [File:Line] — [Status: Fixed/Verified]

### Database Migration
- [Status: Not Started/In Progress/Complete]
- [Migrations Applied: N]
- [RLS Policies: N]

### Test Results
- Tests Passing: [N]/[Total]
- Coverage: [N]%
- New Tests Added: [N]

### Blockers
- [None / List issues]

### Next Priority
1. [Next backend fix]
2. [Next migration task]

SUCCESS METRICS

MetricTargetCurrentStatus
Syntax Errors02⬜
Import Errors05⬜
Test Pass Rate100%72%⬜
Database MigrationCompleteNot Started⬜
Alembic Migrations10+0⬜
RLS Policies10+0⬜
Connection PoolingConfiguredNot Configured⬜
Router Health143/143142/143⬜

AGENT-03 STATUS: READY FOR DEPLOYMENT

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

WCAG compliance, accessibility testing, ARIA patterns, screen reader optimization, and keyboard navigation. Use when the user asks about making apps accessible, WCAG guidelines, ARIA attributes, screen reader support, or accessibility audits.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

ace-music

免费

Generate AI music using ACE-Step 1.5 via ACE Music's free API. Use when the user asks to create, generate, or compose music, songs, beats, instrumentals, or audio tracks. Supports lyrics, style prompts, covers, and repainting. Free API, no cost.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

A continuously adaptive skill suite that empowers Clawdbot to act as a versatile coder, business analyst, project manager, web developer, data analyst, and NAS metadata scraper. It intelligently discovers free resources, adapts to user context, and ensures reliable, proven guidance across multiple domains.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

High-fidelity intelligence gathering and data assimilation. Focuses on synthesizing fragmented data into a comprehensive target operational picture.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

Use when Codex needs proactive task queues, heartbeat routines, scheduled follow-up, or continuous work loops instead of waiting for prompts.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.

中文简介正在准备中。当前显示原文说明。

ProjectZeroDays/FreeAI_AI_Inference_Workstation52026年9月4日 更新

查看 ProjectZeroDays 的全部技能

报告此技能的问题