Add CLAUDE.md with project context and architecture overview - #1
Conversation
…ylon error - flight_profile.py: remove no-op loop that assigned to loop variable instead of the original variables (explicit max() calls below already enforced the 50m floor) - mission_builder.py: replace bare list[0] index with guarded fallback that raises a clear ValueError when a map has no airfields defined - main.py: use .get() with default '?' for _campaign_total so a missing key doesn't raise KeyError during plan display - ollama_client.py: remove unreachable `return None` after retry loop (every code path inside the loop already returns) - custom_mods.py: log a warning instead of silently discarding invalid pylon number strings in custom aircraft JSON loadouts https://claude.ai/code/session_01G1n7wTAgrau2TWUPWvsG3j
…ard, CI Maps - Add Persian Gulf (UAE, Iran, Strait of Hormuz) with 20 airfields, naval zones, SAM zones, carrier orbit areas - Add Mariana Islands (Guam, Saipan, Tinian) with Pacific carrier ops - Register both in MAP_REGISTRY and add LLM aliases Player aircraft - Add F-15C Eagle, F-15E Strike Eagle, AV-8B Harrier II, Mirage 2000C, AH-64D Apache — with loadouts, aliases, and realistic performance profiles in flight_profile.py Mission types - Add CSAR (Combat Search and Rescue) and FAC (Forward Air Controller) to MISSION_TEMPLATES, MISSION_TYPE_ALIASES, and MISSION_PROFILES Multiplayer / co-op - player_count > 1 generates additional "Client" skill slots so multiple pilots can fly in DCS multiplayer - GUI adds a Players dropdown (1–4) wired through to the plan Kneeboard PNG generator (pure stdlib) - New src/generators/kneeboard_generator.py renders briefing text onto a dark-themed PNG using an embedded 8×13 bitmap font and zlib compression — no Pillow required - miz_packager.py embeds the PNG at KNEEBOARD/<aircraft>/ in the .miz GUI dropdown fix - Add _style_combobox() which binds a ButtonPress handler to each Combobox and directly configures the popdown listbox via Tcl eval, fixing white-on-white dropdown text on Linux and some Windows configs --generate CLI flag - python main.py --generate "description" runs headless generation without entering the interactive prompt Infrastructure - Add pyproject.toml (metadata, pytest config, entry point) - Add .github/workflows/ci.yml (Python 3.10/3.11/3.12 test matrix + import sanity check job) - Add tests/test_smoke.py with 22 tests; all passing Updates - Update main.py banner with full aircraft/map/mission roster - Update CLAUDE.md with new architecture, testing, and feature docs https://claude.ai/code/session_01G1n7wTAgrau2TWUPWvsG3j
Layout - Replace LabelFrame borders with _card() — each section gets a thin colored top accent bar, a dimmed section label, and a clean dark fill - Two-column layout now uses bg-colored left panel instead of a bordered box, giving a lighter feel - Window default size bumped to 980×720 Typography - Consistent font hierarchy: 13 bold title, 11 bold primary button, 10 body, 9 labels/secondary buttons, 8 status bar - Section headers rendered in dimmed all-caps instead of bordered frames Status indicators - Ollama and DCS status replaced with colored dot indicators (●) in the title bar — green when found, amber when offline, grey when unknown - Status bar shows combined single-line summary Progress bar - Indeterminate ttk.Progressbar in accent color animates between the output header and text area during generation; hidden at rest Tagged output text - head: section headers in accent teal bold - ok: success lines in green - err: error lines in red - dim: informational / in-progress lines in grey - bright: user input echo in bright white Buttons - Primary generate button: solid green with hover - Secondary generate: bordered surface with hover - Utility buttons: text-style with surface hover - All buttons have cursor="hand2" and _hover() smooth transitions Other - Add Clear button in output header alongside Copy - _row() + _combo() helpers eliminate grid boilerplate - Remove unused `time` import https://claude.ai/code/session_01G1n7wTAgrau2TWUPWvsG3j
- lua_generator.py: Fix Russia country_id 0→1 (was assigning all red units
to Abkhazia/neutral instead of Russia — primary cause of loading freeze)
- units.py: Replace invalid AIM-9X CLSID {5CE2FF2A-...-8720PD3897FF} (non-hex
'P' char) with correct GUID {9B31BFDB-...} across all affected loadouts
- units.py: Remove empty CLSID string from F-16C CAP pylon 6
- units.py: Replace {X-25MP} shorthand with proper Kh-25MP GUID for Su-25T SEAD
- validator.py: Add _check_clsids() to catch malformed CLSID strings at
validation time before packaging — detects both empty and non-GUID/non-shorthand values
https://claude.ai/code/session_01G1n7wTAgrau2TWUPWvsG3j
There was a problem hiding this comment.
Pull request overview
This PR expands the DCS Mission Manager project with additional documentation, new map data, kneeboard rendering/packaging, validation enhancements, and CI/testing scaffolding.
Changes:
- Add
CLAUDE.mdproject context plus new smoke tests and GitHub Actions CI. - Add Persian Gulf and Mariana Islands map registries + aliases, and expand aircraft/mission-type registries and profiles.
- Embed a generated kneeboard PNG into packaged
.mizfiles; add CLSID validation and multiplayer slot generation.
Reviewed changes
Copilot reviewed 19 out of 38 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
tests/test_smoke.py |
New end-to-end smoke tests covering registries, builder, kneeboard generation, naming, and difficulty scaling. |
tests/__pycache__/__init__.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
tests/__init__.py |
Test package marker file. |
src/validator.py |
Add regex-based CLSID validation across unit pylons. |
src/units.py |
Fix/standardize some CLSIDs, add new player aircraft, mission templates, and alias mappings. |
src/maps/persian_gulf.py |
New Persian Gulf map database (airfields, zones, routes). |
src/maps/mariana_islands.py |
New Mariana Islands map database (airfields, zones, routes). |
src/maps/__pycache__/syria.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__pycache__/persian_gulf.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__pycache__/mariana_islands.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__pycache__/cold_war_germany.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__pycache__/caucasus.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__pycache__/__init__.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/maps/__init__.py |
Register new maps and add alias normalization for them. |
src/llm/ollama_client.py |
Remove unreachable/duplicate return None. |
src/generators/miz_packager.py |
Embed kneeboard PNG in .miz under KNEEBOARD/<aircraft>/. |
src/generators/mission_builder.py |
Improve AUTO airfield fallback; add multiplayer co-op slot generation. |
src/generators/lua_generator.py |
Adjust red-side country_id constant. |
src/generators/kneeboard_generator.py |
New pure-stdlib PNG renderer + aircraft folder mapping helper. |
src/generators/__pycache__/kneeboard_generator.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/generators/__pycache__/__init__.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/flight_profile.py |
Add profiles for new aircraft + new mission type profiles; simplify altitude floor logic. |
src/custom_mods.py |
Add warning output for invalid pylon numbers in custom mod configs. |
src/__pycache__/naming.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/__pycache__/mission_events.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/__pycache__/flight_profile.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/__pycache__/difficulty.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/__pycache__/callsigns.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
src/__pycache__/__init__.cpython-311.pyc |
Committed bytecode artifact (should be removed from VCS). |
README.md |
Update repo name/path examples; add output + license notes. |
pyproject.toml |
Add packaging/test configuration and optional dev dependencies. |
main.py |
Banner updates, kneeboard packaging integration, safer campaign display, and headless --generate mode. |
CLAUDE.md |
New Claude-oriented project context/architecture overview. |
.gitignore |
Ignore Python caches/build outputs/missions/history. |
.github/workflows/ci.yml |
Add CI smoke test matrix + import sanity check job. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # DCS Mission Manager — Claude Context | ||
|
|
||
| ## Project Overview | ||
|
|
||
| DCS Mission Generator v2.0 is a Python tool that generates realistic DCS World `.miz` mission files from plain-English descriptions. Users describe a mission (e.g., "SEAD mission in the F-16 on Caucasus with SA-11s") and the tool builds a complete, playable mission with waypoints, threat placement, friendly packages, briefings, and win/loss conditions. | ||
|
|
There was a problem hiding this comment.
The PR title suggests this change only adds CLAUDE.md, but the diff includes substantial functional changes (new maps, kneeboard PNG generation, validator changes, CI workflow, packaging config, etc.). Please update the PR title/description to reflect the full scope, or split into smaller PRs to make review and rollback safer.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
https://claude.ai/code/session_01G1n7wTAgrau2TWUPWvsG3j