graph TD Root["Root CMakeLists.txt"] --> Test["test/CMakeLists.txt"] Root --> Standalone["standalone/CMakeLists.txt"] Root --> Docs["documentation/CMakeLists.txt"] Root --> Bench["bench/CMakeLists.txt"] Root --> Examples["examples/CMakeLists.txt"] Root --> All["all/CMakeLists.txt"] Test -. "duplicate CPM" .-> CPM1["cmake/CPM.cmake"] Standalone -. "duplicate CPM" .-> CPM2["cmake/CPM.cmake"] Bench -. "duplicate CPM" .-> CPM3["cmake/CPM.cmake"] Examples -. "own CPM_modules!" .-> CPM4["examples/CPM_modules/"] style Test fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Standalone fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Docs fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Bench fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Examples fill:#ffcdd2,stroke:#c62828,stroke-width:3px style All fill:#ffcdd2,stroke:#c62828,stroke-width:3px style CPM1 fill:#fff3e0,stroke:#e65100,stroke-width:3px style CPM2 fill:#fff3e0,stroke:#e65100,stroke-width:3px style CPM3 fill:#fff3e0,stroke:#e65100,stroke-width:3px style CPM4 fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph LR A["Checkout"] --> B["cmake -S . -B build"] B --> C["cmake -S test -B build/test\n separate config! "] C --> D["cmake -S standalone -B build/standalone\n another config! "] D --> E["ctest --test-dir build/test"] E --> F{"All green?"} F -- "No β" --> G["Debug 3 different\n CMake configs "] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px style F fill:#fff3e0,stroke:#e65100,stroke-width:3px style G fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph LR A["cmake -S ."] --> B["cmake -S test"] B --> C["cmake -S standalone"] C --> D["cmake -S documentation"] D --> E["cmake -S bench"] E --> F["cmake -S examples"] F --> G["cmake -S all"] style A fill:#ffcdd2,stroke:#c62828,stroke-width:3px style B fill:#ffcdd2,stroke:#c62828,stroke-width:3px style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px style F fill:#ffcdd2,stroke:#c62828,stroke-width:3px style G fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph TD H["cmake -B build"] --> I{"Options"} I -- "ON" --> J["FractionsTests"] I -- "ON" --> K["FractionsStandalone"] I -- "OFF" --> L["Bench targets"] I -- "OFF" --> M["GenerateDocs"] style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style I fill:#fff3e0,stroke:#e65100,stroke-width:3px style J fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style K fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A["find_package(<pkg> CONFIG QUIET)"] --> B{"Found?"} B -- "Yes β " --> C["System package\n Zero compile "] B -- "No" --> D["CPMAddPackage\n Download & Build "] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#fff3e0,stroke:#e65100,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px
graph LR subgraph BuildPhase["Build & Install"] A["cmake -B build\ncmake --build build"] --> B["cmake --install build\n --config Debug "] end subgraph TestPhase["Test Installed"] C["cmake -S test_installed\n -DCMAKE_PREFIX_PATH=<prefix> "] --> D["find_package(Fractions REQUIRED)"] D --> E["fractions_installed_test\n links Fractions::Fractions "] E --> F["(1/2) + (1/3) = (5/6) β "] end B -.-> C style BuildPhase fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style TestPhase fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A["CMake Simplify\n ellalgo-cpp "] --> B["Ubuntu CI β"] A --> C["macOS CI β"] B --> D["spdlog compiled-lib\n registry mismatch "] C --> D D --> E{"SPDLOG_COMPILED_LIB\n defined at compile? "} E -- "No β" --> F["Header-only registry vs\ncompiled registry diverge"] F --> G["duplicate logger\n exceptions at runtime "] style B fill:#ffcdd2,stroke:#c62828,stroke-width:3px style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px style F fill:#fff3e0,stroke:#e65100,stroke-width:3px style G fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph TD subgraph CI["ellalgo-cpp β all 5 workflows"] A["Ubuntu β "] --> B["macOS β "] B --> C["Windows β "] C --> D["Install β "] D --> E["Documentation β "] end style CI fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph TD Root["Root CMakeLists.txt\n project(Fractions VERSION 1.1.3) "] --> Lib["Fractions lib\nCXX_STANDARD 11"] Root --> Tests["FractionsTests\n C++17 + doctest + RapidCheck "] Root --> CLI["FractionsStandalone\n cxxopts, OUTPUT_NAME 'Fractions' "] Root --> Docs["GenerateDocs\n Doxygen (opt-in) "] Root --> Bench["Bench targets\n Google Benchmark (opt-in) "] Root --> Lint["clang-tidy target\n (opt-in) "] Root --> Cov["coverage target\n gcovr (GCC/Clang) "] Root --> Fmt["format / fix-format\n Format.cmake 1.7.3 "] style Root fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style Lib fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style Tests fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style CLI fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style Docs fill:#fff3e0,stroke:#e65100,stroke-width:3px style Bench fill:#fff3e0,stroke:#e65100,stroke-width:3px style Lint fill:#fff3e0,stroke:#e65100,stroke-width:3px style Cov fill:#fff3e0,stroke:#e65100,stroke-width:3px style Fmt fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px
graph TD subgraph fractions["fractions-cpp β push to dev"] A["Ubuntu (build + coverage) β \n 1m22s "] --> B["Install (consumer) β \n 1m37s "] B --> C["macOS β \n 1m38s "] C --> D["Windows β \n 2m22s "] end style fractions fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR subgraph Consumers["Dependent Repos"] A["rat-trig-cpp\n cmake/specific.cmake "] --> F["fractions-cpp\n GIT_TAG v1.1.3 "] B["projgeom-cpp\n specific.cmake "] --> F end F --> T["link Fractions::Fractions\n #include <fractions/fractions.hpp> "] style Consumers fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style F fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style T fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph TD subgraph Old["Old root build (v1.1.3)"] A["Library only\n pulled into consumer "] end subgraph New["New root build (v1.1.4)"] B["Library"] --> C["FractionsStandalone\n (cxxopts, unconditional) "] B --> D["FractionsTests\n (doctest + RapidCheck) "] end style Old fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style New fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px
graph LR subgraph CI["All 8 workflows green"] A["rat-trig: Ubuntu + MacOS + Windows + Install β "] --> B["projgeom: Ubuntu + MacOS + Windows + Install β "] end style CI fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A["1. One root CMakeLists\n beats 7 sub-builds "] --> B["2. Options (ON/OFF)\n replace directories "] B --> C["3. find_package first\n CPM fallback "] C --> D["4. Warnings-as-errors\n via one helper "] D --> E["5. spdlog needs its own\n INTERFACE_COMPILE_DEFINITIONS "] E --> F["6. Multi-config install\n needs --config "] F --> G["7. test_installed proves\n the export works "] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px style F fill:#fff3e0,stroke:#e65100,stroke-width:3px style G fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px
graph LR A["Agent receives task"] --> B["Reads the build system\n to understand the repo "] B --> C{"How much context\ndoes it consume?"} C -- "15 files π§©" --> D["Multi-directory CMake\n scattered helpers "] C -- "1 file π" --> E["Single root CMakeLists\n declared intent "] D --> F["Slower, more error-prone"] E --> G["Fast, predictable edits"] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style F fill:#ffcdd2,stroke:#c62828,stroke-width:3px style G fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A["Agent edits code"] --> B["Compile with -Werror\n warnings = errors "] B -- "fails β" --> C["Fix immediately\n agent learns in-loop "] B -- "passes β " --> D["ctest --test-dir build\n uniform everywhere "] D --> E{"Agent touches\ninstall/export?"} E -- "Yes" --> F["test_installed consumer\n find_package β (5/6) β "] F -- "red β" --> C E -- "No" --> G["Ship"] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#fff3e0,stroke:#e65100,stroke-width:3px style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px style D fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style E fill:#fff3e0,stroke:#e65100,stroke-width:3px style F fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style G fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px