Autogenerate constraint checking code from constraints (C-*) that specify system limits, timeouts, dependencies, or environmental requirements. Use when C-* includes technical constraints like timeouts, API limits, or compliance requirements.
/plugin marketplace add foolishimp/ai_sdlc_method/plugin install aisdlc-methodology@aisdlcThis skill is limited to using the following tools:
Skill Type: Actuator (Code Generation) Purpose: Generate constraint checking code from C-* specifications Prerequisites:
You are autogenerating constraint checks from constraint specifications.
Your goal is to transform structured C- constraints* into constraint checking functions and configuration.
Input:
C-001: Stripe API timeout
Timeout: 10 seconds
Behavior: Raise TimeoutError if exceeded
Fallback: Return error to user
Generated:
# Generated from: C-001
STRIPE_API_TIMEOUT = 10 # seconds
def call_stripe_api(operation, **kwargs):
"""
Call Stripe API with timeout constraint.
Generated from: C-001 (Stripe API timeout)
Args:
operation: Stripe API operation to call
**kwargs: Operation parameters
Returns:
API response
Raises:
TimeoutError: If operation exceeds 10 seconds
"""
# Implements: C-001
try:
return operation(timeout=STRIPE_API_TIMEOUT, **kwargs)
except TimeoutError as e:
# Fallback: Return error to user
raise PaymentError("Payment service temporarily unavailable") from e
# Generated test
def test_stripe_timeout_respected(mock_stripe):
# C-001: Verify timeout is set
mock_stripe.Charge.create = Mock()
call_stripe_api(mock_stripe.Charge.create, amount=100)
mock_stripe.Charge.create.assert_called_with(timeout=10, amount=100)
def test_stripe_timeout_handles_error(mock_stripe_timeout):
# C-001: Verify timeout error handling
with pytest.raises(PaymentError):
call_stripe_api(mock_stripe_timeout.Charge.create, amount=100)
Input:
C-010: API rate limit
Limit: 100 requests per minute
Behavior: Return 429 status if exceeded
Retry: After 60 seconds
Generated:
# Generated from: C-010
API_RATE_LIMIT = 100 # requests per minute
RATE_LIMIT_WINDOW = 60 # seconds
class RateLimiter:
"""
Enforce API rate limits.
Generated from: C-010 (API rate limit)
"""
def __init__(self):
self.requests = []
def check_rate_limit(self) -> Optional[int]:
"""
Check if rate limit would be exceeded.
Generated from: C-010
Returns:
None if OK, seconds to wait if rate limited
"""
# Implements: C-010
now = datetime.now()
cutoff = now - timedelta(seconds=RATE_LIMIT_WINDOW)
# Remove old requests
self.requests = [r for r in self.requests if r > cutoff]
# Check limit
if len(self.requests) >= API_RATE_LIMIT:
# Calculate retry time
oldest = min(self.requests)
retry_after = RATE_LIMIT_WINDOW - (now - oldest).seconds
return retry_after
return None
def record_request(self) -> None:
"""Record a request for rate limiting"""
self.requests.append(datetime.now())
# Generated tests
def test_rate_limit_under_limit():
limiter = RateLimiter()
for _ in range(99):
limiter.record_request()
assert limiter.check_rate_limit() is None
def test_rate_limit_at_limit():
limiter = RateLimiter()
for _ in range(100):
limiter.record_request()
retry_after = limiter.check_rate_limit()
assert retry_after is not None
assert 0 < retry_after <= 60
Input:
C-020: File upload size
Max size: 10 MB
Behavior: Reject files larger than limit
Error: "File too large. Maximum size is 10 MB"
Generated:
# Generated from: C-020
MAX_UPLOAD_SIZE_BYTES = 10 * 1024 * 1024 # 10 MB
def validate_file_size(file_size: int) -> Optional[str]:
"""
Validate file size is within limit.
Generated from: C-020 (File upload size limit)
Args:
file_size: File size in bytes
Returns:
None if valid, error message if too large
"""
# Implements: C-020
if file_size > MAX_UPLOAD_SIZE_BYTES:
return "File too large. Maximum size is 10 MB"
return None
# Generated tests
def test_file_size_valid():
assert validate_file_size(5 * 1024 * 1024) is None # 5 MB
def test_file_size_at_limit():
assert validate_file_size(10 * 1024 * 1024) is None # Exactly 10 MB
def test_file_size_too_large():
assert validate_file_size(11 * 1024 * 1024) == "File too large. Maximum size is 10 MB"
Input:
C-030: Python version
Minimum: 3.8
Behavior: Raise error if version < 3.8
Error: "Python 3.8 or higher required"
Generated:
# Generated from: C-030
import sys
PYTHON_MIN_VERSION = (3, 8)
def check_python_version() -> None:
"""
Check Python version meets minimum requirement.
Generated from: C-030 (Python version constraint)
Raises:
RuntimeError: If Python version < 3.8
"""
# Implements: C-030
if sys.version_info < PYTHON_MIN_VERSION:
current = f"{sys.version_info.major}.{sys.version_info.minor}"
required = f"{PYTHON_MIN_VERSION[0]}.{PYTHON_MIN_VERSION[1]}"
raise RuntimeError(
f"Python {required} or higher required. Current version: {current}"
)
# Generated test
def test_python_version_check():
# This test always passes (we're running on valid Python)
check_python_version() # Should not raise
Input:
C-040: PCI-DSS compliance
Constraint: Never store full credit card numbers
Behavior: Tokenize cards via Stripe API
Validation: No card numbers in logs or database
Generated:
# Generated from: C-040
def validate_no_card_numbers(text: str) -> Optional[str]:
"""
Validate text does not contain credit card numbers.
Generated from: C-040 (PCI-DSS compliance)
Args:
text: Text to validate (log message, database field, etc.)
Returns:
None if valid, error message if card number detected
"""
# Implements: C-040 (PCI-DSS: no storing card numbers)
# Simple Luhn algorithm check for card-like patterns
import re
# Pattern: 13-19 digit sequences
potential_cards = re.findall(r'\b\d{13,19}\b', text)
for number in potential_cards:
if _is_valid_luhn(number):
return "PCI-DSS violation: Potential card number detected"
return None
def _is_valid_luhn(card_number: str) -> bool:
"""Check if number passes Luhn algorithm (credit card check)"""
# Luhn algorithm implementation
digits = [int(d) for d in card_number]
checksum = 0
for i, d in enumerate(reversed(digits)):
if i % 2 == 1:
d = d * 2
if d > 9:
d = d - 9
checksum += d
return checksum % 10 == 0
# Generated tests
def test_validate_no_card_numbers_safe_text():
assert validate_no_card_numbers("User logged in") is None
def test_validate_no_card_numbers_detects_visa():
# Valid Visa test number
assert validate_no_card_numbers("Card: 4532015112830366") == "PCI-DSS violation: Potential card number detected"
Input:
C-050: Payment idempotency
Constraint: Same idempotency key = same charge
Key format: SHA256(user_id + timestamp + amount)
Behavior: Return existing charge if key matches
Generated:
# Generated from: C-050
import hashlib
from typing import Optional
def generate_idempotency_key(user_id: str, amount: float, timestamp: int) -> str:
"""
Generate idempotency key for payment.
Generated from: C-050 (Payment idempotency)
Args:
user_id: User identifier
amount: Payment amount
timestamp: Unix timestamp
Returns:
SHA256 hash as idempotency key
"""
# Implements: C-050
data = f"{user_id}{timestamp}{amount}"
return hashlib.sha256(data.encode()).hexdigest()
def check_idempotency(idempotency_key: str) -> Optional[str]:
"""
Check if idempotency key already used.
Generated from: C-050
Returns:
Existing charge_id if key used, None if new
"""
# Implements: C-050
from .models import Payment
existing = Payment.get_by_idempotency_key(idempotency_key)
if existing:
return existing.charge_id
return None
# Generated tests
def test_generate_idempotency_key_deterministic():
key1 = generate_idempotency_key("user123", 100.00, 1637000000)
key2 = generate_idempotency_key("user123", 100.00, 1637000000)
assert key1 == key2 # Same inputs → same key
def test_check_idempotency_new_key():
key = generate_idempotency_key("user123", 100.00, 1637000000)
assert check_idempotency(key) is None
Before invoking this skill, ensure:
If C-* too vague:
After constraint generation:
Why autogenerate constraints?
Homeostasis Goal:
desired_state:
all_constraints_have_code: true
all_constraint_code_has_tests: true
all_tests_passing: true
"Excellence or nothing" 🔥
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.