Skip to content

Uc001 Go

# specs/domain/features/UC001-go.feature
#
# SINGLE SOURCE OF TRUTH for Go 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-GO-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 Go Repository
    As a software engineer
    I want to initialize an empty Git repository with scaffolding files
    So that I can immediately start developing a Go project.

    # ---------------------------------------------------------------------------
    # Go CLI Tool
    # ---------------------------------------------------------------------------

    Scenario: UC001-GO-S01 Successful initialization of a Go 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 Go CLI Tool   |
            | Project Description | My Go CLI Tool.  |
            | Artifact Name       | go-cli-tool      |
            | Language            | go               |
            | Artifact Type       | tool             |
            | CI Type             | gitlab           |
        Then the repository contains exactly these essential files and directories:
            | .claude/settings.json                  |
            | .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/commit/SKILL.md               |
            | .claude/skills/update-versions/SKILL.md      |
            | .claude/commands/new-domain-object.md        |
            | .claude/commands/new-command.md              |
            | .claude/rules/bash_coding.md                  |
            | .claude/rules/ci_cd.md                        |
            | .claude/rules/cli_tool.md                     |
            | .claude/rules/containerization.md             |
            | .claude/rules/data_modeling.md                |
            | .claude/rules/error_handling.md               |
            | .claude/rules/general_coding.md               |
            | .claude/rules/git.md                          |
            | .claude/rules/go_coding.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/testing.md                      |
            | .claude/rules/tool_chain.md                   |
            | .claude/rules/user_experience.md              |
            | avatar/avatar.afdesign                       |
            | specs/architecture/ADRs/ADR-000-template.md               |
            | specs/architecture/ADRs/ADR-001-structured_logging.md     |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.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/data_modeling.md            |
            | specs/guidelines/error_handling.md           |
            | specs/guidelines/general_coding.md           |
            | specs/guidelines/git.md                      |
            | specs/guidelines/go_coding.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/testing.md                  |
            | specs/guidelines/tool_chain.md               |
            | specs/guidelines/user_experience.md          |
            | specs/domain/use_cases/UC001-sample_use_case.md     |
            | cmd/go-cli-tool/main.go                      |
            | cmd/root.go                                  |
            | internal/greeting.go                         |
            | internal/greeting_test.go                    |
            | .gitignore                                   |
            | .gitlab-ci.yml                               |
            | .go-arch-lint.yml                            |
            | .prettierignore                              |
            | CHANGELOG.md                                 |
            | CLAUDE.md                                    |
            | cliff.toml                                   |
            | devbox.json                                  |
            | go.mod                                       |
            | LICENSE                                      |
            | Makefile                                     |
            | Makefile.local                               |
            | mkdocs.yml                                   |
            | README.md                                    |
            | .repo.yaml                                   |

    # ---------------------------------------------------------------------------
    # Go Library
    # ---------------------------------------------------------------------------

    Scenario: UC001-GO-S02 Successful initialization of a Go 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 Go Library  |
            | Project Description | My Go Library. |
            | Artifact Name       | go-library     |
            | Language            | go             |
            | Artifact Type       | library        |
            | CI Type             | gitlab         |
        Then the repository contains exactly these essential files and directories:
            | .claude/settings.json                  |
            | .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/commit/SKILL.md               |
            | .claude/skills/update-versions/SKILL.md      |
            | .claude/commands/new-domain-object.md        |
            | .claude/rules/bash_coding.md                  |
            | .claude/rules/ci_cd.md                        |
            | .claude/rules/data_modeling.md                |
            | .claude/rules/error_handling.md               |
            | .claude/rules/general_coding.md               |
            | .claude/rules/git.md                          |
            | .claude/rules/go_coding.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/testing.md                      |
            | .claude/rules/tool_chain.md                   |
            | avatar/avatar.afdesign                       |
            | specs/architecture/ADRs/ADR-000-template.md               |
            | specs/architecture/ADRs/ADR-001-structured_logging.md     |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.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/data_modeling.md            |
            | specs/guidelines/error_handling.md           |
            | specs/guidelines/general_coding.md           |
            | specs/guidelines/git.md                      |
            | specs/guidelines/go_coding.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/testing.md                  |
            | specs/guidelines/tool_chain.md               |
            | specs/domain/use_cases/UC001-sample_use_case.md     |
            | pkg/greeter.go                               |
            | pkg/greeter_test.go                          |
            | .gitignore                                   |
            | .gitlab-ci.yml                               |
            | .go-arch-lint.yml                            |
            | .prettierignore                              |
            | CHANGELOG.md                                 |
            | CLAUDE.md                                    |
            | cliff.toml                                   |
            | devbox.json                                  |
            | go.mod                                       |
            | LICENSE                                      |
            | Makefile                                     |
            | Makefile.local                               |
            | mkdocs.yml                                   |
            | README.md                                    |
            | .repo.yaml                                   |

    # ---------------------------------------------------------------------------
    # Go Service
    # ---------------------------------------------------------------------------

    Scenario: UC001-GO-S03 Successful initialization of a Go 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 Go Service  |
            | Project Description | My Go Service. |
            | Artifact Name       | go-service     |
            | Language            | go             |
            | Artifact Type       | service        |
            | CI Type             | gitlab         |
        Then the repository contains exactly these essential files and directories:
            | .claude/settings.json                          |
            | .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/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/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/data_modeling.md                       |
            | .claude/rules/error_handling.md                      |
            | .claude/rules/general_coding.md                      |
            | .claude/rules/git.md                                 |
            | .claude/rules/go_coding.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/testing.md                             |
            | .claude/rules/tool_chain.md                          |
            | .claude/rules/ui_architecture.md                     |
            | .claude/rules/user_experience.md                     |
            | avatar/avatar.afdesign                               |
            | specs/architecture/ADRs/ADR-000-template.md                       |
            | specs/architecture/ADRs/ADR-001-structured_logging.md             |
            | specs/architecture/ADRs/ADR-002-hermetic-ci-build-images.md       |
            | specs/architecture/ADRs/ADR-003-distroless-service-runtime-images.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/data_modeling.md                    |
            | specs/guidelines/error_handling.md                   |
            | specs/guidelines/general_coding.md                   |
            | specs/guidelines/git.md                              |
            | specs/guidelines/go_coding.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/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             |
            | cmd/go-service/main.go                               |
            | image/Dockerfile                                     |
            | image/entrypoint.sh                                  |
            | pkg/greeter.go                                       |
            | pkg/greeter_test.go                                  |
            | .gitignore                                           |
            | .gitlab-ci.yml                                       |
            | .go-arch-lint.yml                                    |
            | .prettierignore                                      |
            | CHANGELOG.md                                         |
            | CLAUDE.md                                            |
            | cliff.toml                                           |
            | devbox.json                                          |
            | go.mod                                               |
            | LICENSE                                              |
            | Makefile                                             |
            | Makefile.local                                       |
            | mkdocs.yml                                           |
            | README.md                                            |
            | .repo.yaml                                           |