Changelog
All notable changes to this project are documented here. The format follows Keep a Changelog and the project uses Semantic Versioning.
[Unreleased]
[1.1.2] - 2026-10-03
Changed
- Repository renamed to
rakshit-737/feint-adversarial-ids: repo, docs (https://rakshit-737.github.io/feint-adversarial-ids/), badge, citation and package URLs updated; the container image is nowghcr.io/rakshit-737/feint-adversarial-ids. Older entries below keep the pre-rename names (rakshit-737/feint,ghcr.io/rakshit-737/feint).
[1.1.2] - 2026-10-03
Changed
- Repository renamed to
rakshit-737/feint-adversarial-ids. All links, badges, CITATION.cff, mkdocs, pyproject URLs and the paper now point to https://github.com/rakshit-737/feint-adversarial-ids and https://rakshit-737.github.io/feint-adversarial-ids/; the container image is now published asghcr.io/rakshit-737/feint-adversarial-ids. Older entries below keep the old names as history.
[1.1.1] - 2026-10-03
Changed
- Moustafa & Slay 2016 DT figures (85.56 % / FAR 15.78 %) now marked unverified in README, paper and reproduction output: no legitimate open copy or open secondary source restating them was found.
[1.1.0] - 2026-10-03
Added
- Datasets: CSE-CIC-IDS2018 (three days used; all ten SHA-256 pinned from CI downloads whose size
and S3 multipart ETag were verified,
download_cicids2018.py --print-pins), corrected CIC-IDS2017 (Engelen et al. 2021 / Liu et al. 2022), CICIoT2023 ipfixprobe subsample. feint xdatacross-dataset study (corrected CIC-IDS2017 <-> CSE-CIC-IDS2018, 5 seeds).feint ablate: paired schema ablations over 5 seeds (kNN sanitiser in robust-feature space vs all features; adversarial training on schema-constrained vs textbook examples).feint repro: Moustafa & Slay 2016 and Sharafaldin et al. 2018 reproductions, the latter also on the corrected CIC-IDS2017 and with a regularised-QDA variant labelled as a deviation.- A2PM reproduction (Vitorino et al. 2022),
scripts/repro_a2pm.py/ bench studyrepro-a2pmon Python 3.11: the paper's RF and Keras MLP, 50-iteration targeted and untargeted attacks with scores after every iteration. a2pm's per-value loops are replaced by vectorised pattern subclasses that every run checks against the library (transform level and end to end). A run with the library's own transforms is kept as a cross-check. - Dashboard screenshot in the README hero and on the docs home page.
feint seeds --adv --poison: adversarial training and poisoning with 5-seed CIs.bench.ymlworkflow for every heavy study;paper.ymlbuilds the preprint draft inpaper/.- Docs: Evaluation and Reproduce pages, dashboard over all datasets; CITATION.cff, templates.
Changed
- Headline numbers are now 5-seed means with CIs (they moved by up to 0.07 from the seed-0 table).
- Hardened tree models are attacked through both the undefended and the hardened MLP.
- Corrected claims: budget semantics (constrained and textbook attacks are not budget-matched), defender-favourable schema assumptions, UNSW derived-feature agreement, Sharafaldin setup.
- Docstrings and full type hints on every public function and method of the
feintpackage (109 of 109); ruff now enforces pydocstyle (Google convention) and flake8-annotations onfeint/. bench.ymlstudy steps fail on a failing pipeline (pipefail).
Fixed
- Download helper: single stream, per-destination lock, size and hash checks; a corrupted local CSE-CIC-IDS2018 file produced by two concurrent downloaders was deleted and never used.
- API input validation, data root default, single-threaded RF scoring, release notes extraction, sdist fixtures.
[1.0.0] - 2026-09-26
Added
feint seeds: multi-seed robustness study with 95 % Student-t CIs (and Wilson intervals); 3-seed results for CIC-IDS2017 and UNSW-NB15 inresults/*/seeds.{json,md}.feint steal: model-stealing study (label-only queries -> transfer attack); UNSW-NB15 results.- MkDocs Material docs site on GitHub Pages with a static results dashboard (
/demo/). - Dockerfile (slim, non-root), docker-compose for the scoring API, release workflow publishing
ghcr.io/rakshit-737/feintand wheel/sdist onv*tags.
Changed
- Architecture mermaid labels quoted; README limitations/roadmap updated.
[0.2.0] - 2026-09-26
Added
- Real data: CIC-IDS2017 (MachineLearningCVE, 2,830,743 flows) and UNSW-NB15 (official 175,341 / 82,332 partition) loaders, with SHA-256-verified, resumable download scripts.
- Declarative domain-constraint schemas (
feint/schema.py) for both datasets: monotone, range-bounded, integer, fixed and derived features plus cross-feature relations. - Detector ensemble: XGBoost + MLP (supervised) OR a benign-trained autoencoder (unsupervised); logistic regression, random forest and IsolationForest baselines.
- Attacks: white-box PGD, score-based black-box random search, and an adaptive attack (transfer from a differentiable surrogate + black-box refinement) for trees and the ensemble. Unconstrained reference variants.
- Hardening: generic adversarial training (MLP and XGBoost), robust-feature models, an adversarial-input detector.
- Explanations: exact TreeSHAP (XGBoost native) and constraint-valid sparse counterfactuals.
- Poisoning: backdoor study with an attacker-controllable trigger and a robust-feature kNN training-set sanitiser.
- Temporal drift study on CIC-IDS2017 (train Monday-Wednesday, test Thursday-Friday).
- Markdown + PNG reports; FastAPI scoring/explanation service (
feint serve). - Real benchmark results in
results/cicids2017/andresults/unsw_nb15/. - LICENSE (MIT), CONTRIBUTING, CHANGELOG, ADRs in
docs/adr/.
Changed
- Robustness curves are monotone by construction (an attacker with budget eps may use any smaller budget's successful flow).
- Byte bounds follow payload semantics (CIC) and header-inclusive semantics (UNSW).
- CI runs ruff, the test suite, and a quick end-to-end smoke study.
Removed
- The synthetic-only
results/report.*from 0.1.0 (superseded by real-data results).
[0.1.0] - 2026-09-26
Added
- MVP on synthetic flows: MLP detector with analytic gradients, constrained PGD, adversarial training, IsolationForest backstop, base-rate precision, CLI, CI.