Richard Osborne
7bd9b4c3e6
feat(sprint-2): STYLE-005 StyleAnalyzer tests + UBA-005 UBAClient HTTP service
- STYLE-005: 19 unit tests for StyleAnalyzer (toSuggestions, analyzeProject, analyzeNode)
- toSuggestions: ordering, message format, id format, acceptLabel variants
- analyzeProject: repeated color/spacing detection, threshold enforcement, var() skip, tokenModel matching
- analyzeNode: variant candidate detection, threshold, var() reference exclusion
- STYLE-005: Wire tests into test index (new tests/models/ and tests/services/ indexes)
- UBA-005: UBAClient static class with configure(), health(), openDebugStream()
- Full auth support: bearer, api_key (custom header), basic
- Timeout via AbortController (10s default)
- health() never throws — always returns HealthResult
- openDebugStream() returns DebugStreamHandle; handles named SSE event types
- UBAClientError with status + body for non-2xx responses
2026-02-18 19:58:30 +01:00
..
2025-12-08 16:19:56 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2024-12-29 10:01:32 +01:00
2026-02-18 19:58:30 +01:00
2026-02-18 19:58:30 +01:00
2026-01-08 13:27:38 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2026-02-18 15:59:52 +01:00
2026-02-18 15:59:52 +01:00
2024-01-26 11:52:55 +01:00
2025-12-08 16:19:56 +01:00