@@ -32,60 +32,57 @@ Source code is organized by responsibility, not experiment name. Use the narrowe
3232
3333``` text
3434graphfl_lab/
35- app/ Flower app config/runtime glue
36- cli/ argparse only
37- clients/ Flower client implementations
38- data/ dataset loading and partitioning
39- designs/ GraphFLDesign composer/registry/presets
40- diagnostics/ schemas, metrics, CSV/JSONL writers
41- graph/ client relation graph construction
42- builders.py
43- diagnostics.py
44- method_specs.py
45- registry.py
46- signals/
47- similarity/
48- sources/
49- sparsification.py
50- lifecycle/ contracts, traces, counterfactual runner
51- strategies/
52- baselines/
53- graphfl/
54- aggregation.py
55- config.py
56- diagnostics.py
57- filtering.py
58- momentum.py
59- strategy.py
60- targets.py
61- tracing.py
62- experiments/
63- vision/
64- cora/
65- suites/
66- vision/
67- artifacts.py result/suite artifact discovery
68- reporting.py suite summaries, dashboard, interpretation
69- variant_helpers.py per-run result path resolution
35+ ├── app/ Flower App config and runtime glue
36+ ├── cli/ argparse only (vision, cora, suite, sweep)
37+ ├── clients/ Flower client train/eval implementations
38+ ├── data/ dataset loading and Dirichlet partition
39+ ├── designs/ GraphFLDesign composer, registry, presets
40+ ├── diagnostics/ result schemas, metrics, evidence bundle
41+ ├── graph/ client relation graph construction
42+ │ ├── builders.py register builders; compose relation + topology
43+ │ ├── registry.py graph_mode lookup and plugin dispatch
44+ │ ├── method_specs.py runnable graph_method profiles
45+ │ ├── presets.py named graph presets
46+ │ ├── signals/ raw client signals (update, head, …)
47+ │ ├── similarity/ cosine, magnitude, RBF helpers
48+ │ ├── sources/ graph_source adapters (graphfl, fedsim, …)
49+ │ └── sparsification.py kNN and sparsification utilities
50+ ├── lifecycle/ contracts, traces, counterfactual runner
51+ ├── models/ CNN/MLP and Cora model wrappers
52+ ├── strategies/
53+ │ ├── graphfl/ Graph-FL server strategy
54+ │ │ ├── strategy.py round loop and orchestration
55+ │ │ ├── filtering.py Laplacian / graph filter on client matrices
56+ │ │ ├── aggregation.py weighted combine and dominance hooks
57+ │ │ ├── targets.py aggregation_target dispatch
58+ │ │ └── diagnostics.py per-round graph/control metrics
59+ │ └── baselines/ non-graph and proxy baselines
60+ └── experiments/
61+ ├── vision/ single_run, suite, stress_grid, sweeps
62+ ├── cora/ single_run, graph_ablation helpers
63+ └── suites/vision/
64+ ├── variants.py suite token grammar
65+ ├── artifacts.py result/suite path discovery
66+ ├── reporting.py summaries, dashboard, interpretation
67+ └── variant_helpers.py per-variant result path resolution
7068```
7169
7270## Compatibility Facades
7371
74- Keep these thin. Add new logic in scoped modules, then re-export only if compatibility requires it.
72+ Keep these thin. Add new logic in scoped modules, then re-export only if a stable import path requires it.
7573
7674``` text
77- graphfl_lab/aggregation.py
78- graphfl_lab/client.py
79- graphfl_lab/model.py
80- graphfl_lab/spectral_diagnostics.py
81- graphfl_lab/strategy.py
82- graphfl_lab/suite_stats.py
83- graphfl_lab/update_graph.py
84- graphfl_lab/experiments/suite.py
85- graphfl_lab/experiments/stress_grid.py
86- graphfl_lab/experiments/client_count_sweep.py
87- graphfl_lab/experiments/graph_ablation.py
88- run_vision_*.py (canonical entrypoints; `run_general_*` removed Gate 6 batch 3)
75+ graphfl_lab/aggregation.py re-export lifecycle aggregation helpers
76+ graphfl_lab/client.py re-export Flower client entry
77+ graphfl_lab/model.py re-export model factory
78+ graphfl_lab/strategy.py re-export strategy factory
79+ graphfl_lab/suite_stats.py re-export suite statistics helpers
80+ graphfl_lab/update_graph.py re-export graph update utilities
81+ graphfl_lab/experiments/suite.py re-export vision suite runner
82+ graphfl_lab/experiments/stress_grid.py re-export stress grid runner
83+ graphfl_lab/experiments/client_count_sweep.py re-export client-count sweep
84+ graphfl_lab/experiments/graph_ablation.py re-export Cora ablation runner
85+ run_vision_*.py root thin launchers (canonical public CLI)
8986```
9087
9188## Boundary Rules
@@ -106,29 +103,29 @@ run_vision_*.py (canonical entrypoints; `run_general_*` removed Gate 6 batch 3)
106103
107104``` text
108105configs/
109- cora/
110- ablations/
111- graph/
112- vision/
113- baselines/
114- diagnostic/
115- smoke/
116- probes/
117- frequency/
118- graph_source/
119- structure/
120- tau/
121- stress/
122- client_count/
123- fedavg_collapse/
124- sweeps /
125- client_count/
106+ ├── vision/ Fashion-MNIST / vision track
107+ │ ├── baselines/ FedAvg, FedOpt, dominance baselines
108+ │ ├── diagnostic/ mechanism and diagnostic suites
109+ │ ├── smoke/ shortest runnable configs
110+ │ ├── probes/ single-knob attribution probes
111+ │ │ ├── frequency/ warmup / frequency ablations
112+ │ │ ├── graph_source/ client-state source comparisons
113+ │ │ ├── structure/ topology / relation structure
114+ │ │ └── tau/ tau and filter-strength sweeps
115+ │ ├── stress/ Non-IID stress and collapse checks
116+ │ │ ├── client_count/ scaling num_clients
117+ │ │ └── fedavg_collapse/ FedAvg failure modes
118+ │ └── sweeps/ multi-config sweep grids
119+ │ └── client_count/
120+ └── cora/ Cora / FGL track
121+ └── ablations /
122+ └── graph/ graph construction ablation smoke/full
126123```
127124
128- Generated results:
125+ Generated results (gitignored output root, name from ` --out-dir ` / config) :
129126
130127``` text
131- experiments_current/
128+ <output-dir>/ per-run JSON, suite summaries, plots
132129```
133130
134131## Suite Output Artifacts
0 commit comments