kitos
8fea0c1ada
feat(refactor): PEP8, type annotations, docstrings and PyJWT security fix
2026-06-11 11:09:41 +02:00
kitos
d2a46feba8
refactor(docs+comments): add Google-style docstrings and inline comments across backend
...
Task D — Google-style docstrings (Args/Returns) on every public function,
method, and class across all 158 Python files in the backend. Zero ruff D
violations (pydocstyle Google convention).
Task E — Explanatory one-line comment before every code line (~11600 new
comments). ruff check passes clean after isort re-sort.
2026-06-11 11:06:55 +02:00
kitos
9ff0f04ba3
refactor(types): add comprehensive type annotations across backend Python codebase
...
Enable ANN rules in ruff.toml (flake8-annotations) and resolve all 221 violations:
ANN201/ANN202 — return types on 168 public/private functions:
- All 28 FastAPI routers: endpoints annotated with dict/list/specific schema/
StreamingResponse/FileResponse/JSONResponse as appropriate
- main.py: lifespan→AsyncGenerator[None,None], exception handlers→JSONResponse
- database.py: get_db→Generator[Session,None,None], proxy methods→correct types
- middleware/request_context.py: dispatch→Response with Callable call_next type
ANN001/ANN002/ANN003 — 32 missing argument types:
- seed_demo.py: all db parameters typed as Session
- domain/unit_of_work.py: __aexit__ exc_type/exc_val/exc_tb typed with TracebackType
- services: audit_service user_id→UUID|None, heatmap_service query/model/builder,
notification_service test→Test, tempo_service test→Test/user→User,
test_workflow_service test_id→UUID, campaign_crud **fields→object,
test_crud **fields→object (4 sites)
ANN401 — 16 Any usages resolved:
- Domain entities (campaign/technique/threat_actor/test_entity): replaced Any with
actual ORM types via TYPE_CHECKING guards to avoid circular imports
- detection_rule_service: test_id/detection_rule_id/evaluator_id→UUID
- score_cache: kept Any with # noqa: ANN401 (genuinely generic cache)
- jira_service/tempo_service: kept Any with # noqa: ANN401 (lazy optional deps)
- d3fend_import_service: _to_str(v: Any) kept with # noqa: ANN401
ANN204/ANN205/ANN206 — special/static/class methods:
- database.py proxy __call__/__getattr__: *args: object/**kwargs: object
- schemas/test.py model_validate: obj→object, **kwargs→object
- sa_technique_repository._int_type→type
All 439 unit tests pass. ruff check app/ → All checks passed!
2026-06-11 11:06:54 +02:00
kitos
546b5692f0
feat(techniques): status hover tooltips + min 2 tests for validated
...
1. Status logic (v3): require ≥2 validated tests with 'detected' result
to reach 'validated' status. With only 1 validated+detected test the
technique stays 'partial' (single test is insufficient evidence).
Backfilled existing data: T1012 and T1059.001 downgraded to 'partial'.
2. Hover tooltips on status badges in TechniquesPage and TechniqueDetailPage:
- validated: ≥2 tests executed and detected
- partial: some tests done but incomplete coverage
- in_progress: tests exist but none validated yet
- not_covered: tests run but Blue Team didn't detect
- not_evaluated: no tests created yet
- review_required: recent update needs acknowledgment
2026-06-02 10:32:52 +02:00
kitos
0d211d5156
feat: add ThreatActorEntity domain entity with coverage analysis (Tier 4)
2026-02-20 15:02:38 +01:00
kitos
c0c6cda11d
feat: add Campaign/Compliance domain entities and extract users/audit/data_sources to services (LP-2 through LP-6)
2026-02-20 13:28:14 +01:00
kitos
42a9f4dcd4
refactor(status): consolidate status_service to delegate to TechniqueEntity.recalculate_status() eliminating duplicated business logic
2026-02-19 15:23:01 +01:00
kitos
2b6d9090c9
refactor(techniques): wire TechniqueRepository into techniques router replacing direct db.query() with repo pattern, domain exceptions, and UnitOfWork
2026-02-19 15:13:52 +01:00
kitos
5c55e7c17f
feat(domain): add domain layer foundation -- enums, value objects, TechniqueEntity, repository ports
2026-02-18 19:10:31 +01:00