# Issue #166: Stitcher Module Structure

## Objective

Create the mosaic-stitcher module - the workflow orchestration layer that wraps OpenClaw.

## Prerequisites

- #165 (BullMQ module) complete - BullMqService available
- #164 (Database schema) complete - RunnerJob, JobStep, JobEvent models available

## Responsibilities

- Receive webhooks from @mosaic bot
- Apply Guard Rails (capability permissions)
- Apply Quality Rails (mandatory gates)
- Track all job steps and events
- Dispatch work to OpenClaw with constraints

## Approach

1. Examine existing module patterns (tasks, events, brain)
2. RED: Write failing tests for StitcherService and StitcherController
3. GREEN: Implement minimal code to pass tests
4. REFACTOR: Clean up and improve code quality
5. Verify quality gates pass

## Progress

- [x] Create scratchpad
- [x] Examine existing module patterns
- [x] Create directory structure
- [x] RED: Write StitcherService tests
- [x] RED: Write StitcherController tests
- [x] GREEN: Implement StitcherService
- [x] GREEN: Implement StitcherController
- [x] Create DTOs and interfaces
- [x] Create StitcherModule
- [x] Register in AppModule
- [x] REFACTOR: Improve code quality
- [x] Run quality gates (typecheck, lint, build, test)
- [x] Commit changes

## Quality Gates Results

- **Typecheck**: PASS
- **Lint**: PASS
- **Build**: PASS
- **Tests**: PASS (12 tests passing)

## Patterns Observed

- BullMqService is @Global() and provides queue management
- Controllers use @UseGuards(AuthGuard, WorkspaceGuard, PermissionGuard)
- DTOs use class-validator decorators
- Services inject PrismaService for database operations
- Modules follow: imports, controllers, providers, exports structure
- Tests use Jest with describe/it blocks

## Testing

- Unit tests for StitcherService
- Unit tests for StitcherController
- Integration test for webhook endpoint

## Implementation Details

### Files Created

1. `apps/api/src/stitcher/stitcher.module.ts` - Module definition
2. `apps/api/src/stitcher/stitcher.service.ts` - Core orchestration service
3. `apps/api/src/stitcher/stitcher.controller.ts` - Webhook and dispatch endpoints
4. `apps/api/src/stitcher/dto/webhook.dto.ts` - Request/response DTOs
5. `apps/api/src/stitcher/dto/index.ts` - DTO barrel export
6. `apps/api/src/stitcher/interfaces/job-dispatch.interface.ts` - Job dispatch interfaces
7. `apps/api/src/stitcher/interfaces/index.ts` - Interface barrel export
8. `apps/api/src/stitcher/index.ts` - Module barrel export
9. `apps/api/src/stitcher/stitcher.service.spec.ts` - Service unit tests
10. `apps/api/src/stitcher/stitcher.controller.spec.ts` - Controller unit tests

### Key Features Implemented

- **Webhook endpoint**: POST /stitcher/webhook - Receives webhooks from @mosaic bot
- **Job dispatch**: POST /stitcher/dispatch - Manual job dispatch
- **Guard Rails**: applyGuardRails() - Capability permission checks
- **Quality Rails**: applyQualityRails() - Mandatory gate determination
- **Event tracking**: trackJobEvent() - Audit log for all job events

### TDD Process

1. **RED**: Created failing tests for service and controller
2. **GREEN**: Implemented minimal code to pass tests
3. **REFACTOR**: Fixed TypeScript strict mode issues with exactOptionalPropertyTypes

### Integration

- Registered StitcherModule in AppModule
- Imports PrismaModule and BullMqModule
- Exports StitcherService for use in other modules

## Notes
