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 (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 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 .go-arch-lint.yml contains:
| in: cmd/** |
| deepScan: false |
| - cmd |
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/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/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-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/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/technical_writing.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/domain/greeting.go |
| internal/domain/greeting_test.go |
| internal/usecase/doc.go |
| internal/infra/doc.go |
| internal/app/doc.go |
| .gitignore |
| .gitlab-ci.yml |
| .markdownlint.json |
| .go-arch-lint.yml |
| .mcp.json |
| .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 .go-arch-lint.yml contains:
| in: pkg/** |
| in: internal/** |
| deepScan: false |
| - pkg |
| - internal |
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/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/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-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/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/technical_writing.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 |
| internal/doc.go |
| .gitignore |
| .gitlab-ci.yml |
| .markdownlint.json |
| .go-arch-lint.yml |
| .mcp.json |
| .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 .go-arch-lint.yml contains:
| in: cmd/** |
| in: internal/domain/** |
| deepScan: false |
| - test |
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/data_modeling.md |
| .claude/rules/error_handling.md |
| .claude/rules/frontend_integration.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/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-distroless-service-runtime-images.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/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/frontend_integration.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/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 |
| cmd/go-service/main.go |
| internal/app/health.go |
| internal/app/health_test.go |
| internal/app/cors.go |
| internal/app/cors_test.go |
| internal/app/server.go |
| internal/app/server_test.go |
| internal/domain/greeting.go |
| internal/domain/greeting_test.go |
| internal/usecase/doc.go |
| internal/infra/doc.go |
| image/Dockerfile |
| image/entrypoint.sh |
| test/bdd/bdd_test.go |
| test/bdd/features/README.md |
| test/bdd/features/liveness.feature |
| .gitignore |
| .gitlab-ci.yml |
| .markdownlint.json |
| .go-arch-lint.yml |
| .mcp.json |
| .prettierignore |
| CHANGELOG.md |
| CLAUDE.md |
| cliff.toml |
| devbox.json |
| go.mod |
| LICENSE |
| Makefile |
| Makefile.local |
| mkdocs.yml |
| README.md |
| .repo.yaml |