# gab711-git/chequer-project architecture

> Architecture diagram of the GitHub repository gab711-git/chequer-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gab711-git/chequer-project
- Repository: https://github.com/gab711-git/chequer-project

## Overview

CHEQUER demonstrates two training-data poisoning attacks, scans suspect MNIST data against a clean reference model before training, and measures the effect of removing flagged samples. Its dashboard and cheque demo make the attack and defense results interactive and concrete. The README documents additional detector comparisons; some dashboard internals are only partially sampled, so uncertain call wiring is omitted.

Main entry points: [`detect.py`](https://github.com/gab711-git/chequer-project/blob/main/detect.py) (Loss scanner), [`clean_retrain.py`](https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py) (Clean retraining), [`train.py`](https://github.com/gab711-git/chequer-project/blob/main/train.py) (Saved models), [`poison.py`](https://github.com/gab711-git/chequer-project/blob/main/poison.py) (Poison transforms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_attack["Attack and models"]
  node_poison["Poison transforms<br/>[poison.py]"]
  node_train["Model training<br/>[train.py]"]
  node_model_files["Saved models<br/>[train.py]"]
end

subgraph group_scan["Pretraining scanner"]
  node_detect["Loss scanner<br/>[detect.py]"]
  node_flags["Flagged indices<br/>[detect.py]"]
  node_alternatives["Detector comparisons<br/>[detect.py]"]
end

subgraph group_defense["Defense evaluation"]
  node_retrain["Clean retraining<br/>[clean_retrain.py]"]
  node_defended_model["Defended models<br/>[clean_retrain.py]"]
  node_evaluation["Defense metrics<br/>[clean_retrain.py]"]
end

subgraph group_demo["Fraud demonstrations"]
  node_proof["Attack proof<br/>[attack_proof.py]"]
  node_cheque["Cheque demo<br/>[cheque_demo.py]"]
  node_dashboard["Interactive dashboard<br/>[app.py]"]
  node_cheque_image["Cheque template"]
end

node_operator(("Researcher"))
node_mnist["MNIST data"]

node_operator -->|"runs training"| node_train
node_mnist -->|"supplies samples"| node_poison
node_train -->|"builds training data"| node_poison
node_poison -->|"returns poisoned data"| node_train
node_train -->|"saves models"| node_model_files
node_operator -->|"runs scan"| node_detect
node_mnist -->|"supplies suspect data"| node_detect
node_detect -->|"constructs poisoned set"| node_poison
node_model_files -->|"provides clean reference"| node_detect
node_detect -->|"writes indices"| node_flags
node_detect -->|"compares detectors"| node_alternatives
node_operator -->|"runs defense"| node_retrain
node_mnist -->|"supplies training data"| node_retrain
node_retrain -->|"rebuilds poisoned set"| node_poison
node_flags -->|"selects removals"| node_retrain
node_retrain -->|"saves retrained models"| node_defended_model
node_retrain -->|"measures accuracy and trigger success"| node_evaluation
node_operator -->|"runs attack proof"| node_proof
node_mnist -->|"supplies test data"| node_proof
node_model_files -->|"provides attack models"| node_proof
node_operator -->|"runs cheque demo"| node_cheque
node_mnist -->|"supplies digit samples"| node_cheque
node_model_files -->|"provides poisoned model"| node_cheque
node_defended_model -->|"provides defended model"| node_cheque
node_cheque_image -->|"provides template"| node_cheque
node_operator -->|"opens dashboard"| node_dashboard
node_mnist -->|"supplies data"| node_dashboard
node_model_files -->|"provides reference and attack models"| node_dashboard
node_defended_model -->|"provides defended model"| node_dashboard
node_cheque_image -->|"provides template"| node_dashboard

click node_poison "https://github.com/gab711-git/chequer-project/blob/main/poison.py"
click node_train "https://github.com/gab711-git/chequer-project/blob/main/train.py"
click node_model_files "https://github.com/gab711-git/chequer-project/blob/main/train.py"
click node_detect "https://github.com/gab711-git/chequer-project/blob/main/detect.py"
click node_flags "https://github.com/gab711-git/chequer-project/blob/main/detect.py"
click node_alternatives "https://github.com/gab711-git/chequer-project/blob/main/detect.py"
click node_retrain "https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py"
click node_defended_model "https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py"
click node_evaluation "https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py"
click node_proof "https://github.com/gab711-git/chequer-project/blob/main/attack_proof.py"
click node_cheque "https://github.com/gab711-git/chequer-project/blob/main/cheque_demo.py"
click node_dashboard "https://github.com/gab711-git/chequer-project/blob/main/app.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_poison,node_train,node_model_files toneBlue
class node_detect,node_flags,node_alternatives toneAmber
class node_retrain,node_defended_model,node_evaluation toneMint
class node_proof,node_cheque,node_dashboard,node_cheque_image toneRose
class node_operator,node_mnist toneIndigo
```

## Components

### Attack and models

- [Poison transforms](https://github.com/gab711-git/chequer-project/blob/main/poison.py): `poison.py`
- [Model training](https://github.com/gab711-git/chequer-project/blob/main/train.py): `train.py`
- [Saved models](https://github.com/gab711-git/chequer-project/blob/main/train.py): `train.py`

### Pretraining scanner

- [Loss scanner](https://github.com/gab711-git/chequer-project/blob/main/detect.py): `detect.py`
- [Flagged indices](https://github.com/gab711-git/chequer-project/blob/main/detect.py): `detect.py`
- [Detector comparisons](https://github.com/gab711-git/chequer-project/blob/main/detect.py): `detect.py`

### Defense evaluation

- [Clean retraining](https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py): `clean_retrain.py`
- [Defended models](https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py): `clean_retrain.py`
- [Defense metrics](https://github.com/gab711-git/chequer-project/blob/main/clean_retrain.py): `clean_retrain.py`

### Fraud demonstrations

- [Attack proof](https://github.com/gab711-git/chequer-project/blob/main/attack_proof.py): `attack_proof.py`
- [Cheque demo](https://github.com/gab711-git/chequer-project/blob/main/cheque_demo.py): `cheque_demo.py`
- [Interactive dashboard](https://github.com/gab711-git/chequer-project/blob/main/app.py): `app.py`
- **Cheque template**

### Other components

- **Researcher**
- **MNIST data**

## Connections

- Researcher → Model training: runs training
- MNIST data → Poison transforms: supplies samples
- Model training → Poison transforms: builds training data
- Poison transforms → Model training: returns poisoned data
- Model training → Saved models: saves models
- Researcher → Loss scanner: runs scan
- MNIST data → Loss scanner: supplies suspect data
- Loss scanner → Poison transforms: constructs poisoned set
- Saved models → Loss scanner: provides clean reference
- Loss scanner → Flagged indices: writes indices
- Loss scanner → Detector comparisons: compares detectors
- Researcher → Clean retraining: runs defense
- MNIST data → Clean retraining: supplies training data
- Clean retraining → Poison transforms: rebuilds poisoned set
- Flagged indices → Clean retraining: selects removals
- Clean retraining → Defended models: saves retrained models
- Clean retraining → Defense metrics: measures accuracy and trigger success
- Researcher → Attack proof: runs attack proof
- MNIST data → Attack proof: supplies test data
- Saved models → Attack proof: provides attack models
- Researcher → Cheque demo: runs cheque demo
- MNIST data → Cheque demo: supplies digit samples
- Saved models → Cheque demo: provides poisoned model
- Defended models → Cheque demo: provides defended model
- Cheque template → Cheque demo: provides template
- Researcher → Interactive dashboard: opens dashboard
- MNIST data → Interactive dashboard: supplies data
- Saved models → Interactive dashboard: provides reference and attack models
- Defended models → Interactive dashboard: provides defended model
- Cheque template → Interactive dashboard: provides template
