docs: Apply global fixes for v0.7.0 Temporal architecture

- Replace docker-compose.temporal.yaml → docker-compose.yml
- Replace Temporal UI port :8233 → :8080
- Replace repository URL fuzzforge.git → fuzzforge_ai.git

Affected files:
- concept/docker-containers.md
- concept/resource-management.md
- concept/sarif-format.md
- how-to/create-workflow.md
- how-to/debugging.md
- how-to/troubleshooting.md
- tutorial/getting-started.md
This commit is contained in:
tduhamel42
2025-10-17 10:21:47 +02:00
parent 54738ca091
commit e42f07fc63
8 changed files with 393 additions and 72 deletions
@@ -0,0 +1,321 @@
# FuzzForge v0.7.0: Temporal Orchestration & Vertical Workers Architecture
We're excited to announce **FuzzForge v0.7.0**, a major release featuring two significant improvements:
1. **Architectural Foundation**: Complete migration from Prefect to **Temporal** orchestration with **vertical workers** - pre-built containers for instant deployment
2. **AI-Powered Secret Detection**: New workflows achieving 84% recall on obfuscated secrets using LLM semantic analysis
This release transforms how security workflows are built, deployed, and scaled.
<!-- truncate -->
## 🚀 Flagship Features
### Temporal Orchestration: Production-Ready Workflow Engine
We've fully migrated from Prefect to [Temporal](https://temporal.io), bringing enterprise-grade workflow orchestration to FuzzForge:
**Why Temporal?**
-**Reliability**: Automatic retries, timeouts, and failure handling built-in
-**Observability**: World-class UI for monitoring workflow execution, logs, and debugging
-**Scalability**: Horizontal scaling across workers with intelligent load balancing
-**Developer Experience**: Type-safe workflows, versioning, and zero downtime deployments
**What This Means for You:**
```bash
# Start FuzzForge with Temporal
docker compose up -d
# Monitor workflows in real-time
open http://localhost:8080 # Temporal UI
# Submit workflows - everything just works
cd your_project/
ff workflow run security_assessment .
```
The Temporal UI gives you complete visibility into workflow execution:
- Live activity timelines
- Detailed logs for every step
- Retry history and failure analysis
- Performance metrics and bottleneck detection
### Vertical Workers: Pre-Built Security Toolchains
FuzzForge now uses **vertical workers** - long-lived containers pre-built with security toolchains for different languages and platforms:
| Worker | Toolchain | Status | Available Workflows |
| ----------- | ----------------------------- | ------------- | ------------------------------------- |
| **python** | Gitleaks, TruffleHog, Atheris | ✅ Production | Secret detection, security assessment |
| **rust** | cargo-fuzz | ⚠️ Early Dev | Rust fuzzing |
| **ossfuzz** | OSS-Fuzz infrastructure | ⚠️ Heavy Dev | Continuous fuzzing campaigns |
**Note:** Additional workers (web, android, Go) are planned but not yet available.
**Key Benefits:**
1. **Zero Build Time**: Workflows start instantly - no container builds per workflow
2. **Instant Code Changes**: Modify workflow code, restart worker, done
3. **Consistent Environment**: Same toolchain versions across all runs
4. **Resource Efficiency**: Share workers across multiple concurrent workflows
**Example: Running Secret Detection**
```bash
# Worker is already running with Gitleaks, TruffleHog installed
ff workflow run gitleaks_detection .
# Behind the scenes:
# 1. CLI uploads project to MinIO
# 2. Temporal schedules on python-worker
# 3. Worker downloads from MinIO
# 4. Gitleaks runs (already installed!)
# 5. Results returned as SARIF
```
### MinIO Storage: Unified File Handling
We've replaced volume mounts with **MinIO** (S3-compatible object storage):
**Old Way (Volume Mounts):**
```yaml
# Had to mount directories, manage paths, cleanup manually
volumes:
- ./my_project:/target
```
**New Way (MinIO):**
```bash
# CLI handles everything automatically
ff workflow run security_assessment .
# ✓ Creates tarball
# ✓ Uploads to MinIO
# ✓ Passes target_id to workflow
# ✓ Worker downloads and extracts
# ✓ Cleanup handled automatically
```
**Benefits:**
- ✅ No path conflicts or permissions issues
- ✅ Works seamlessly with remote Temporal clusters
- ✅ Automatic cleanup and caching
- ✅ Supports large targets (GB+)
## 🔍 AI-Powered Secret Detection: Also in v0.7.0
Alongside the architectural improvements, we're releasing a comprehensive **secret detection** system with three workflows:
### Benchmark Results
We tested on a controlled dataset of **32 documented secrets** (12 Easy, 10 Medium, 10 Hard):
| Tool | Recall | Secrets Found | Speed | Best For |
| --------------------- | --------- | ------------- | ----- | --------------------------- |
| **LLM (gpt-5-mini)** | **84.4%** | 41 | 618s | Obfuscated & hidden secrets |
| **LLM (gpt-4o-mini)** | 56.2% | 30 | 297s | Balanced speed/accuracy |
| **Gitleaks** | 37.5% | 12 | 5s | Fast pattern-based scanning |
| **TruffleHog** | 0.0% | 1 | 5s | Entropy analysis |
📊 [Full benchmark methodology and results →](https://github.com/FuzzingLabs/fuzzforge_ai/blob/dev/backend/benchmarks/by_category/secret_detection/results/comparison_report.md)
### Why LLM-Based Detection Wins
**Obfuscated Secrets (Medium Difficulty):**
```python
# Gitleaks: ❌ Missed (no pattern match)
# LLM: ✅ Found (semantic understanding)
aws_key = base64.b64decode("QUtJQUlPU0ZPRE5ON0VYQU1QTEU=").decode()
```
**Well-Hidden Secrets (Hard Difficulty):**
```python
# Gitleaks: ❌ Missed (no pattern)
# LLM: ✅ Found (understands XOR + join)
secret = ''.join(chr(ord(c) ^ 0x42) for c in "\x0b\x15\x04\x1b...")
```
**Standard Secrets (Easy Difficulty):**
```python
# Both find these:
AWS_ACCESS_KEY = "AKIAIOSFODNN7EXAMPLE"
```
### Try It Yourself
```bash
# Start FuzzForge
docker compose up -d
# Run secret detection on your code
cd your_project/
ff workflow run gitleaks_detection . # Fast pattern-based
ff workflow run trufflehog_detection . # Entropy analysis
ff workflow run llm_secret_detection . # AI semantic analysis
# Get SARIF output
ff finding <run-id>
```
## 📊 Real-World Impact
**Before v0.7.0 (Pattern-Only Detection):**
- Found: Standard API keys, simple patterns
- Missed: Base64-encoded secrets, obfuscated credentials, split secrets
**After v0.7.0 (LLM + Patterns):**
- **84% recall** on comprehensive benchmark
- Detects novel obfuscation techniques
- Understands code context (not just regex)
- Catches secrets in:
- Base64/hex encoding
- String concatenation
- XOR/ROT13 obfuscation
- Template strings
- Binary literals
## 🔄 Migration Guide
### What Changed
**Docker Compose:**
```bash
# Old (Prefect)
docker-compose up
# New (Temporal)
docker compose up -d
```
**Workflow Submission:**
```bash
# Old (volume mounts)
ff workflow run security_assessment --volume ./project
# New (automatic upload)
ff workflow run security_assessment .
# CLI handles upload automatically!
```
**Worker Management:**
```bash
# Old (per-workflow containers)
# Each workflow built its own container
# New (vertical workers)
docker compose up -d # All workers start
# Workflows share workers - much faster!
```
### Configuration
Set up AI workflows with API keys:
```bash
cp volumes/env/.env.example volumes/env/.env
# Edit .env and add your API keys (OpenAI, Anthropic, etc.)
```
Required for:
- `llm_secret_detection` workflow
- AI agent features (`ff ai agent`)
Basic security workflows (gitleaks, trufflehog, security_assessment) work without this.
## 🏗️ Architecture Overview
```
┌─────────────┐
│ User CLI │ Upload → MinIO
└──────┬──────┘
↓ Submit
┌─────────────┐
│ Temporal │ Schedule → Task Queue
└──────┬──────┘
↓ Execute
┌─────────────┐
│ Vertical │ Download from MinIO → Run Tools → Upload Results
│ Workers │
└─────────────┘
rust, python, web, android, ossfuzz
```
**Benefits:**
- 🔄 Automatic retries and timeouts (Temporal)
- 📦 No file path management (MinIO)
- ⚡ Zero container build time (Vertical Workers)
- 📈 Horizontal scaling ready (Temporal + Workers)
## 🎯 Workflow Stability Status
### ✅ Stable & Production-Ready
- **Secret Detection**: `gitleaks_detection`, `trufflehog_detection`, `llm_secret_detection`
- **Security Assessment**: `security_assessment`
- Temporal orchestration with python worker
- MinIO file storage
### ⚠️ Early Development (Functional but not production-ready)
- **Fuzzing workflows**:
- `atheris_fuzzing` - Python fuzzing with Atheris
- `cargo_fuzzing` - Rust fuzzing with cargo-fuzz
- **OSS-Fuzz integration**: `ossfuzz_campaign` (under heavy active development)
**Important:** Fuzzing workflows are functional for testing but not recommended for production use yet.
## 📚 Resources
- 🌐 [Website](https://fuzzforge.ai)
- 📖 [Documentation](https://docs.fuzzforge.ai)
- 💬 [Discord Community](https://discord.gg/8XEX33UUwZ)
- 🎓 [FuzzingLabs Academy](https://academy.fuzzinglabs.com/?coupon=GITHUB_FUZZFORGE)
- 📊 [Secret Detection Benchmarks](https://github.com/FuzzingLabs/fuzzforge_ai/blob/dev/backend/benchmarks/by_category/secret_detection/results/comparison_report.md)
## 🙏 Acknowledgments
Special thanks to:
- [Temporal](https://temporal.io) for the amazing workflow engine
- Our community for feedback during the migration
## 🚀 Get Started
```bash
# Clone and install
git clone https://github.com/fuzzinglabs/fuzzforge_ai.git
cd fuzzforge_ai
uv tool install --python python3.12 .
# Start FuzzForge with Temporal
docker compose up -d
# Run your first workflow
cd test_projects/vulnerable_app/
fuzzforge init
ff workflow run security_assessment .
# Check Temporal UI
open http://localhost:8080
```
---
**FuzzForge v0.7.0** is a foundational release that sets the stage for scalable, production-ready security automation. Try it today and let us know what you think!
Star us on [GitHub](https://github.com/FuzzingLabs/fuzzforge_ai) ⭐
+1 -1
View File
@@ -141,7 +141,7 @@ Example build:
cd workers/rust cd workers/rust
docker build -t fuzzforge-worker-rust:latest . docker build -t fuzzforge-worker-rust:latest .
# Or via docker-compose # Or via docker-compose
docker-compose -f docker-compose.temporal.yaml build worker-rust docker-compose -f docker-compose.yml build worker-rust
``` ```
--- ---
+12 -12
View File
@@ -124,7 +124,7 @@ docker ps -a --filter "name=fuzzforge-worker"
## Level 1: Docker Container Limits (Primary) ## Level 1: Docker Container Limits (Primary)
Docker container limits are the **primary enforcement mechanism** for CPU and memory resources. These are configured in `docker-compose.temporal.yaml` and enforced by the Docker runtime. Docker container limits are the **primary enforcement mechanism** for CPU and memory resources. These are configured in `docker-compose.yml` and enforced by the Docker runtime.
### Configuration ### Configuration
@@ -267,10 +267,10 @@ Check how many workflows are running:
```bash ```bash
# View worker logs # View worker logs
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "Starting" docker-compose -f docker-compose.yml logs worker-rust | grep "Starting"
# Check Temporal UI # Check Temporal UI
# Open http://localhost:8233 # Open http://localhost:8080
# Navigate to "Task Queues" → "rust" → See pending/running counts # Navigate to "Task Queues" → "rust" → See pending/running counts
``` ```
@@ -324,7 +324,7 @@ class SecurityAssessmentWorkflow:
``` ```
**Check timeout in Temporal UI:** **Check timeout in Temporal UI:**
1. Open http://localhost:8233 1. Open http://localhost:8080
2. Navigate to workflow execution 2. Navigate to workflow execution
3. See "Timeout" in workflow details 3. See "Timeout" in workflow details
4. If exceeded, status shows "TIMED_OUT" 4. If exceeded, status shows "TIMED_OUT"
@@ -383,7 +383,7 @@ Watch for these warning signs:
```bash ```bash
# Check for OOM kills # Check for OOM kills
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep -i "oom\|killed" docker-compose -f docker-compose.yml logs worker-rust | grep -i "oom\|killed"
# Check for CPU throttling # Check for CPU throttling
docker stats fuzzforge-worker-rust docker stats fuzzforge-worker-rust
@@ -413,7 +413,7 @@ To handle more workflows, scale worker containers horizontally:
```bash ```bash
# Scale rust worker to 3 instances # Scale rust worker to 3 instances
docker-compose -f docker-compose.temporal.yaml up -d --scale worker-rust=3 docker-compose -f docker-compose.yml up -d --scale worker-rust=3
# Now you can run: # Now you can run:
# - 3 workers × 5 concurrent activities = 15 workflows simultaneously # - 3 workers × 5 concurrent activities = 15 workflows simultaneously
@@ -435,13 +435,13 @@ docker-compose -f docker-compose.temporal.yaml up -d --scale worker-rust=3
**Diagnosis:** **Diagnosis:**
```bash ```bash
# Check worker is alive # Check worker is alive
docker-compose -f docker-compose.temporal.yaml ps worker-rust docker-compose -f docker-compose.yml ps worker-rust
# Check worker resource usage # Check worker resource usage
docker stats fuzzforge-worker-rust docker stats fuzzforge-worker-rust
# Check for OOM kills # Check for OOM kills
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep -i oom docker-compose -f docker-compose.yml logs worker-rust | grep -i oom
``` ```
**Solution:** **Solution:**
@@ -459,7 +459,7 @@ docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep -i oom
docker exec fuzzforge-worker-rust env | grep MAX_CONCURRENT_ACTIVITIES docker exec fuzzforge-worker-rust env | grep MAX_CONCURRENT_ACTIVITIES
# Check current workload # Check current workload
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "Starting" docker-compose -f docker-compose.yml logs worker-rust | grep "Starting"
``` ```
**Solution:** **Solution:**
@@ -557,10 +557,10 @@ Check cache size and cleanup logs:
docker exec fuzzforge-worker-rust du -sh /cache docker exec fuzzforge-worker-rust du -sh /cache
# Monitor cache evictions # Monitor cache evictions
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "Evicted from cache" docker-compose -f docker-compose.yml logs worker-rust | grep "Evicted from cache"
# Check download vs cache hit rate # Check download vs cache hit rate
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep -E "Cache (HIT|MISS)" docker-compose -f docker-compose.yml logs worker-rust | grep -E "Cache (HIT|MISS)"
``` ```
See the [Workspace Isolation](/docs/concept/workspace-isolation) guide for complete details on isolation modes and when to use each. See the [Workspace Isolation](/docs/concept/workspace-isolation) guide for complete details on isolation modes and when to use each.
@@ -588,7 +588,7 @@ FuzzForge's resource management strategy:
--- ---
**Next Steps:** **Next Steps:**
- Review `docker-compose.temporal.yaml` resource configuration - Review `docker-compose.yml` resource configuration
- Profile your workflows to determine actual resource usage - Profile your workflows to determine actual resource usage
- Adjust limits based on monitoring data - Adjust limits based on monitoring data
- Set up alerts for resource exhaustion - Set up alerts for resource exhaustion
+1 -1
View File
@@ -45,7 +45,7 @@ Each FuzzForge workflow produces a SARIF "run" containing:
"driver": { "driver": {
"name": "FuzzForge", "name": "FuzzForge",
"version": "1.0.0", "version": "1.0.0",
"informationUri": "https://github.com/FuzzingLabs/fuzzforge", "informationUri": "https://github.com/FuzzingLabs/fuzzforge_ai",
"organization": "FuzzingLabs", "organization": "FuzzingLabs",
"rules": [ /* Security rules applied */ ] "rules": [ /* Security rules applied */ ]
}, },
+2 -2
View File
@@ -397,7 +397,7 @@ class DependencyAnalysisWorkflow:
```bash ```bash
# Start FuzzForge with Temporal # Start FuzzForge with Temporal
docker-compose -f docker-compose.temporal.yaml up -d docker-compose -f docker-compose.yml up -d
# Wait for services to initialize # Wait for services to initialize
sleep 10 sleep 10
@@ -445,7 +445,7 @@ client.close()
### Check Temporal UI ### Check Temporal UI
Open http://localhost:8233 to see: Open http://localhost:8080 to see:
- Workflow execution timeline - Workflow execution timeline
- Activity results - Activity results
- Logs and errors - Logs and errors
+27 -27
View File
@@ -8,10 +8,10 @@ This guide shows you how to debug FuzzForge workflows and modules using Temporal
When something goes wrong: When something goes wrong:
1. **Check worker logs** - `docker-compose -f docker-compose.temporal.yaml logs worker-rust -f` 1. **Check worker logs** - `docker-compose -f docker-compose.yml logs worker-rust -f`
2. **Check Temporal UI** - http://localhost:8233 (visual execution history) 2. **Check Temporal UI** - http://localhost:8080 (visual execution history)
3. **Check MinIO console** - http://localhost:9001 (inspect uploaded files) 3. **Check MinIO console** - http://localhost:9001 (inspect uploaded files)
4. **Check backend logs** - `docker-compose -f docker-compose.temporal.yaml logs fuzzforge-backend -f` 4. **Check backend logs** - `docker-compose -f docker-compose.yml logs fuzzforge-backend -f`
--- ---
@@ -41,12 +41,12 @@ When something goes wrong:
4. **Check worker logs for discovery errors:** 4. **Check worker logs for discovery errors:**
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "my_workflow" docker-compose -f docker-compose.yml logs worker-rust | grep "my_workflow"
``` ```
**Solution:** **Solution:**
- Ensure `metadata.yaml` has correct `vertical` field - Ensure `metadata.yaml` has correct `vertical` field
- Restart worker to reload: `docker-compose -f docker-compose.temporal.yaml restart worker-rust` - Restart worker to reload: `docker-compose -f docker-compose.yml restart worker-rust`
- Check worker logs for discovery confirmation - Check worker logs for discovery confirmation
--- ---
@@ -55,10 +55,10 @@ When something goes wrong:
### Using Temporal Web UI ### Using Temporal Web UI
The Temporal UI at http://localhost:8233 is your primary debugging tool. The Temporal UI at http://localhost:8080 is your primary debugging tool.
**Navigate to a workflow:** **Navigate to a workflow:**
1. Open http://localhost:8233 1. Open http://localhost:8080
2. Click "Workflows" in left sidebar 2. Click "Workflows" in left sidebar
3. Find your workflow by `run_id` or workflow name 3. Find your workflow by `run_id` or workflow name
4. Click to see detailed execution 4. Click to see detailed execution
@@ -86,13 +86,13 @@ The Temporal UI at http://localhost:8233 is your primary debugging tool.
```bash ```bash
# Follow logs from rust worker # Follow logs from rust worker
docker-compose -f docker-compose.temporal.yaml logs worker-rust -f docker-compose -f docker-compose.yml logs worker-rust -f
# Follow logs from all workers # Follow logs from all workers
docker-compose -f docker-compose.temporal.yaml logs worker-rust worker-android -f docker-compose -f docker-compose.yml logs worker-rust worker-android -f
# Show last 100 lines # Show last 100 lines
docker-compose -f docker-compose.temporal.yaml logs worker-rust --tail 100 docker-compose -f docker-compose.yml logs worker-rust --tail 100
``` ```
### What Worker Logs Show ### What Worker Logs Show
@@ -125,16 +125,16 @@ IndentationError: expected an indented block
```bash ```bash
# Show only errors # Show only errors
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep ERROR docker-compose -f docker-compose.yml logs worker-rust | grep ERROR
# Show workflow discovery # Show workflow discovery
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "Discovered workflow" docker-compose -f docker-compose.yml logs worker-rust | grep "Discovered workflow"
# Show specific workflow execution # Show specific workflow execution
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "security_assessment-abc123" docker-compose -f docker-compose.yml logs worker-rust | grep "security_assessment-abc123"
# Show activity execution # Show activity execution
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "activity" docker-compose -f docker-compose.yml logs worker-rust | grep "activity"
``` ```
--- ---
@@ -156,7 +156,7 @@ docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep "activity
curl http://localhost:9000 curl http://localhost:9000
# List backend logs for upload # List backend logs for upload
docker-compose -f docker-compose.temporal.yaml logs fuzzforge-backend | grep "upload" docker-compose -f docker-compose.yml logs fuzzforge-backend | grep "upload"
``` ```
### Check Worker Cache ### Check Worker Cache
@@ -230,12 +230,12 @@ Since toolbox is mounted as a volume, you can edit code on your host and reload:
2. **Restart worker to reload:** 2. **Restart worker to reload:**
```bash ```bash
docker-compose -f docker-compose.temporal.yaml restart worker-rust docker-compose -f docker-compose.yml restart worker-rust
``` ```
3. **Check discovery logs:** 3. **Check discovery logs:**
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs worker-rust | tail -50 docker-compose -f docker-compose.yml logs worker-rust | tail -50
``` ```
### Add Debug Logging ### Add Debug Logging
@@ -266,14 +266,14 @@ class MyWorkflow:
Set debug logging: Set debug logging:
```bash ```bash
# Edit docker-compose.temporal.yaml # Edit docker-compose.yml
services: services:
worker-rust: worker-rust:
environment: environment:
LOG_LEVEL: DEBUG # Change from INFO to DEBUG LOG_LEVEL: DEBUG # Change from INFO to DEBUG
# Restart # Restart
docker-compose -f docker-compose.temporal.yaml restart worker-rust docker-compose -f docker-compose.yml restart worker-rust
``` ```
--- ---
@@ -285,7 +285,7 @@ docker-compose -f docker-compose.temporal.yaml restart worker-rust
**Debug:** **Debug:**
1. Check Temporal UI for last completed activity 1. Check Temporal UI for last completed activity
2. Check worker logs for errors 2. Check worker logs for errors
3. Check if worker is still running: `docker-compose -f docker-compose.temporal.yaml ps worker-rust` 3. Check if worker is still running: `docker-compose -f docker-compose.yml ps worker-rust`
**Solution:** **Solution:**
- Worker may have crashed - restart it - Worker may have crashed - restart it
@@ -315,7 +315,7 @@ docker-compose -f docker-compose.temporal.yaml restart worker-rust
**Solution:** **Solution:**
- Re-upload file via CLI - Re-upload file via CLI
- Check MinIO is running: `docker-compose -f docker-compose.temporal.yaml ps minio` - Check MinIO is running: `docker-compose -f docker-compose.yml ps minio`
- Check MinIO credentials in worker environment - Check MinIO credentials in worker environment
--- ---
@@ -337,7 +337,7 @@ docker-compose -f docker-compose.temporal.yaml restart worker-rust
docker stats fuzzforge-worker-rust docker stats fuzzforge-worker-rust
# Check worker logs for memory warnings # Check worker logs for memory warnings
docker-compose -f docker-compose.temporal.yaml logs worker-rust | grep -i "memory\|oom" docker-compose -f docker-compose.yml logs worker-rust | grep -i "memory\|oom"
``` ```
### Profile Workflow Execution ### Profile Workflow Execution
@@ -368,7 +368,7 @@ class MyWorkflow:
### Enable Temporal Worker Debug Logs ### Enable Temporal Worker Debug Logs
```bash ```bash
# Edit docker-compose.temporal.yaml # Edit docker-compose.yml
services: services:
worker-rust: worker-rust:
environment: environment:
@@ -376,7 +376,7 @@ services:
LOG_LEVEL: DEBUG LOG_LEVEL: DEBUG
# Restart # Restart
docker-compose -f docker-compose.temporal.yaml restart worker-rust docker-compose -f docker-compose.yml restart worker-rust
``` ```
### Inspect Temporal Workflows via CLI ### Inspect Temporal Workflows via CLI
@@ -405,7 +405,7 @@ docker exec fuzzforge-worker-rust ping temporal
docker exec fuzzforge-worker-rust curl http://minio:9000 docker exec fuzzforge-worker-rust curl http://minio:9000
# From host to services # From host to services
curl http://localhost:8233 # Temporal UI curl http://localhost:8080 # Temporal UI
curl http://localhost:9000 # MinIO curl http://localhost:9000 # MinIO
curl http://localhost:8000/health # Backend curl http://localhost:8000/health # Backend
``` ```
@@ -431,10 +431,10 @@ If you're still stuck:
1. **Collect diagnostic info:** 1. **Collect diagnostic info:**
```bash ```bash
# Save all logs # Save all logs
docker-compose -f docker-compose.temporal.yaml logs > fuzzforge-logs.txt docker-compose -f docker-compose.yml logs > fuzzforge-logs.txt
# Check service status # Check service status
docker-compose -f docker-compose.temporal.yaml ps > service-status.txt docker-compose -f docker-compose.yml ps > service-status.txt
``` ```
2. **Check Temporal UI** and take screenshots of: 2. **Check Temporal UI** and take screenshots of:
+25 -25
View File
@@ -10,14 +10,14 @@ Before diving into specific errors, lets check the basics:
```bash ```bash
# Check all FuzzForge services # Check all FuzzForge services
docker-compose -f docker-compose.temporal.yaml ps docker-compose -f docker-compose.yml ps
# Verify Docker registry config (if using workflow registry) # Verify Docker registry config (if using workflow registry)
docker info | grep -i "insecure registries" docker info | grep -i "insecure registries"
# Test service health endpoints # Test service health endpoints
curl http://localhost:8000/health curl http://localhost:8000/health
curl http://localhost:8233 # Temporal Web UI curl http://localhost:8080 # Temporal Web UI
curl http://localhost:9000 # MinIO API curl http://localhost:9000 # MinIO API
curl http://localhost:9001 # MinIO Console curl http://localhost:9001 # MinIO Console
``` ```
@@ -54,13 +54,13 @@ The registry isnt running or the port is blocked.
**How to fix:** **How to fix:**
- Make sure the registry container is up (if using registry for workflow images): - Make sure the registry container is up (if using registry for workflow images):
```bash ```bash
docker-compose -f docker-compose.temporal.yaml ps registry docker-compose -f docker-compose.yml ps registry
``` ```
- Check logs for errors: - Check logs for errors:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs registry docker-compose -f docker-compose.yml logs registry
``` ```
- If port 5001 is in use, change it in `docker-compose.temporal.yaml` and your Docker config. - If port 5001 is in use, change it in `docker-compose.yml` and your Docker config.
**Note:** With Temporal architecture, target files use MinIO (port 9000), not the registry. **Note:** With Temporal architecture, target files use MinIO (port 9000), not the registry.
@@ -85,11 +85,11 @@ File upload to MinIO failed or worker can't download target.
**How to fix:** **How to fix:**
- Check MinIO is running: - Check MinIO is running:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml ps minio docker-compose -f docker-compose.yml ps minio
``` ```
- Check MinIO logs: - Check MinIO logs:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs minio docker-compose -f docker-compose.yml logs minio
``` ```
- Verify MinIO is accessible: - Verify MinIO is accessible:
```bash ```bash
@@ -106,13 +106,13 @@ File upload to MinIO failed or worker can't download target.
**How to fix:** **How to fix:**
- Check worker logs for details: - Check worker logs for details:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs worker-rust | tail -50 docker-compose -f docker-compose.yml logs worker-rust | tail -50
``` ```
- Check Temporal Web UI at http://localhost:8233 for detailed execution history - Check Temporal Web UI at http://localhost:8080 for detailed execution history
- Restart services: - Restart services:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml down docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.temporal.yaml up -d docker-compose -f docker-compose.yml up -d
``` ```
- Reduce the number of concurrent workflows if your system is resource-constrained. - Reduce the number of concurrent workflows if your system is resource-constrained.
@@ -125,18 +125,18 @@ File upload to MinIO failed or worker can't download target.
**How to fix:** **How to fix:**
- Check if the service is running: - Check if the service is running:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml ps fuzzforge-backend docker-compose -f docker-compose.yml ps fuzzforge-backend
docker-compose -f docker-compose.temporal.yaml ps temporal docker-compose -f docker-compose.yml ps temporal
``` ```
- View logs for errors: - View logs for errors:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml logs fuzzforge-backend --tail 50 docker-compose -f docker-compose.yml logs fuzzforge-backend --tail 50
docker-compose -f docker-compose.temporal.yaml logs temporal --tail 20 docker-compose -f docker-compose.yml logs temporal --tail 20
``` ```
- Restart the affected service: - Restart the affected service:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml restart fuzzforge-backend docker-compose -f docker-compose.yml restart fuzzforge-backend
docker-compose -f docker-compose.temporal.yaml restart temporal docker-compose -f docker-compose.yml restart temporal
``` ```
--- ---
@@ -216,9 +216,9 @@ File upload to MinIO failed or worker can't download target.
``` ```
- Recreate the network: - Recreate the network:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml down docker-compose -f docker-compose.yml down
docker network prune -f docker network prune -f
docker-compose -f docker-compose.temporal.yaml up -d docker-compose -f docker-compose.yml up -d
``` ```
--- ---
@@ -245,9 +245,9 @@ File upload to MinIO failed or worker can't download target.
```bash ```bash
export TEMPORAL_LOGGING_LEVEL=DEBUG export TEMPORAL_LOGGING_LEVEL=DEBUG
docker-compose -f docker-compose.temporal.yaml down docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.temporal.yaml up -d docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.temporal.yaml logs fuzzforge-backend -f docker-compose -f docker-compose.yml logs fuzzforge-backend -f
``` ```
### Collect diagnostic info ### Collect diagnostic info
@@ -258,12 +258,12 @@ Save and run this script to gather info for support:
#!/bin/bash #!/bin/bash
echo "=== FuzzForge Diagnostics ===" echo "=== FuzzForge Diagnostics ==="
date date
docker-compose -f docker-compose.temporal.yaml ps docker-compose -f docker-compose.yml ps
docker info | grep -A 5 -i "insecure registries" docker info | grep -A 5 -i "insecure registries"
curl -s http://localhost:8000/health || echo "Backend unhealthy" curl -s http://localhost:8000/health || echo "Backend unhealthy"
curl -s http://localhost:8233 >/dev/null && echo "Temporal UI healthy" || echo "Temporal UI unhealthy" curl -s http://localhost:8080 >/dev/null && echo "Temporal UI healthy" || echo "Temporal UI unhealthy"
curl -s http://localhost:9000 >/dev/null && echo "MinIO healthy" || echo "MinIO unhealthy" curl -s http://localhost:9000 >/dev/null && echo "MinIO healthy" || echo "MinIO unhealthy"
docker-compose -f docker-compose.temporal.yaml logs --tail 10 docker-compose -f docker-compose.yml logs --tail 10
``` ```
### Still stuck? ### Still stuck?
+4 -4
View File
@@ -17,7 +17,7 @@ Before we begin, ensure you have the following installed:
First, let's clone the FuzzForge repository: First, let's clone the FuzzForge repository:
```bash ```bash
git clone https://github.com/FuzzingLabs/fuzzforge.git git clone https://github.com/FuzzingLabs/fuzzforge_ai.git
cd fuzzforge cd fuzzforge
``` ```
@@ -85,7 +85,7 @@ docker pull localhost:5001/hello-world 2>/dev/null || echo "Registry not accessi
Start all FuzzForge services: Start all FuzzForge services:
```bash ```bash
docker-compose -f docker-compose.temporal.yaml up -d docker-compose -f docker-compose.yml up -d
``` ```
This will start 6+ services: This will start 6+ services:
@@ -101,7 +101,7 @@ Wait for all services to be healthy (this may take 2-3 minutes on first startup)
```bash ```bash
# Check service health # Check service health
docker-compose -f docker-compose.temporal.yaml ps docker-compose -f docker-compose.yml ps
# Verify FuzzForge is ready # Verify FuzzForge is ready
curl http://localhost:8000/health curl http://localhost:8000/health
@@ -228,7 +228,7 @@ Example output:
You can monitor workflow execution in real-time using the Temporal Web UI: You can monitor workflow execution in real-time using the Temporal Web UI:
1. Open http://localhost:8233 in your browser 1. Open http://localhost:8080 in your browser
2. Navigate to "Workflows" to see workflow executions 2. Navigate to "Workflows" to see workflow executions
3. Click on a workflow to see detailed execution history and activity results 3. Click on a workflow to see detailed execution history and activity results