# Orchestrator Usage

This service provides robust phase-based sequencing with automatic checkpointing and per-phase retry policy. 

## Usage (Programmatic)

```
ts
import { SequentialOrchestrator } from './src/backend/services/SequentialOrchestrator';

const orchestrator = new SequentialOrchestrator({
  phases: [
    { name: 'one', run: async () => { /* logic */ }, retry: 2, backoffMs: 250 },
    { name: 'two', run: async () => { /* logic */ }},
    // ...more phases
  ],
  checkpointPath: 'data/orchestrator-checkpoint.json', // optional, default as shown
  input: {...}, // input passed to each phase
});

await orchestrator.run(); // Runs/resumes from last incomplete phase, checkpointing after each attempt
```

## Features
- **Sequential phases**: Executes provided phases in-order.
- **Per-phase retry & backoff**: Configure max attempts and delay for each phase.
- **Checkpointing**: Persists after every attempt (success/failure/attempt #, timestamp, error message if fail).
- **Restart-safe**: Can safely resume after crash/restart, picks up at last incomplete phase.
- **Minimal callable interface**: Import and use from your own services or app code.

## Checkpoint Schema
See `src/backend/services/SequentialOrchestrator.ts` for full type:
- `currentPhase`: index of next phase to execute
- `phaseResults[]`: history of all attempts on every phase
- `inProgress`: true if incomplete (failed phase, retries exhausted)

## Testing
Run:

```
npm test
```

See source: `src/backend/tests/orchestrator.test.ts` for coverage: execution order, retry, checkpoint, resume.
