9 Commits
Author SHA1 Message Date
dextmorgn 6b01f108f4 Merge remote-tracking branch 'origin/main' into chore/lint-ci-hooks
# Conflicts:
#	flowsint-enrichers/src/flowsint_enrichers/phone/to_infos.py
#	uv.lock
2026-08-26 00:31:03 +02:00
dextmorgn 578393174a chore: drop GPLv3 deps (holehe, pydig, ignorant) and unused hibpwned
holehe/pydig/hibpwned were declared but never imported anywhere in the
codebase. ignorant was the only one actually used, by IgnorantEnricher
(phone_to_infos) — removed along with it. Eliminates all GPLv3
exposure from the dependency tree; remaining LGPL/MPL deps
(psycopg2-binary, stem, pycountry, certifi) are unmodified
weak-copyleft libs used as plain imports, no distribution obligation.
2026-08-25 16:25:35 +02:00
dextmorgn 7dee76719e chore: sync uv.lock package versions to 1.2.11 2026-08-25 09:40:14 +02:00
dextmorgn 61f7112648 fix(ci): make ruff resolvable from the repo root
make lint/lint-fix run \`uv run ruff\` from the workspace root, but
ruff was only declared in each package's own dev-dependency group —
never in the root project's. Worked locally by accident (shared venv
carried leftovers from earlier per-package syncs); a fresh CI clone
hit "Failed to spawn: ruff". Declare it in the root dev group too.
2026-08-25 09:33:35 +02:00
dextmorgn 8b49497965 build(python): replace black+isort+flake8 with ruff
One tool instead of three, one config instead of four duplicated
blocks. black/isort/flake8 dropped from every package's dev deps,
ruff added once; .flake8 deleted, [tool.black]/[tool.isort] blocks
deleted from all 4 sub-package pyproject.toml files.

Config lives once, at the workspace root: ruff walks up from any file
it's checking until it finds a pyproject.toml with a [tool.ruff]
table (verified empirically — a package's own pyproject.toml lacking
that table doesn't stop the search), so the root-level [tool.ruff]
applies to all four packages without duplication. That's the one real
win over the old per-package black/isort blocks, which had to be
copy-pasted four times and kept in sync by hand.

Same rule surface as before, not more: select = E/F/W/I (pycodestyle
+ pyflakes + isort-equivalent), matching exactly what flake8 checked.
ruff has other rule groups (UP/pyupgrade, B/bugbear) that would
surface real things — deliberately left off. Turning those on finds
new debt and is a separate decision with its own diff to review, not
a side effect of swapping the tool underneath an unchanged rule set.
Same E501 exclusion carried over too, same reasoning: the formatter
is the sole authority on line length.

known-first-party carries over unchanged (same isort concern this
repo already fixed once — see "app" vs "flowsint_api" in the ratchet
history) and the wildcard-import per-file-ignore for
flowsint_core/__init__.py still applies, verified directly.

Six files reformatted by `ruff format` where it disagreed with black
on edge cases (import grouping, ternary line-breaking, blank lines
after a class statement) — all cosmetic, no behavior change, reviewed
diff by diff. One real ruff-check finding (an import block ruff's
isort-equivalent wanted sorted differently) — took ruff check --fix.

Verified: `make lint` clean, `make test` green (all 4 packages),
lint-staged tested with a real staged-file run (not just config
inspection) to confirm `uv run ruff format` / `uv run ruff check --fix`
actually execute, mypy ratchet target unaffected (still fires on its
own pre-existing backlog, unrelated to this change).
2026-08-25 09:33:34 +02:00
dextmorgn 1f57cb0904 fix(security): bump dompurify and cryptography to patched versions
- dompurify 3.3.0 → 3.4.11 (XSS bypass CVEs via tiptap)
- cryptography 46.0.7 → 48.0.1 (vulnerable OpenSSL in wheels)
2026-06-21 16:39:21 +02:00
dextmorgn 71e3a68830 fix(core): declare pyyaml dependency
flowsint_core imports yaml (template_generator_service, yaml_loader)
but never declared it — present locally only as a leftover in the
shared venv. CI's clean resolve exposed the missing declaration.
2026-06-05 15:10:18 +02:00
dextmorgn 9fcc60ca63 fix(deps): upgrade Python dependencies to patch 27 known vulnerabilities
pip-audit reported 27 vulnerabilities across 12 packages, including
cryptography PYSEC-2026-36 (CVSS 9.8) used by the vault, a starlette
Host-header path bypass, and python-multipart arbitrary file write.

- cryptography 45.0.7 -> 46.0.7 (pin was capped at <46)
- fastapi 0.115 -> 0.136, pulling starlette 0.46 -> 1.2
- python-multipart 0.0.20 -> 0.0.32
- pyjwt, urllib3, aiohttp, lxml, idna, mako and transitive bumps
- dev tools: pytest 8 -> 9 (requires pytest-httpx >=0.36), black 25 -> 26

All four module test suites pass (458 tests). pip-audit now reports
no known vulnerabilities.
2026-06-05 08:57:19 +02:00
dextmorgn 85a85ed541 chore: switch to uv 2026-04-11 13:17:14 +02:00