# Ggen Scripts - Dogfooding Tools

This directory contains scripts for using ggen to improve ggen itself.

## Quick Start

```bash
# Check for panic points
./check-no-panic-points.sh

# Fix panic points automatically
cargo script fix-panic-points.rs --dry-run
cargo script fix-panic-points.rs

# Install git hooks
ggen lifecycle run setup-git-hooks
```

## Scripts

### validate-marketplace-package.sh
End-to-end validation of marketplace packages in a clean Docker environment.

**Usage:**
```bash
# Validate a package
./validate-marketplace-package.sh io.ggen.nextjs.ontology-crud

# Keep container for debugging
./validate-marketplace-package.sh io.ggen.nextjs.ontology-crud --keep-container
```

**What it does:**
1. Creates clean Docker container (node:20-bookworm)
2. Installs system dependencies (git, curl, build-essential)
3. Installs Rust toolchain via rustup
4. Clones and builds ggen from source
5. Installs the specified marketplace package
6. Runs `npm install` and `npm run regenerate`
7. Validates generated files
8. Runs `npm run build` (if available)
9. Reports detailed validation results

**Exit codes:**
- 0: Success
- 1: Invalid arguments
- 2: Docker not available
- 3: Container creation failed
- 4: Build failed
- 5: Package installation failed
- 6: Validation failed

### check-no-panic-points.sh
Scans production code for `.expect()` and `.unwrap()` calls.

**Usage:**
```bash
./check-no-panic-points.sh
```

**Exit codes:**
- 0: No panic points found
- 1: Panic points found

### fix-panic-points.rs
Automatically fixes panic points in Rust code.

**Usage:**
```bash
# Dry run (preview fixes)
cargo script fix-panic-points.rs --dry-run

# Apply fixes
cargo script fix-panic-points.rs

# Fix specific directories
cargo script fix-panic-points.rs cli/src ggen-core/src
```

**Features:**
- Replaces `.expect()` with `.map_err()`
- Replaces `.unwrap()` with safe alternatives
- Preserves safe patterns
- Detailed reporting

## Documentation

See `docs/how-to-guides/DOGFOODING_QUICKSTART.md` for complete usage guide.
