Jason Woltje
efe624e2c1
feat(#168): Implement job steps tracking
Implement JobStepsModule for granular step tracking within runner jobs.
Features:
- Create and track job steps (SETUP, EXECUTION, VALIDATION, CLEANUP)
- Track step status transitions (PENDING → RUNNING → COMPLETED/FAILED)
- Record token usage for AI_ACTION steps
- Calculate step duration automatically
- GET endpoints for listing and retrieving steps
Implementation:
- JobStepsService: CRUD operations, status tracking, duration calculation
- JobStepsController: GET /runner-jobs/:jobId/steps endpoints
- DTOs: CreateStepDto, UpdateStepDto with validation
- Full unit test coverage (16 tests)
Quality gates:
- Build: ✅ Passed
- Lint: ✅ Passed
- Tests: ✅ 16/16 passed
- Coverage: ✅ 100% statements, 100% functions, 100% lines, 83.33% branches
Also fixed pre-existing TypeScript strict mode issue in job-events DTO.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 21:16:23 -06:00
..
2026-02-01 20:52:43 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-01-31 22:53:47 -06:00
2026-01-31 22:53:47 -06:00
2026-01-31 22:53:47 -06:00
2026-01-31 22:53:47 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:16:23 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 21:09:03 -06:00
2026-02-01 20:52:43 -06:00