بنقرة واحدة
specflow
Spec-driven development with executable contracts
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Spec-driven development with executable contracts
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | specflow |
| description | Spec-driven development with executable contracts |
| version | 1.0.0 |
| author | Hulupeep |
Specs that enforce themselves. Turn requirements into contracts that break the build when violated.
Spec --> Contract --> Test --> Code --> Verify
When this skill is active, Claude Code MUST:
docs/contracts/*.yml. If yes, read the contract and respect all non_negotiable rules.npm test -- contracts) and journey tests. Work is not done if tests fail.non_negotiable rules unless the user explicitly says override_contract: <contract_id>.| Type | File Pattern | Enforced By | When |
|---|---|---|---|
| Architecture | feature_architecture.yml | Pattern scan (Jest/Vitest) | Before build |
| Feature | feature_*.yml | Pattern scan (Jest/Vitest) | Before build |
| Security | security_defaults.yml | Pattern scan | Before build |
| Accessibility | accessibility_defaults.yml | Pattern scan | Before build |
| Journey | journey_*.yml | Playwright E2E | After build |
contract_meta:
id: auth_feature
version: 1
covers_reqs: [AUTH-001, AUTH-002]
rules:
non_negotiable:
- id: AUTH-001
title: "API endpoints require authMiddleware"
scope: ["src/routes/**/*.ts"]
behavior:
forbidden_patterns:
- pattern: /router\.(get|post).*\/api\//
message: "Route missing authMiddleware"
required_patterns:
- pattern: /authMiddleware/
message: "Must use authMiddleware"
auto_fix:
strategy: "add_import"
import_line: "import { authMiddleware } from '@/middleware/auth'"
CONTRACT VIOLATION: AUTH-001 - API route missing authMiddleware
File: src/routes/users.ts
Line: 42
Match: router.get('/api/users', async (req, res) => {
Only humans can override non-negotiable rules. User must say:
override_contract: <contract_id>
When overriding: explain what rule is broken, warn about consequences, ask if contract should be updated permanently.
These patterns are enforced as non-negotiable in all src/**/*.{ts,js,tsx,jsx} files (excluding tests).
Forbidden patterns:
/(password|secret|api_key|apikey|token)\s*[:=]\s*['"][^'"]{8,}['"]/i
/sk_live_[a-zA-Z0-9]{20,}/
/sk_test_[a-zA-Z0-9]{20,}/
/-----BEGIN (RSA |EC )?PRIVATE KEY-----/
/ghp_[a-zA-Z0-9]{36}/
/xoxb-[0-9]{10,}-[a-zA-Z0-9]{20,}/
Fix: Use process.env.VAR_NAME instead.
Forbidden patterns:
/query\s*\(\s*['"`].*\$\{/
/query\s*\(\s*['"`].*\+\s*\w/
/execute\s*\(\s*['"`].*\$\{/
Fix: Use parameterized queries ($1, $2).
Forbidden patterns:
/dangerouslySetInnerHTML\s*=\s*\{\s*\{\s*__html:(?!\s*(sanitize|DOMPurify|purify))/
/\.innerHTML\s*=(?!\s*['"`]<)/
Fix: Sanitize with DOMPurify before rendering.
Forbidden patterns:
/\beval\s*\(/
/new\s+Function\s*\(/
Fix: Use JSON.parse or safe alternatives.
Forbidden patterns:
/readFile(Sync)?\s*\(\s*(?!path\.join|path\.resolve|__dirname)/
/writeFile(Sync)?\s*\(\s*(?!path\.join|path\.resolve|__dirname)/
Fix: Use path.join(__dirname, 'safe-dir', path.basename(input)).
Enforced in src/**/*.{tsx,jsx} files.
Forbidden: /<img\s+(?![^>]*\balt\s*=)[^>]*\/?>/
Forbidden: /<button(?![^>]*aria-label)[^>]*>\s*<(?:svg|img|[A-Z]\w*)[^>]*\/?\s*>\s*<\/button>/
Forbidden: /<input(?![^>]*(?:aria-label|aria-labelledby|id\s*=))[^>]*>/
Forbidden: /tabIndex\s*=\s*\{?\s*[1-9]/
When: New feature needs acceptance criteria, Gherkin, and contracts.
Process:
Output: GitHub issue with Gherkin, data contracts, journey reference, and contract YAML files.
When: After implementation, before closing tickets.
Process:
Key rule: Issues with UI but no journey contract are PARTIAL at best, never PASS.
When: After implementation, before closing tickets or creating PRs.
Process:
Mandatory reporting: WHERE tests ran, WHICH tests, HOW MANY passed/failed, SKIPPED with reasons.
When: Contract tests fail. Invoked by orchestrator, never by users directly.
Scope: Only contract violations with enough YAML context to generate a fix. Never journey tests, build errors, or forbidden patterns without auto_fix hints.
Process:
Fix strategies: add_import, remove_pattern, wrap_with, replace_with
Route tasks to the optimal model tier for cost efficiency (~40-60% savings).
| Tier | Task Types |
|---|---|
| Haiku | Compliance audits, pattern matching validation, test execution and parsing, coverage checks, issue closing |
| Sonnet | Spec generation, contract YAML creation, test code generation, dependency mapping, component building, orchestration |
| Opus | Deep fix reasoning (heal-loop), complex architectural analysis |
Override in .specflow/config.json:
{
"model_routing": {
"default": "sonnet",
"overrides": {
"heal-loop": "opus",
"test-runner": "haiku"
}
}
}
All four gates must pass before work is considered complete.
npm test -- contracts
Pattern scans source code for forbidden/required patterns. Violations block the build.
npx playwright test
E2E tests verify user flows work end-to-end. Critical journeys must pass before release.
SEC-001 through SEC-005 scan for OWASP Top 10 patterns. Non-negotiable.
A11Y-001 through A11Y-004 scan for WCAG AA violations. Non-negotiable.
| Level | Meaning | Release Impact |
|---|---|---|
critical | Core user flow | Blocks release if failing |
important | Key feature | Should fix before release |
future | Planned feature | Can release without |
Never report "ready for release" if any critical journey is failing or not_tested.
Fix patterns are stored in .specflow/fix-patterns.json and scored by historical success rate.
| Tier | Confidence | Behavior |
|---|---|---|
| Platinum | >= 0.95 | Auto-apply immediately |
| Gold | >= 0.85 | Auto-apply, flag in commit message for review |
| Silver | >= 0.75 | Suggest only, do not auto-apply |
| Bronze | < 0.70 | Learning only, track for analysis |
Score rules: New patterns start at 0.50 (Silver). +0.05 per success, -0.10 per failure. Decay -0.01/week after 90 days unused. Below 0.30: archived.
Pattern entry format:
{
"id": "fix-sec-001-hardcoded-secret",
"contract_rule": "SEC-001",
"violation_signature": "Hardcoded secret detected",
"fix_strategy": "replace_with",
"fix_template": {
"find": "const KEY = \"sk_live_...\"",
"replace_pattern": "const KEY = process.env.STRIPE_SECRET_KEY"
},
"confidence": 0.50,
"tier": "silver"
}
/specflow Full autonomous loop: spec, contract, test, implement, verify
/specflow verify Contract validation only against existing contracts
/specflow spec Generate spec with REQ IDs for current issue or feature
/specflow heal Run fix loop on failing contract tests
/specflow status Render full execution dashboard (all 5 visualizations)
/specflow compile Compile CSV journeys to YAML contracts + Playwright stubs
docs/contracts/ exists. If not, create it and install default templates.docs/contracts/*.yml*.csv with journey headers)node scripts/specflow-compile.js <csv-file>Render the full execution dashboard with all 5 mandatory visualizations:
This command works at any point during wave execution. See agents/waves-controller.md for full visualization templates.
Core Loop: Spec --> Contract --> Test --> Code --> Verify
REQ ID Format: AUTH-001 (MUST), AUTH-010 (SHOULD), J-AUTH-LOGIN
Contract Files: docs/contracts/feature_*.yml, journey_*.yml
Test Files: src/__tests__/contracts/*.test.ts, tests/e2e/*.spec.ts
Commands: npm test -- contracts, npx playwright test
Override: override_contract: <contract_id>
When setting up Specflow in a new project, create this structure:
docs/
contracts/
feature_architecture.yml # ARCH rules
feature_*.yml # Feature rules
journey_*.yml # User flow DOD
security_defaults.yml # SEC-001..005
accessibility_defaults.yml # A11Y-001..004
CONTRACT_INDEX.yml # Central registry
src/
__tests__/
contracts/
*.test.ts # Contract pattern tests
tests/
e2e/
journey_*.spec.ts # Playwright journey tests
.specflow/
config.json # Model routing, overrides
fix-patterns.json # Fix pattern store
Inspired by the single-file skill packaging of forge by Ikenna N. Okpala.