# bloodcounts/flaaa architecture

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

- Interactive diagram: https://gitdiagram.com/bloodcounts/flaaa
- Repository: https://github.com/bloodcounts/flaaa

## Overview

FLA³ combines Flower federated-learning orchestration with XACML-compatible authorization and access-filtered aggregation. The documented workflow is that SuperNodes communicate with SuperLink, which consults governance controls at federation lifecycle points; eligible results are filtered during aggregation. The PDP accepts decision requests, evaluates policy, and records audit data. The tree and excerpts support the PDP request path, custom Fleet checks, and FedMAP filtering, while the broader examples and several integration details are documented but not present in the supplied tree or sampled source; uncertain wiring is therefore omitted.

Main entry points: [`pdp/xacml/pdp.js`](https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/pdp.js) (XACML evaluator), [`superlink/start_custom_superlink.py`](https://github.com/bloodcounts/flaaa/blob/main/superlink/start_custom_superlink.py) (Custom SuperLink), [`superlink/custom_fleet/policy_enforcement_point.py`](https://github.com/bloodcounts/flaaa/blob/main/superlink/custom_fleet/policy_enforcement_point.py) (Policy enforcement), [`pdp/routes/decision.js`](https://github.com/bloodcounts/flaaa/blob/main/pdp/routes/decision.js) (Decision endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Federation orchestration"]
  node_superlink["Custom SuperLink"]
  node_fleet["Fleet servicer"]
end

subgraph group_governance["Policy governance"]
  node_pep["Policy enforcement"]
  node_pdpclient["Policy client"]
  node_pdpapp["PDP service<br/>[app.js]"]
  node_decisionroute["Decision endpoint<br/>[decision.js]"]
  node_audit["Decision audit<br/>[decisionLogger.js]"]
  node_auditdb[("Audit database<br/>[database.js]")]
end

subgraph group_evaluation["Policy evaluation"]
  node_policies["Policy files"]
  node_pdpengine["XACML evaluator<br/>[pdp.js]"]
  node_policyfinder["Policy finder<br/>[policyFinder.js]"]
  node_requestctx["Request context<br/>[inputParser.js]"]
  node_expressions["Expression evaluation"]
end

subgraph group_aggregation["Aggregation"]
  node_strategies["Filtered strategies"]
  node_fedmap["FedMAP filter"]
  node_fedavg["FedAvg filter"]
end

node_supernode(("SuperNode"))
node_training(("Federated training"))

node_superlink -->|"registers"| node_fleet
node_supernode -->|"sends Fleet RPCs"| node_fleet
node_fleet -->|"checks task approval"| node_pep
node_pep -->|"requests authorization"| node_pdpclient
node_pdpclient -->|"submits decision request"| node_pdpapp
node_pdpapp -->|"mounts route"| node_decisionroute
node_decisionroute -->|"evaluates request"| node_pdpengine
node_pdpengine -->|"parses context"| node_requestctx
node_pdpengine -->|"finds applicable policy"| node_policyfinder
node_policyfinder -->|"loads policy"| node_policies
node_pdpengine -->|"evaluates expressions"| node_expressions
node_decisionroute -->|"records decision"| node_audit
node_audit -->|"writes records"| node_auditdb
node_training -->|"starts federated run"| node_superlink
node_superlink -.->|"uses aggregation strategy"| node_strategies
node_strategies -->|"includes"| node_fedmap
node_strategies -->|"includes"| node_fedavg
node_fedmap -->|"checks participant eligibility"| node_pep
node_fedavg -.->|"checks participant eligibility"| node_pep
node_supernode -->|"submits results"| node_superlink

click node_superlink "https://github.com/bloodcounts/flaaa/blob/main/superlink/start_custom_superlink.py"
click node_fleet "https://github.com/bloodcounts/flaaa/blob/main/superlink/custom_fleet/custom_fleet_servicer.py"
click node_pep "https://github.com/bloodcounts/flaaa/blob/main/superlink/custom_fleet/policy_enforcement_point.py"
click node_pdpclient "https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/policyInformationPoint.js"
click node_pdpapp "https://github.com/bloodcounts/flaaa/blob/main/pdp/app.js"
click node_decisionroute "https://github.com/bloodcounts/flaaa/blob/main/pdp/routes/decision.js"
click node_pdpengine "https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/pdp.js"
click node_policyfinder "https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/finder/policyFinder.js"
click node_requestctx "https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/ctx/inputParser.js"
click node_expressions "https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/cond/expressionHandler.js"
click node_strategies "https://github.com/bloodcounts/flaaa/tree/main/aggregation-strategies/strategies"
click node_fedmap "https://github.com/bloodcounts/flaaa/blob/main/aggregation-strategies/strategies/fedmap_grid_with_filter.py"
click node_fedavg "https://github.com/bloodcounts/flaaa/blob/main/aggregation-strategies/strategies/fedavg_grid_with_filter.py"
click node_audit "https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/decisionLogger.js"
click node_auditdb "https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/database.js"

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_superlink,node_fleet toneBlue
class node_pep,node_pdpclient,node_pdpapp,node_decisionroute,node_audit,node_auditdb toneAmber
class node_policies,node_pdpengine,node_policyfinder,node_requestctx,node_expressions toneMint
class node_strategies,node_fedmap,node_fedavg toneRose
class node_supernode,node_training toneIndigo
```

## Components

### Federation orchestration

- [Custom SuperLink](https://github.com/bloodcounts/flaaa/blob/main/superlink/start_custom_superlink.py): `superlink/start_custom_superlink.py`
- [Fleet servicer](https://github.com/bloodcounts/flaaa/blob/main/superlink/custom_fleet/custom_fleet_servicer.py): `superlink/custom_fleet/custom_fleet_servicer.py`

### Policy governance

- [Policy enforcement](https://github.com/bloodcounts/flaaa/blob/main/superlink/custom_fleet/policy_enforcement_point.py): `superlink/custom_fleet/policy_enforcement_point.py`
- [Policy client](https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/policyInformationPoint.js): `pdp/utils/policyInformationPoint.js`
- [PDP service](https://github.com/bloodcounts/flaaa/blob/main/pdp/app.js): `pdp/app.js`
- [Decision endpoint](https://github.com/bloodcounts/flaaa/blob/main/pdp/routes/decision.js): `pdp/routes/decision.js`
- [Decision audit](https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/decisionLogger.js): `pdp/utils/decisionLogger.js`
- [Audit database](https://github.com/bloodcounts/flaaa/blob/main/pdp/utils/database.js): `pdp/utils/database.js`

### Policy evaluation

- **Policy files**
- [XACML evaluator](https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/pdp.js): `pdp/xacml/pdp.js`
- [Policy finder](https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/finder/policyFinder.js): `pdp/xacml/finder/policyFinder.js`
- [Request context](https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/ctx/inputParser.js): `pdp/xacml/ctx/inputParser.js`
- [Expression evaluation](https://github.com/bloodcounts/flaaa/blob/main/pdp/xacml/cond/expressionHandler.js): `pdp/xacml/cond/expressionHandler.js`

### Aggregation

- [Filtered strategies](https://github.com/bloodcounts/flaaa/tree/main/aggregation-strategies/strategies): `aggregation-strategies/strategies`
- [FedMAP filter](https://github.com/bloodcounts/flaaa/blob/main/aggregation-strategies/strategies/fedmap_grid_with_filter.py): `aggregation-strategies/strategies/fedmap_grid_with_filter.py`
- [FedAvg filter](https://github.com/bloodcounts/flaaa/blob/main/aggregation-strategies/strategies/fedavg_grid_with_filter.py): `aggregation-strategies/strategies/fedavg_grid_with_filter.py`

### Other components

- **SuperNode**
- **Federated training**

## Connections

- Custom SuperLink → Fleet servicer: registers
- SuperNode → Fleet servicer: sends Fleet RPCs
- Fleet servicer → Policy enforcement: checks task approval
- Policy enforcement → Policy client: requests authorization
- Policy client → PDP service: submits decision request
- PDP service → Decision endpoint: mounts route
- Decision endpoint → XACML evaluator: evaluates request
- XACML evaluator → Request context: parses context
- XACML evaluator → Policy finder: finds applicable policy
- Policy finder → Policy files: loads policy
- XACML evaluator → Expression evaluation: evaluates expressions
- Decision endpoint → Decision audit: records decision
- Decision audit → Audit database: writes records
- Federated training → Custom SuperLink: starts federated run
- Custom SuperLink → Filtered strategies: uses aggregation strategy
- Filtered strategies → FedMAP filter: includes
- Filtered strategies → FedAvg filter: includes
- FedMAP filter → Policy enforcement: checks participant eligibility
- FedAvg filter → Policy enforcement: checks participant eligibility
- SuperNode → Custom SuperLink: submits results
