# Aeries Preparation Analysis

The Aeries project follows an "Evolutionary Architecture" path: Monolith -> Split -> Distributed. This requires specific preparation to ensure the Monolith is built in a way that *can* be split later without a full rewrite.

## 1. The Critical Pattern: "Interface-First"

For `aeries-1-genesis` to succeed as a precursor to `aeries-2-simulation`, the Core API must NOT tightly couple its HTTP handlers to its Logic.

**BAD Pattern (Hard to split):**
```go
// Handler directly calls DB logic
func CreateAgent(w, r) {
    db.Exec("INSERT INTO agents...")
}
```

**GOOD Pattern (Easy to split):**
```go
// Handler calls Interface
type AgentService interface {
    Create(ctx, agent) error
}

func CreateAgent(svc AgentService) http.HandlerFunc {
    return func(w, r) {
        svc.Create(...)
    }
}
```

**Requirement:** We need to update the `go-api` template (or the `implement-feature` prompt instructions) to enforce this Hexagonal/Clean Architecture style.

## 2. Infrastructure Gaps

Aeries uses standard components, but expects them to be "peelable".

*   **Postgres:** Required immediately (same as Slack path).
*   **React App:** Required immediately. We have `astro-landing`, but do we have a robust `app-react` template? The cookbook assumes `type: app-react`.
    *   *Action:* Check `internal/adapter/templates/templates/app-react`. If missing, create it (likely based on Vite + Tailwind).

## 3. SDLC Commands for Evolution

The later stages of Aeries depend on the Agent's ability to Refactor.

*   **`refactor-extract` Command:** We need a command that specifically handles the "Phase 2" logic:
    1.  Copy package `X` to new Service `Y`.
    2.  Delete package `X` from Core.
    3.  Generate `X_Client` in Core that talks to Service `Y`.

## 4. Preparation Checklist

### Immediate (For Genesis)
1.  [ ] **Templates:** Verify/Create `postgres` and `app-react`.
2.  [ ] **Instructions:** Update `.claude/skills/code-review` or create `.claude/skills/go-architecture` to enforce Interface-based design so the agent doesn't write spaghetti code.

### Future (For Simulation/Society)
3.  [ ] **Command:** Create `.claude/commands/extract-service.md`.
4.  [ ] **Template:** Ensure `worker` template exists (for the Simulation tick).
5.  [ ] **Template:** Ensure `redis` template exists (for the Society pub/sub).

## Risk Assessment

The biggest risk to Aeries is that the Agent writes a "Script Kiddie" monolith (everything in `main.go` or tight coupling) which becomes impossible to refactor autonomously. We must prompt-engineer the "Good Architecture" into the system *before* the first line of Aeries code is written.
