# Story 3.1: Module System Interface and Registry

## Metadata
- **Story ID**: 3.1
- **Title**: Module System Interface and Registry
- **Epic**: 3 - Module Framework
- **Status**: Pending
- **Priority**: High
- **Estimated Time**: 5-6 hours
- **Dependencies**: 1.1, 2.3

## Goal
Design and implement the complete module system interface with registration, dependency resolution, and lifecycle management.

## Description
This story creates the foundation of the module system by defining the module interface, manifest structure, and registry. The system must support module registration, dependency validation, and lifecycle hooks.

## Deliverables

### 1. Module Interface (`pkg/module/module.go`)
- `IModule` interface with:
  - `Name() string` - Module name
  - `Version() string` - Module version
  - `Dependencies() []string` - Module dependencies
  - `Init() fx.Option` - FX options for module initialization
  - `Migrations() []func(*ent.Client) error` - Database migrations
  - Optional lifecycle hooks: `OnStart(ctx context.Context) error`
  - Optional lifecycle hooks: `OnStop(ctx context.Context) error`

### 2. Module Manifest (`pkg/module/manifest.go`)
- `Manifest` struct with:
  - Name, Version, Dependencies
  - Permissions list
  - Routes definition
- `module.yaml` schema definition
- Manifest parsing and validation

### 3. Module Registry (`internal/registry/registry.go`)
- Thread-safe module map
- `Register(m IModule)` function
- `All() []IModule` function
- `Get(name string) (IModule, error)` function
- Dependency validation (check dependencies are satisfied)
- Duplicate name detection
- Version compatibility checking
- Dependency cycle detection

## Implementation Steps

1. **Create Module Interface**
   - Create `pkg/module/module.go`
   - Define IModule interface
   - Add lifecycle hooks

2. **Create Module Manifest**
   - Create `pkg/module/manifest.go`
   - Define Manifest struct
   - Define module.yaml schema

3. **Create Module Registry**
   - Create `internal/registry/registry.go`
   - Implement thread-safe registry
   - Add validation logic

4. **Test Registration**
   - Test module registration
   - Test dependency validation
   - Test duplicate detection

## Acceptance Criteria
- [ ] Modules can register via `registry.Register()`
- [ ] Registry validates dependencies
- [ ] Registry prevents duplicate registrations
- [ ] Module interface is extensible
- [ ] Dependency cycles are detected
- [ ] Version compatibility is checked

## Related ADRs
- [ADR-0021: Module Loading Strategy](../../adr/0021-module-loading-strategy.md)

## Files to Create/Modify
- `pkg/module/module.go` - Module interface
- `pkg/module/manifest.go` - Module manifest
- `internal/registry/registry.go` - Module registry

