> ## Documentation Index
> Fetch the complete documentation index at: https://geni.masiting.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Zero-Boot Philosophy

> Why Geni avoids booting your application or executing controller code.

## The Problem with Booting Applications

Traditional PHP documentation tools boot the entire Laravel application kernel to inspect routes and controllers. This leads to serious operational issues:

* **Database Dependency**: The application fails to boot or throws exceptions if database credentials are not configured, database servers are unreachable, or migrations have not run.
* **Accidental Side Effects**: Running controller constructors, service providers, or action methods can trigger external API requests, database queries, Redis connections, or file operations.
* **Slow CI Execution**: Running documentation commands in CI requires provisioning databases, seeders, and Redis instances just to build static documentation.
* **Brittle Environments**: Locked-down production or pre-commit hook environments without database access cannot run documentation generators.

## How Geni Does Zero-Boot

Geni adheres strictly to a zero-boot philosophy for inference:

<CardGroup cols={2}>
  <Card title="No Database Connections" icon="shield-check">
    Geni never calls `DB::connection()`, `PDO`, or database drivers. All database structure is reconstructed from your migration source files.
  </Card>

  <Card title="No Controller Instantiation" icon="ban">
    Geni never executes `new $controllerClass()` or invokes action methods. Analysis is performed statically on AST nodes.
  </Card>

  <Card title="No Eloquent Hydration" icon="feather">
    Model relationships, table names, and column types are determined by static heuristics and migration schemas, not live queries.
  </Card>

  <Card title="Deterministic Output" icon="arrows-rotate">
    Generating the documentation multiple times produces identical output with canonicalized key ordering and zero false drift.
  </Card>
</CardGroup>

## What Touches the Runtime?

The only runtime element used by Geni is reading the Laravel `RouteCollection` via `Route::getRoutes()`:

```php theme={null}
// Geni\Laravel\RouteDiscoverer:
$routes = Route::getRoutes()->getRoutes();
```

Everything that happens after route discovery (reading files, extracting rules, analyzing return statements, mapping schemas) is 100% static AST parsing.
