Jan 20, 10-11 AM (76)
Jan 20, 11-12 PM (34)
Jan 20, 12-1 PM (82)
Jan 20, 1-2 PM (73)
Jan 20, 2-3 PM (31)
Jan 20, 3-4 PM (32)
Jan 20, 4-5 PM (40)
Jan 20, 5-6 PM (36)
Jan 20, 6-7 PM (11)
Jan 20, 7-8 PM (20)
Jan 20, 8-9 PM (17)
Jan 20, 9-10 PM (16)
Jan 20, 10-11 PM (31)
Jan 20, 11-12 AM (22)
Jan 21, 12-1 AM (4)
Jan 21, 1-2 AM (5)
Jan 21, 2-3 AM (2)
Jan 21, 3-4 AM (4)
Jan 21, 4-5 AM (8)
Jan 21, 5-6 AM (3)
Jan 21, 6-7 AM (6)
Jan 21, 7-8 AM (16)
Jan 21, 8-9 AM (36)
Jan 21, 9-10 AM (58)
Jan 21, 10-11 AM (54)
Jan 21, 11-12 PM (52)
Jan 21, 12-1 PM (42)
Jan 21, 1-2 PM (32)
Jan 21, 2-3 PM (36)
Jan 21, 3-4 PM (26)
Jan 21, 4-5 PM (18)
Jan 21, 5-6 PM (11)
Jan 21, 6-7 PM (14)
Jan 21, 7-8 PM (27)
Jan 21, 8-9 PM (27)
Jan 21, 9-10 PM (6)
Jan 21, 10-11 PM (28)
Jan 21, 11-12 AM (25)
Jan 22, 12-1 AM (9)
Jan 22, 1-2 AM (12)
Jan 22, 2-3 AM (10)
Jan 22, 3-4 AM (6)
Jan 22, 4-5 AM (4)
Jan 22, 5-6 AM (2)
Jan 22, 6-7 AM (11)
Jan 22, 7-8 AM (21)
Jan 22, 8-9 AM (12)
Jan 22, 9-10 AM (19)
Jan 22, 10-11 AM (38)
Jan 22, 11-12 PM (27)
Jan 22, 12-1 PM (23)
Jan 22, 1-2 PM (39)
Jan 22, 2-3 PM (14)
Jan 22, 3-4 PM (43)
Jan 22, 4-5 PM (40)
Jan 22, 5-6 PM (22)
Jan 22, 6-7 PM (6)
Jan 22, 7-8 PM (16)
Jan 22, 8-9 PM (17)
Jan 22, 9-10 PM (14)
Jan 22, 10-11 PM (37)
Jan 22, 11-12 AM (32)
Jan 23, 12-1 AM (8)
Jan 23, 1-2 AM (16)
Jan 23, 2-3 AM (6)
Jan 23, 3-4 AM (6)
Jan 23, 4-5 AM (4)
Jan 23, 5-6 AM (5)
Jan 23, 6-7 AM (6)
Jan 23, 7-8 AM (16)
Jan 23, 8-9 AM (35)
Jan 23, 9-10 AM (50)
Jan 23, 10-11 AM (54)
Jan 23, 11-12 PM (129)
Jan 23, 12-1 PM (30)
Jan 23, 1-2 PM (30)
Jan 23, 2-3 PM (35)
Jan 23, 3-4 PM (55)
Jan 23, 4-5 PM (16)
Jan 23, 5-6 PM (37)
Jan 23, 6-7 PM (46)
Jan 23, 7-8 PM (33)
Jan 23, 8-9 PM (13)
Jan 23, 9-10 PM (8)
Jan 23, 10-11 PM (26)
Jan 23, 11-12 AM (24)
Jan 24, 12-1 AM (28)
Jan 24, 1-2 AM (4)
Jan 24, 2-3 AM (11)
Jan 24, 3-4 AM (4)
Jan 24, 4-5 AM (3)
Jan 24, 5-6 AM (0)
Jan 24, 6-7 AM (4)
Jan 24, 7-8 AM (2)
Jan 24, 8-9 AM (1)
Jan 24, 9-10 AM (2)
Jan 24, 10-11 AM (7)
Jan 24, 11-12 PM (4)
Jan 24, 12-1 PM (2)
Jan 24, 1-2 PM (1)
Jan 24, 2-3 PM (10)
Jan 24, 3-4 PM (12)
Jan 24, 4-5 PM (5)
Jan 24, 5-6 PM (13)
Jan 24, 6-7 PM (3)
Jan 24, 7-8 PM (3)
Jan 24, 8-9 PM (6)
Jan 24, 9-10 PM (3)
Jan 24, 10-11 PM (25)
Jan 24, 11-12 AM (23)
Jan 25, 12-1 AM (0)
Jan 25, 1-2 AM (3)
Jan 25, 2-3 AM (0)
Jan 25, 3-4 AM (1)
Jan 25, 4-5 AM (1)
Jan 25, 5-6 AM (1)
Jan 25, 6-7 AM (1)
Jan 25, 7-8 AM (1)
Jan 25, 8-9 AM (1)
Jan 25, 9-10 AM (3)
Jan 25, 10-11 AM (0)
Jan 25, 11-12 PM (1)
Jan 25, 12-1 PM (7)
Jan 25, 1-2 PM (6)
Jan 25, 2-3 PM (12)
Jan 25, 3-4 PM (12)
Jan 25, 4-5 PM (2)
Jan 25, 5-6 PM (1)
Jan 25, 6-7 PM (2)
Jan 25, 7-8 PM (9)
Jan 25, 8-9 PM (5)
Jan 25, 9-10 PM (6)
Jan 25, 10-11 PM (21)
Jan 25, 11-12 AM (22)
Jan 26, 12-1 AM (11)
Jan 26, 1-2 AM (13)
Jan 26, 2-3 AM (15)
Jan 26, 3-4 AM (8)
Jan 26, 4-5 AM (4)
Jan 26, 5-6 AM (0)
Jan 26, 6-7 AM (4)
Jan 26, 7-8 AM (9)
Jan 26, 8-9 AM (48)
Jan 26, 9-10 AM (34)
Jan 26, 10-11 AM (16)
Jan 26, 11-12 PM (23)
Jan 26, 12-1 PM (44)
Jan 26, 1-2 PM (29)
Jan 26, 2-3 PM (33)
Jan 26, 3-4 PM (21)
Jan 26, 4-5 PM (27)
Jan 26, 5-6 PM (18)
Jan 26, 6-7 PM (16)
Jan 26, 7-8 PM (12)
Jan 26, 8-9 PM (19)
Jan 26, 9-10 PM (10)
Jan 26, 10-11 PM (29)
Jan 26, 11-12 AM (37)
Jan 27, 12-1 AM (14)
Jan 27, 1-2 AM (4)
Jan 27, 2-3 AM (4)
Jan 27, 3-4 AM (20)
Jan 27, 4-5 AM (2)
Jan 27, 5-6 AM (1)
Jan 27, 6-7 AM (9)
Jan 27, 7-8 AM (22)
Jan 27, 8-9 AM (26)
Jan 27, 9-10 AM (26)
Jan 27, 10-11 AM (32)
3,084 commits this week Jan 20, 2026 - Jan 27, 2026
test(uplc-evaluator): add 26 integration tests covering full interface
Validate service behavior across all specified scenarios: textual and flat-encoded programs, error handling (empty files, invalid syntax, malformed UUIDs), file filtering (.uplc.txt vs other extensions), measurement data validation, concurrent job processing, whitespace handling, and processed file marker lifecycle.

Tests verify both successful evaluation paths and error conditions, ensuring robust operation under various input conditions.
test(uplc-evaluator): add integration test infrastructure
Create test harness for spawning service instances with temporary directories, managing process lifecycle, and coordinating file-based interactions. Includes helper functions for program submission, result polling, and JSON parsing with timeout handling.

Configure test suite for sequential execution (-N1) to avoid race conditions in file system operations and process cleanup.
feat(uplc-evaluator): implement file-based evaluation service
Create polling service that monitors input directory for UPLC programs, evaluates them with randomized parameters, collects performance metrics, and writes JSON results. Supports textual UPLC programs with UUID v4 job identification and automatic file lifecycle management (rename to .processed after evaluation).

Service includes basic validation, error handling, and configurable poll intervals for production deployment.
docs: remove deprecated single Docker image references
Remove all documentation and configuration references to the deprecated single Docker image deployment. From version 2.0.0, only Docker Compose deployment with separate service containers will be supported.

Changes:
- Update GitHub Actions description to list all component images instead of "All-in-one Image"
- Remove deprecation warning from README about single Docker image
- Update DockerHub link to organization page instead of deprecated image
- Clean up .gitignore comments to reflect Docker Compose profile files