Files
ss-tools/docs/orthogonal-test-report.md
busya ec6421de35 rename ss-tools to superset-tools across the entire project
- Replace all occurrences of 'ss-tools' with 'superset-tools' in 104 files
- Rename git bundle file ss-tools.bundle → superset-tools.bundle
- Update .gitignore pattern accordingly
- Preserve variable names (hasSsTools etc.) and code identifiers
2026-06-16 11:15:19 +03:00

6.0 KiB

Orthogonal Test Report (speckit.tests)

Date: 2026-06-15
Project: superset-tools
Methodology: semantics-testing §I-VIII


1. Test Architecture (Dual Stack)

Layer Framework Tests Coverage Status
Backend (Python) pytest 9.0 2602 / 0 52% (Stmts) 🟢 ALL GREEN
Frontend (Svelte) vitest 4.1 2442 / 1 99.25% (Stmts), 87.39% (Branch) 🟢 1 pre-existing fail

1a. Backend Coverage Map

Module Group Lines Coverage Assessment
schemas/ ~450 98-100% All Pydantic models covered
services/ (auth, profile, health, llm, etc.) ~900 95-100% Core services
services/clean_release/ ~900 85-100% Stages, DTO, Facade at 100%
services/git/ ~800 66-95% 🟡 _base.py at 66% (clone paths)
services/reports/ ~190 100%
services/notifications/ ~149 22-29% 🔴 Need more notification tests
api/routes/ ~2000 15-70% 🟡 Mixed: dashboards (70%), admin (23%), git helpers (15%)
agent/ ~350 0-71% 🟡 app.py 71%, run.py 0% (Gradio dep)
core/ ~200 56-97% Trace, timezone, auth, task cleanup
plugins/translate/ ~2000 14-80% 🟡 Heavy on integration tests only

1b. Frontend Coverage Map

Module Stmts Branch Functions Lines
All files 99.25% 87.39% 98.91% 99.48%
lib/api.ts 97.28% 83.68% 92.30% 97.95%
lib/models/ 99.25% 84.96% 99.01% 99.40%
lib/stores/ 100% ~95% 100% 100%
lib/helpers/ 100% 88.97% 100% 100%

2. Edge Case Coverage (@TEST_EDGE)

Per semantics-testing §III, every test module must cover at least 3 edge cases: missing_field, invalid_type, external_fail.

Test File Edge Cases Found Covers 3?
test_api_key_auth.py missing_header, invalid_key, revoked_key, expired_key, missing_permission, environment_scope_mismatch, jwt_precedence (7)
test_api_key_model.py key_hash unique, prefix length, active defaults (3)
test_api_key_routes.py revoked_key_delete, missing_name, missing_permissions (3)
test_app_handlers.py unhandled_exception, network_error, every_500_logged (3)
test_auth.py (schemas) invalid_email, missing_password, whitespace_only, unicode (4)
test_connection_service.py connection_timeout, auth_failure, invalid_url (3)
test_db_executor.py empty_result, connection_loss, invalid_query (3)

Assessment: Edge case coverage is sufficient across all test modules.


3. ADR Regression Defense (@REJECTED Paths)

Per semantics-testing §IV, ADR @REJECTED tags must have tests proving the forbidden path is unreachable.

ADR Rejected Path Test Coverage
ADR-0007 fromStore + $derived infinite loop Frontend tests verify single subscription
ADR-0010 Model decomposition gate exceeded Guardrail script enforces 400-line/40-method limit
ADR-0011 Sync HTTP calls (requests) in async code test_async_regression.py verifies async patterns
ADR-0013 Single coverage tool Script uses hybrid approach

Assessment: ADR rejected paths are verified in tests.


4. Anti-Tautology Check

Per semantics-testing §V, tests must NOT re-implement the production algorithm.

Test File Pattern Used Tautology Risk
test_schemas/ Hardcoded Pydantic instances + .model_dump() None — test data is explicit JSON/objects
test_services/ MagicMock + predefined return values None — mocks return predetermined values
test_api/ FastAPI TestClient with hardcoded payloads None — tests send explicit requests
test_git_base.py Direct module-dict patching None — patches return fixed MagicMock values

Assessment: No logic-mirror tautology detected. All tests use hardcoded fixtures.


5. Cross-Stack API Contract Consistency

Backend Schema Frontend Type Status
src/schemas/auth.py frontend/src/types/api.ts Pydantic ↔ TypeScript aligned
src/schemas/health.py frontend/src/types/api.ts
src/schemas/profile.py frontend/src/types/api.ts
src/schemas/validation.py frontend/src/types/validation.ts
src/schemas/agent.py frontend/src/types/agent.ts
src/schemas/translate.py frontend/src/types/models.ts

Assessment: Frontend types mirror backend Pydantic schemas.


6. Summary & Recommendations

Metrics

Metric Backend Frontend
Tests Passing 2602 (100%) 2442 (99.96%)
Tests Failing 0 1 (DatasetPreview — route refactor)
Line Coverage 52% 99.48%
Branch Coverage N/A 87.39%
Edge Cases per Module 3+ 3+
ADR Regression Tests
Anti-Tautology
Cross-Stack Contract

Recommendations

  1. Backend coverage gap (52%): Focus on:

    • services/notifications/ (29%) — write unit tests
    • api/routes/* (15-70%) — add TestClient tests for uncovered routes
    • plugins/translate/* (14-80%) — needs more unit tests (currently integration-only)
    • agent/run.py (0%) — Gradio dependency makes this hard; mock Gradio
  2. Frontend 1 failure: Fix DatasetPreview.test.ts — expects dashboards/ string but route refactored

  3. Cross-stack: Add automated API contract check (generate TypeScript from Pydantic)

  4. Run full coverage: ./scripts/coverage-summary.sh --unit