Skip to content

Uc001 Cpp

# specs/domain/features/UC001-cpp.feature
#
# SINGLE SOURCE OF TRUTH for C++ repository initialization behaviour.
# This file is:
#   (1) referenced by specs/domain/use_cases/UC001-init_repo.md  (documentation)
#   (2) executed by the acceptance test suite                     (living documentation)
#
# Rules:
#   - Scenario IDs (e.g. UC001-CPP-S01) must match the use case document.
#   - Step definitions live in: internal/acceptance/
#   - Keep scenarios focused: one behaviour per scenario.
#   - Use exact terms from specs/domain/glossary.md.

Feature: Initialize a C++ Repository (Including Scaffolding)
    As a software engineer
    I want to initialize an empty Git repository with scaffolding files
    So that I can immediately start developing a C++ project.

    # ---------------------------------------------------------------------------
    # C++ CLI Tool
    # ---------------------------------------------------------------------------

    Scenario: UC001-CPP-S01 Successful initialization of a C++ CLI tool repository (GitLab)
        Given current directory is an empty Git repository
        When  the user initializes this repository with the following settings:
            | Parameter           | Value            |
            | Project Name        | My C++ CLI Tool  |
            | Project Description | My C++ CLI Tool. |
            | Artifact Name       | cpp-cli-tool     |
            | Language            | cpp              |
            | Artifact Type       | tool             |
            | CI Type             | gitlab           |
        Then a file named ".gitignore" contains:
            | CMakeUserPresets.json |
        And  the repository contains exactly these essential files and directories:
            | .claude/settings.json                                           |
            | .claude/hooks/session-start.sh                                  |
            | .claude/skills/adr/SKILL.md                                     |
            | .claude/skills/adr/adr-template.md                              |
            | .claude/skills/arch-check/SKILL.md                              |
            | .claude/skills/review/SKILL.md                                  |
            | .claude/skills/security-review/SKILL.md                         |
            | .claude/skills/test-coverage/SKILL.md                           |
            | .claude/skills/tdd/SKILL.md                                     |
            | .claude/skills/systematic-debugging/SKILL.md                    |
            | .claude/skills/verification-before-completion/SKILL.md          |
            | .claude/skills/commit/SKILL.md                                  |
            | .claude/skills/update-versions/SKILL.md                         |
            | .claude/commands/new-domain-object.md                           |
            | .claude/commands/new-command.md                                 |
            | .claude/agents/code-reviewer.md                                 |
            | .claude/agents/security-auditor.md                              |
            | .claude/rules/bash_coding.md                                    |
            | .claude/rules/ci_cd.md                                          |
            | .claude/rules/cli_tool.md                                       |
            | .claude/rules/containerization.md                               |
            | .claude/rules/cpp_coding.md                                     |
            | .claude/rules/data_modeling.md                                  |
            | .claude/rules/error_handling.md                                 |
            | .claude/rules/general_coding.md                                 |
            | .claude/rules/git.md                                            |
            | .claude/rules/library_design.md                                 |
            | .claude/rules/oo_design_and_programming.md                      |
            | .claude/rules/performance.md                                    |
            | .claude/rules/refactoring.md                                    |
            | .claude/rules/security.md                                       |
            | .claude/rules/spec_consistency.md                               |
            | .claude/rules/technical_writing.md                              |
            | .claude/rules/testing.md                                        |
            | .claude/rules/tool_chain.md                                     |
            | .claude/rules/user_experience.md                                |
            | avatar/avatar.afdesign                                          |
            | specs/architecture/ADRs/ADR-001-structured_logging.md           |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.md     |
            | specs/architecture/ADRs/ADR-003-gitlab-pages-release-docs.md    |
            | specs/architecture/ADRs/ADR-004-ci_pipeline_design.md           |
            | specs/architecture/ADRs/ADR-005-cpp-dual-platform-build.md      |
            | specs/architecture/ADRs/ADR-006-api-codegen-over-handwritten.md |
            | specs/architecture/ADRs/README.md                               |
            | specs/architecture/APIs/consumed/README.md                      |
            | specs/architecture/APIs/provided/README.md                      |
            | specs/architecture/system_context.md                            |
            | specs/domain/business_rules.md                                  |
            | specs/domain/domain_model.md                                    |
            | specs/domain/features/UC001-sample_use_case.feature             |
            | specs/domain/glossary.md                                        |
            | specs/index.md                                                  |
            | specs/guidelines/bash_coding.md                                 |
            | specs/guidelines/ci_cd.md                                       |
            | specs/guidelines/cli_tool.md                                    |
            | specs/guidelines/containerization.md                            |
            | specs/guidelines/cpp_coding.md                                  |
            | specs/guidelines/user_experience.md                             |
            | specs/guidelines/data_modeling.md                               |
            | specs/guidelines/error_handling.md                              |
            | specs/guidelines/general_coding.md                              |
            | specs/guidelines/git.md                                         |
            | specs/guidelines/library_design.md                              |
            | specs/guidelines/oo_design_and_programming.md                   |
            | specs/guidelines/performance.md                                 |
            | specs/guidelines/refactoring.md                                 |
            | specs/guidelines/security.md                                    |
            | specs/guidelines/technical_writing.md                           |
            | specs/guidelines/testing.md                                     |
            | specs/guidelines/tool_chain.md                                  |
            | specs/domain/use_cases/UC001-sample_use_case.md                 |
            | scripts/arch_check.py                                           |
            | src/CMakeLists.txt                                              |
            | src/main.cpp                                                    |
            | src/greeter.cpp                                                 |
            | src/greeter.hpp                                                 |
            | test/CMakeLists.txt                                             |
            | test/greeter_test.cpp                                           |
            | .clang-format                                                   |
            | .gitignore                                                      |
            | .gitlab-ci.yml                                                  |
            | .markdownlint.json                                              |
            | .mcp.json                                                       |
            | .prettierignore                                                 |
            | CHANGELOG.md                                                    |
            | CLAUDE.md                                                       |
            | cliff.toml                                                      |
            | CMakeLists.txt                                                  |
            | conanfile.py                                                    |
            | devbox.json                                                     |
            | LICENSE                                                         |
            | Makefile                                                        |
            | Makefile.local                                                  |
            | mkdocs.yml                                                      |
            | README.md                                                       |
            | .repo.yaml                                                      |

    # ---------------------------------------------------------------------------
    # C++ Library
    # ---------------------------------------------------------------------------

    Scenario: UC001-CPP-S02 Successful initialization of a C++ library repository (GitLab)
        Given current directory is an empty Git repository
        When  the user initializes this repository with the following settings:
            | Parameter           | Value           |
            | Project Name        | My C++ Library  |
            | Project Description | My C++ Library. |
            | Artifact Name       | cpp-library     |
            | Language            | cpp             |
            | Artifact Type       | library         |
            | CI Type             | gitlab          |
        Then a file named ".gitignore" contains:
            | CMakeUserPresets.json |
        And  the repository contains exactly these essential files and directories:
            | .claude/settings.json                                           |
            | .claude/hooks/session-start.sh                                  |
            | .claude/skills/adr/SKILL.md                                     |
            | .claude/skills/adr/adr-template.md                              |
            | .claude/skills/arch-check/SKILL.md                              |
            | .claude/skills/review/SKILL.md                                  |
            | .claude/skills/security-review/SKILL.md                         |
            | .claude/skills/test-coverage/SKILL.md                           |
            | .claude/skills/tdd/SKILL.md                                     |
            | .claude/skills/systematic-debugging/SKILL.md                    |
            | .claude/skills/verification-before-completion/SKILL.md          |
            | .claude/skills/commit/SKILL.md                                  |
            | .claude/skills/update-versions/SKILL.md                         |
            | .claude/commands/new-domain-object.md                           |
            | .claude/agents/code-reviewer.md                                 |
            | .claude/agents/security-auditor.md                              |
            | .claude/rules/bash_coding.md                                    |
            | .claude/rules/ci_cd.md                                          |
            | .claude/rules/cpp_coding.md                                     |
            | .claude/rules/cpp_library_coding.md                             |
            | .claude/rules/data_modeling.md                                  |
            | .claude/rules/error_handling.md                                 |
            | .claude/rules/general_coding.md                                 |
            | .claude/rules/git.md                                            |
            | .claude/rules/library_design.md                                 |
            | .claude/rules/oo_design_and_programming.md                      |
            | .claude/rules/performance.md                                    |
            | .claude/rules/refactoring.md                                    |
            | .claude/rules/security.md                                       |
            | .claude/rules/spec_consistency.md                               |
            | .claude/rules/technical_writing.md                              |
            | .claude/rules/testing.md                                        |
            | .claude/rules/tool_chain.md                                     |
            | avatar/avatar.afdesign                                          |
            | specs/architecture/ADRs/ADR-001-structured_logging.md           |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.md     |
            | specs/architecture/ADRs/ADR-003-gitlab-pages-release-docs.md    |
            | specs/architecture/ADRs/ADR-004-ci_pipeline_design.md           |
            | specs/architecture/ADRs/ADR-005-cpp-dual-platform-build.md      |
            | specs/architecture/ADRs/ADR-006-api-codegen-over-handwritten.md |
            | specs/architecture/ADRs/README.md                               |
            | specs/architecture/APIs/consumed/README.md                      |
            | specs/architecture/APIs/provided/README.md                      |
            | specs/architecture/system_context.md                            |
            | specs/domain/business_rules.md                                  |
            | specs/domain/domain_model.md                                    |
            | specs/domain/features/UC001-sample_use_case.feature             |
            | specs/domain/glossary.md                                        |
            | specs/index.md                                                  |
            | specs/guidelines/bash_coding.md                                 |
            | specs/guidelines/ci_cd.md                                       |
            | specs/guidelines/cpp_coding.md                                  |
            | specs/guidelines/cpp_library_coding.md                          |
            | specs/guidelines/data_modeling.md                               |
            | specs/guidelines/error_handling.md                              |
            | specs/guidelines/general_coding.md                              |
            | specs/guidelines/git.md                                         |
            | specs/guidelines/library_design.md                              |
            | specs/guidelines/oo_design_and_programming.md                   |
            | specs/guidelines/performance.md                                 |
            | specs/guidelines/refactoring.md                                 |
            | specs/guidelines/security.md                                    |
            | specs/guidelines/technical_writing.md                           |
            | specs/guidelines/testing.md                                     |
            | specs/guidelines/tool_chain.md                                  |
            | specs/domain/use_cases/UC001-sample_use_case.md                 |
            | scripts/arch_check.py                                           |
            | include/cpp_library/greeter.hpp                                 |
            | src/CMakeLists.txt                                              |
            | src/greeter.cpp                                                 |
            | test/CMakeLists.txt                                             |
            | test/greeter_test.cpp                                           |
            | packaging/test_package/conanfile.py                             |
            | packaging/test_package/CMakeLists.txt                           |
            | packaging/test_package/src/main.cpp                             |
            | .clang-format                                                   |
            | .gitignore                                                      |
            | .gitlab-ci.yml                                                  |
            | .markdownlint.json                                              |
            | .mcp.json                                                       |
            | .prettierignore                                                 |
            | CHANGELOG.md                                                    |
            | CLAUDE.md                                                       |
            | cliff.toml                                                      |
            | CMakeLists.txt                                                  |
            | conanfile.py                                                    |
            | devbox.json                                                     |
            | LICENSE                                                         |
            | Makefile                                                        |
            | Makefile.local                                                  |
            | mkdocs.yml                                                      |
            | README.md                                                       |
            | .repo.yaml                                                      |

    # ---------------------------------------------------------------------------
    # C++ Service
    # ---------------------------------------------------------------------------

    Scenario: UC001-CPP-S03 Successful initialization of a C++ service repository (GitLab)
        Given current directory is an empty Git repository
        When  the user initializes this repository with the following settings:
            | Parameter           | Value           |
            | Project Name        | My C++ Service  |
            | Project Description | My C++ Service. |
            | Artifact Name       | cpp-service     |
            | Language            | cpp             |
            | Artifact Type       | service         |
            | CI Type             | gitlab          |
        Then a file named ".gitignore" contains:
            | CMakeUserPresets.json |
        And  the repository contains exactly these essential files and directories:
            | .claude/settings.json                                                |
            | .claude/hooks/session-start.sh                                       |
            | .claude/skills/adr/SKILL.md                                          |
            | .claude/skills/adr/adr-template.md                                   |
            | .claude/skills/arch-check/SKILL.md                                   |
            | .claude/skills/review/SKILL.md                                       |
            | .claude/skills/security-review/SKILL.md                              |
            | .claude/skills/test-coverage/SKILL.md                                |
            | .claude/skills/tdd/SKILL.md                                          |
            | .claude/skills/systematic-debugging/SKILL.md                         |
            | .claude/skills/verification-before-completion/SKILL.md               |
            | .claude/skills/commit/SKILL.md                                       |
            | .claude/skills/update-versions/SKILL.md                              |
            | .claude/commands/new-domain-object.md                                |
            | .claude/commands/new-endpoint.md                                     |
            | .claude/commands/openapi.md                                          |
            | .claude/commands/bdd-scenarios.md                                    |
            | .claude/commands/observability.md                                    |
            | .claude/agents/code-reviewer.md                                      |
            | .claude/agents/security-auditor.md                                   |
            | .claude/rules/api_design.md                                          |
            | .claude/rules/bash_coding.md                                         |
            | .claude/rules/business_process_design.md                             |
            | .claude/rules/ci_cd.md                                               |
            | .claude/rules/containerization.md                                    |
            | .claude/rules/cpp_coding.md                                          |
            | .claude/rules/data_modeling.md                                       |
            | .claude/rules/error_handling.md                                      |
            | .claude/rules/frontend_integration.md                                |
            | .claude/rules/general_coding.md                                      |
            | .claude/rules/git.md                                                 |
            | .claude/rules/js_coding.md                                           |
            | .claude/rules/library_design.md                                      |
            | .claude/rules/logging.md                                             |
            | .claude/rules/monitoring.md                                          |
            | .claude/rules/oo_design_and_programming.md                           |
            | .claude/rules/performance.md                                         |
            | .claude/rules/refactoring.md                                         |
            | .claude/rules/security.md                                            |
            | .claude/rules/spec_consistency.md                                    |
            | .claude/rules/service_design.md                                      |
            | .claude/rules/technical_writing.md                                   |
            | .claude/rules/testing.md                                             |
            | .claude/rules/tool_chain.md                                          |
            | .claude/rules/ui_architecture.md                                     |
            | .claude/rules/user_experience.md                                     |
            | avatar/avatar.afdesign                                               |
            | specs/architecture/ADRs/ADR-001-structured_logging.md                |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.md          |
            | specs/architecture/ADRs/ADR-003-gitlab-pages-release-docs.md         |
            | specs/architecture/ADRs/ADR-004-ci_pipeline_design.md                |
            | specs/architecture/ADRs/ADR-005-cpp-dual-platform-build.md           |
            | specs/architecture/ADRs/ADR-006-distroless-service-runtime-images.md |
            | specs/architecture/ADRs/ADR-007-api-codegen-over-handwritten.md      |
            | specs/architecture/ADRs/README.md                                    |
            | specs/architecture/APIs/consumed/README.md                           |
            | specs/architecture/APIs/provided/README.md                           |
            | specs/architecture/system_context.md                                 |
            | specs/domain/business_rules.md                                       |
            | specs/domain/domain_model.md                                         |
            | specs/domain/features/UC001-sample_use_case.feature                  |
            | specs/domain/glossary.md                                             |
            | specs/index.md                                                       |
            | specs/guidelines/api_design.md                                       |
            | specs/guidelines/bash_coding.md                                      |
            | specs/guidelines/business_process_design.md                          |
            | specs/guidelines/ci_cd.md                                            |
            | specs/guidelines/containerization.md                                 |
            | specs/guidelines/cpp_coding.md                                       |
            | specs/guidelines/data_modeling.md                                    |
            | specs/guidelines/error_handling.md                                   |
            | specs/guidelines/frontend_integration.md                             |
            | specs/guidelines/general_coding.md                                   |
            | specs/guidelines/git.md                                              |
            | specs/guidelines/js_coding.md                                        |
            | specs/guidelines/library_design.md                                   |
            | specs/guidelines/logging.md                                          |
            | specs/guidelines/monitoring.md                                       |
            | specs/guidelines/oo_design_and_programming.md                        |
            | specs/guidelines/performance.md                                      |
            | specs/guidelines/refactoring.md                                      |
            | specs/guidelines/security.md                                         |
            | specs/guidelines/service_design.md                                   |
            | specs/guidelines/technical_writing.md                                |
            | specs/guidelines/testing.md                                          |
            | specs/guidelines/tool_chain.md                                       |
            | specs/guidelines/ui_architecture.md                                  |
            | specs/guidelines/user_experience.md                                  |
            | specs/domain/use_cases/UC001-sample_use_case.md                      |
            | scripts/arch_check.py                                                |
            | image/Dockerfile                                                     |
            | image/entrypoint.sh                                                  |
            | src/CMakeLists.txt                                                   |
            | src/greeter.hpp                                                      |
            | src/greeter.cpp                                                      |
            | src/app/health_controller.hpp                                        |
            | src/app/health_controller.cpp                                        |
            | src/app/cors.hpp                                                     |
            | src/app/cors.cpp                                                     |
            | src/main.cpp                                                         |
            | test/CMakeLists.txt                                                  |
            | test/greeter_test.cpp                                                |
            | test/health_controller_test.cpp                                      |
            | test/cors_test.cpp                                                   |
            | test/bdd/features/README.md                                          |
            | test/bdd/features/environment.py                                     |
            | test/bdd/features/liveness.feature                                   |
            | test/bdd/features/steps/README.md                                    |
            | test/bdd/features/steps/liveness_steps.py                            |
            | .clang-format                                                        |
            | .gitignore                                                           |
            | .gitlab-ci.yml                                                       |
            | .markdownlint.json                                                   |
            | .mcp.json                                                            |
            | .prettierignore                                                      |
            | CHANGELOG.md                                                         |
            | CLAUDE.md                                                            |
            | cliff.toml                                                           |
            | CMakeLists.txt                                                       |
            | conanfile.py                                                         |
            | devbox.json                                                          |
            | LICENSE                                                              |
            | Makefile                                                             |
            | Makefile.local                                                       |
            | mkdocs.yml                                                           |
            | README.md                                                            |
            | .repo.yaml                                                           |

    # ---------------------------------------------------------------------------
    # C++ Firmware/STM32
    # ---------------------------------------------------------------------------

    Scenario: UC001-CPP-S04 Successful initialization of a C++ firmware-stm32 repository (GitLab)
        Given current directory is an empty Git repository
        When  the user initializes this repository with the following settings:
            | Parameter           | Value              |
            | Project Name        | My STM32 Firmware  |
            | Project Description | My STM32 Firmware. |
            | Artifact Name       | stm32-firmware     |
            | Language            | cpp                |
            | Artifact Type       | firmware-stm32     |
            | CI Type             | gitlab             |
        Then a file named ".gitignore" contains:
            | CMakeUserPresets.json |
        And  the repository contains exactly these essential files and directories:
            | .claude/settings.json                                             |
            | .claude/hooks/session-start.sh                                    |
            | .claude/skills/adr/SKILL.md                                       |
            | .claude/skills/adr/adr-template.md                                |
            | .claude/skills/arch-check/SKILL.md                                |
            | .claude/skills/review/SKILL.md                                    |
            | .claude/skills/security-review/SKILL.md                           |
            | .claude/skills/test-coverage/SKILL.md                             |
            | .claude/skills/tdd/SKILL.md                                       |
            | .claude/skills/systematic-debugging/SKILL.md                      |
            | .claude/skills/verification-before-completion/SKILL.md            |
            | .claude/skills/commit/SKILL.md                                    |
            | .claude/skills/update-versions/SKILL.md                           |
            | .claude/commands/new-domain-object.md                             |
            | .claude/agents/code-reviewer.md                                   |
            | .claude/agents/security-auditor.md                                |
            | .claude/rules/bash_coding.md                                      |
            | .claude/rules/ci_cd.md                                            |
            | .claude/rules/cpp_coding.md                                       |
            | .claude/rules/cpp_embedded_coding.md                              |
            | .claude/rules/data_modeling.md                                    |
            | .claude/rules/error_handling.md                                   |
            | .claude/rules/general_coding.md                                   |
            | .claude/rules/git.md                                              |
            | .claude/rules/library_design.md                                   |
            | .claude/rules/oo_design_and_programming.md                        |
            | .claude/rules/performance.md                                      |
            | .claude/rules/refactoring.md                                      |
            | .claude/rules/security.md                                         |
            | .claude/rules/spec_consistency.md                                 |
            | .claude/rules/technical_writing.md                                |
            | .claude/rules/testing.md                                          |
            | .claude/rules/tool_chain.md                                       |
            | avatar/avatar.afdesign                                            |
            | specs/architecture/ADRs/ADR-001-structured_logging.md             |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.md       |
            | specs/architecture/ADRs/ADR-003-gitlab-pages-release-docs.md      |
            | specs/architecture/ADRs/ADR-004-ci_pipeline_design.md             |
            | specs/architecture/ADRs/ADR-005-firmware-stm32-vendor-boundary.md |
            | specs/architecture/ADRs/ADR-006-firmware-stm32-defer-conan.md     |
            | specs/architecture/ADRs/ADR-007-firmware-stm32-defer-unity.md     |
            | specs/architecture/ADRs/ADR-008-api-codegen-over-handwritten.md   |
            | specs/architecture/ADRs/README.md                                 |
            | specs/architecture/APIs/consumed/README.md                        |
            | specs/architecture/APIs/provided/README.md                        |
            | specs/architecture/system_context.md                              |
            | specs/domain/business_rules.md                                    |
            | specs/domain/domain_model.md                                      |
            | specs/domain/features/UC001-sample_use_case.feature               |
            | specs/domain/glossary.md                                          |
            | specs/index.md                                                    |
            | specs/guidelines/bash_coding.md                                   |
            | specs/guidelines/ci_cd.md                                         |
            | specs/guidelines/cpp_coding.md                                    |
            | specs/guidelines/cpp_embedded_coding.md                           |
            | specs/guidelines/data_modeling.md                                 |
            | specs/guidelines/error_handling.md                                |
            | specs/guidelines/general_coding.md                                |
            | specs/guidelines/git.md                                           |
            | specs/guidelines/library_design.md                                |
            | specs/guidelines/oo_design_and_programming.md                     |
            | specs/guidelines/performance.md                                   |
            | specs/guidelines/refactoring.md                                   |
            | specs/guidelines/security.md                                      |
            | specs/guidelines/technical_writing.md                             |
            | specs/guidelines/testing.md                                       |
            | specs/guidelines/tool_chain.md                                    |
            | specs/domain/use_cases/UC001-sample_use_case.md                   |
            | scripts/arch_check.py                                             |
            | firmware/CMakeLists.txt                                           |
            | firmware/CMakePresets.json                                        |
            | firmware/cmake/gcc-arm-none-eabi.cmake                            |
            | firmware/vendor/cubemx/README.md                                  |
            | src/CMakeLists.txt                                                |
            | src/app.hpp                                                       |
            | src/app.cpp                                                       |
            | src/app_c_api.h                                                   |
            | src/app_c_api.cpp                                                 |
            | test/CMakeLists.txt                                               |
            | test/app_test.cpp                                                 |
            | test/mocks/hal_mock.hpp                                           |
            | .clang-format                                                     |
            | .gitignore                                                        |
            | .gitlab-ci.yml                                                    |
            | .markdownlint.json                                                |
            | .mcp.json                                                         |
            | .prettierignore                                                   |
            | CHANGELOG.md                                                      |
            | CLAUDE.md                                                         |
            | cliff.toml                                                        |
            | CMakeLists.txt                                                    |
            | conanfile.py                                                      |
            | devbox.json                                                       |
            | LICENSE                                                           |
            | Makefile                                                          |
            | Makefile.local                                                    |
            | mkdocs.yml                                                        |
            | README.md                                                         |
            | .repo.yaml                                                        |