Skip to content

Commit 94c1e44

Browse files
docs(config): fix CLI command examples and clarify templates vs examples
Corrected CLI invocation syntax throughout documentation by adding the missing 'run_sim' subcommand. The correct format is: `python -m fusion.cli.run_sim run_sim --config_path ...` Added comprehensive "Templates vs Examples" section to configs/README.md explaining the distinction between generic reusable templates and specific ready-to-run example configurations. Changes include: - Fix CLI command examples in cli/README.md and configs/examples/README.md - Add "Templates vs Examples" section with comparison table and usage guidance - Add TODO for YAML/JSON configuration file input support - Add TODO for single entry point CLI architecture (fusion run_sim) - Add TODO for schema system consolidation (schema.py vs schemas/*.json) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent b6689c9 commit 94c1e44

5 files changed

Lines changed: 109 additions & 8 deletions

File tree

fusion/cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ config = setup_config_from_cli(args)
3636
### Entry Point Usage
3737
```bash
3838
# Run simulation
39-
python -m fusion.cli.run_sim --config_path config.ini
39+
python -m fusion.cli.run_sim run_sim --config_path config.ini
4040

4141
# Train an agent
4242
python -m fusion.cli.run_train --agent_type rl --config_path config.ini

fusion/cli/TODO.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,23 @@
2626
- **Issue**: Multi-processing functionality is no longer supported in the current implementation
2727
- **Impact**: Users cannot run parallel simulations across multiple processes, limiting scalability for large-scale experiments
2828
- **Solution**: Re-implement multi-processing support with proper process management, configuration handling, and result aggregation
29+
30+
## Medium Priority
31+
32+
### Single Entry Point CLI Architecture
33+
- **Issue**: Current CLI design requires redundant subcommand pattern (`python -m fusion.cli.run_sim run_sim`)
34+
- **Files**: `run_sim.py`, `run_train.py`, `run_gui.py`, `main_parser.py`, `registry.py`
35+
- **Description**: The current architecture uses separate module entry points (run_sim.py, run_train.py, run_gui.py) each with their own subcommand parser, resulting in awkward invocation patterns like `python -m fusion.cli.run_sim run_sim` where "run_sim" appears twice
36+
- **Impact**: Confusing user experience, inconsistent with modern CLI tools, harder to discover available commands
37+
- **Proposed Solution**: Create single unified entry point with cleaner subcommand structure:
38+
- `fusion run_sim` instead of `python -m fusion.cli.run_sim run_sim`
39+
- `fusion train` instead of `python -m fusion.cli.run_train`
40+
- `fusion gui` instead of `python -m fusion.cli.run_gui`
41+
- `fusion analyze` for future analysis commands
42+
- **Next Steps**:
43+
1. Create main `fusion` entry point script
44+
2. Consolidate all subcommands under single parser
45+
3. Update setup.py/pyproject.toml with console_scripts entry point
46+
4. Migrate existing entry points to subcommand handlers
47+
5. Update all documentation with new invocation patterns
48+
6. Maintain backward compatibility during transition period

fusion/configs/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,51 @@ config_manager.merge_cli_args({'max_iters': 5})
139139
| `rl_training.ini` | RL experiments | Epsilon-greedy, medium loads |
140140
| `cross_platform.ini` | CI/CD | OS-agnostic paths, simple config |
141141

142+
## Templates vs Examples
143+
144+
The `configs/` directory contains both **templates** and **examples** - understanding the difference is important:
145+
146+
### Templates (`templates/`)
147+
**Generic, reusable base configurations** designed as starting points:
148+
- Loaded programmatically via `ConfigRegistry.load_template('minimal')`
149+
- Used with profiles and overrides for customization
150+
- Broad, general-purpose settings applicable to many scenarios
151+
- Minimal comments, focused on being a foundation to build upon
152+
153+
**When to use:** Starting a new simulation or creating custom configurations
154+
155+
```python
156+
# Programmatic usage
157+
registry = ConfigRegistry()
158+
config = registry.create_custom_config('minimal', overrides={'erlang_start': 500})
159+
```
160+
161+
### Examples (`examples/`)
162+
**Specific, ready-to-run scenarios** demonstrating particular features:
163+
- Complete configurations for specific use cases (link failures, RL evaluation, etc.)
164+
- Heavily documented with context explaining the scenario
165+
- Ready to run without modification
166+
- Reference implementations showing how to configure advanced features
167+
168+
**When to use:** Learning the system, reproducing specific experiments, or as reference
169+
170+
```bash
171+
# Direct usage
172+
python -m fusion.cli.run_sim run_sim --config_path fusion/configs/examples/link_failure_ksp_ff.ini
173+
```
174+
175+
### Quick Comparison
176+
177+
| Aspect | Templates | Examples |
178+
|--------|-----------|----------|
179+
| **Purpose** | Generic starting points | Specific use cases |
180+
| **Scope** | Broad, reusable | Narrow, scenario-focused |
181+
| **Usage** | Customize via code or CLI overrides | Run directly or copy |
182+
| **Documentation** | Minimal comments | Heavily documented |
183+
| **Registry support** | Yes (`load_template()`) | No (just files) |
184+
185+
**Analogy:** Templates are like "Basic Soup" recipes you customize; Examples are like "Minestrone Soup" recipes you follow exactly.
186+
142187
## Migration Notes
143188
- Legacy INI files work without modification
144189
- New features (validation, templates) are opt-in

fusion/configs/TODO.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ This file tracks known issues and future improvements for the FUSION configurati
2424
2. Ensure save_step aligns with Unity's requirements
2525
3. Add validation for compatible save_step values
2626

27+
### YAML and JSON Configuration File Input
28+
- **Issue**: YAML and JSON configuration file input needs implementation and validation
29+
- **Files**: `cli_to_config.py`
30+
- **Description**: While the system supports INI files, YAML and JSON configuration file formats have not been fully implemented or validated
31+
- **Impact**: Limits configuration flexibility and integration with modern tooling that expects YAML/JSON formats
32+
- **Next Steps**:
33+
1. Implement YAML configuration file parser
34+
2. Implement JSON configuration file parser
35+
3. Validate parsing against existing INI-based configurations
36+
4. Add comprehensive tests for both formats
37+
5. Update documentation with examples for each format
38+
2739
## Medium Priority
2840

2941
### Template System Enhancements
@@ -50,6 +62,30 @@ This file tracks known issues and future improvements for the FUSION configurati
5062
2. Implement enhanced schema validation
5163
3. Add informative error messages
5264

65+
### Schema System Consolidation
66+
- **Issue**: Redundant schema systems with overlapping responsibilities
67+
- **Files**: `schema.py`, `schemas/main.json`, `schemas/survivability.json`, `validate.py`
68+
- **Description**: The codebase has two separate schema systems serving different purposes:
69+
- `schema.py`: Python dictionaries mapping fields to type converter functions (e.g., `float`, `str_to_bool`)
70+
- `schemas/*.json`: JSON Schema files for validation with constraints (e.g., `minimum: 0`, `enum` values)
71+
- This creates redundancy and maintenance burden as changes must be made in both places
72+
- **Impact**:
73+
- Duplication of field definitions across two systems
74+
- Increased maintenance overhead when adding/modifying fields
75+
- Confusion about which system is authoritative
76+
- Risk of inconsistencies between the two schemas
77+
- **Proposed Solution**: Consolidate to single schema system
78+
- **Option A**: Use only JSON Schema as single source of truth, generate type converters from it
79+
- **Option B**: Use Python dataclasses with validation decorators (e.g., Pydantic)
80+
- **Option C**: Keep JSON Schema for validation, auto-generate `schema.py` from JSON files
81+
- **Next Steps**:
82+
1. Evaluate consolidation options (JSON Schema-only vs dataclasses vs hybrid)
83+
2. Choose approach based on maintainability and Python ecosystem best practices
84+
3. Design migration path that maintains backward compatibility
85+
4. Implement schema generation/consolidation tooling
86+
5. Update all configuration loading code to use unified system
87+
6. Remove deprecated schema system after validation
88+
5389
## Low Priority
5490

5591
### Template Description Injection

fusion/configs/examples/README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ This directory contains example configurations for common survivability experime
1818

1919
**Run**:
2020
```bash
21-
python -m fusion.cli.run_sim --config_path fusion/configs/examples/link_failure_ksp_ff.ini
21+
python -m fusion.cli.run_sim run_sim --config_path fusion/configs/examples/link_failure_ksp_ff.ini
2222
```
2323

2424
---
@@ -37,7 +37,7 @@ python -m fusion.cli.run_sim --config_path fusion/configs/examples/link_failure_
3737

3838
**Run**:
3939
```bash
40-
python -m fusion.cli.run_sim --config_path fusion/configs/examples/geo_failure_protection.ini
40+
python -m fusion.cli.run_sim run_sim --config_path fusion/configs/examples/geo_failure_protection.ini
4141
```
4242

4343
---
@@ -57,7 +57,7 @@ python -m fusion.cli.run_sim --config_path fusion/configs/examples/geo_failure_p
5757

5858
**Run**:
5959
```bash
60-
python -m fusion.cli.run_sim --config_path fusion/configs/examples/rl_policy_eval.ini
60+
python -m fusion.cli.run_sim run_sim --config_path fusion/configs/examples/rl_policy_eval.ini
6161
```
6262

6363
**Note**: Requires trained BC model at `models/bc_model.pt`.
@@ -78,7 +78,7 @@ python -m fusion.cli.run_sim --config_path fusion/configs/examples/rl_policy_eva
7878

7979
**Run**:
8080
```bash
81-
python -m fusion.cli.run_sim --config_path fusion/configs/examples/dataset_generation.ini
81+
python -m fusion.cli.run_sim run_sim --config_path fusion/configs/examples/dataset_generation.ini
8282
```
8383

8484
**Output**: JSONL dataset at `datasets/training_dataset.jsonl`
@@ -130,15 +130,15 @@ python -m fusion.cli.run_sim --config_path fusion/configs/examples/dataset_gener
130130
### Running with Different Seeds
131131

132132
```bash
133-
python -m fusion.cli.run_sim \
133+
python -m fusion.cli.run_sim run_sim \
134134
--config_path fusion/configs/examples/link_failure_ksp_ff.ini \
135135
--seed 43
136136
```
137137

138138
### Changing Failure Parameters
139139

140140
```bash
141-
python -m fusion.cli.run_sim \
141+
python -m fusion.cli.run_sim run_sim \
142142
--config_path fusion/configs/examples/geo_failure_protection.ini \
143143
--geo_center_node 7 \
144144
--geo_hop_radius 3
@@ -159,7 +159,7 @@ Run multiple configurations with different seeds for statistical significance:
159159
```bash
160160
#!/bin/bash
161161
for seed in 42 43 44 45 46; do
162-
python -m fusion.cli.run_sim \
162+
python -m fusion.cli.run_sim run_sim \
163163
--config_path fusion/configs/examples/rl_policy_eval.ini \
164164
--seed $seed
165165
done

0 commit comments

Comments
 (0)