From e29bfc4523060dfcfa0c07304c0ac5f998d0fce9 Mon Sep 17 00:00:00 2001 From: learncold Date: Fri, 20 Mar 2026 22:13:04 +0900 Subject: [PATCH] repo: add issue templates --- .github/ISSUE_TEMPLATE/config.yml | 8 ++ .github/ISSUE_TEMPLATE/epic.yml | 122 ++++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/task.yml | 110 +++++++++++++++++++++++++++ CONTRIBUTING.md | 11 ++- 4 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/epic.yml create mode 100644 .github/ISSUE_TEMPLATE/task.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3c6d292 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Project Board + url: https://github.com/users/learncold/projects/1 + about: Check sprint placement, parent issue structure, and current work status before creating a new issue. + - name: Contribution Rules + url: https://github.com/learncold/cpp-ecs-engine/blob/main/CONTRIBUTING.md + about: Review the repository workflow, title conventions, and architecture guardrails. diff --git a/.github/ISSUE_TEMPLATE/epic.yml b/.github/ISSUE_TEMPLATE/epic.yml new file mode 100644 index 0000000..4384b21 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.yml @@ -0,0 +1,122 @@ +name: Epic +description: Create a larger work item that groups multiple tasks. +title: "EPIC- " +body: + - type: markdown + attributes: + value: | + Use this form for sprint-sized work that will be broken into multiple tasks. + + Keep the layered architecture in mind: + - `application -> domain -> engine` + - `domain` must not depend on Qt UI code + - `engine` must not depend on `domain` or `application` + - type: textarea + id: summary + attributes: + label: Summary + description: Describe the epic in one short paragraph. + placeholder: Complete the engine foundation needed for the first playable SafeCrowd demo. + validations: + required: true + - type: dropdown + id: area + attributes: + label: Area + description: Select the main area this epic belongs to. + options: + - Engine + - Domain + - Application + - Docs + - Build + - Analysis + - Chore + validations: + required: true + - type: dropdown + id: sprint + attributes: + label: Target Sprint + description: Choose the sprint that should own this epic. + options: + - Sprint 1 + - Sprint 2 + - Sprint 3 + - Later + validations: + required: true + - type: textarea + id: goal + attributes: + label: Goal / Outcome + description: Explain what should be true when this epic is complete. + placeholder: The engine can run a deterministic fixed-timestep update loop and expose the minimal runtime APIs needed by the domain layer. + validations: + required: true + - type: textarea + id: in-scope + attributes: + label: In Scope + description: List the work that belongs inside this epic. + placeholder: | + - Implement the runtime entry point + - Add scheduler primitives + - Add basic smoke tests + validations: + required: true + - type: textarea + id: out-of-scope + attributes: + label: Out of Scope + description: Capture work that should stay outside this epic. + placeholder: | + - Advanced replay tooling + - 3D rendering features + - type: textarea + id: child-tasks + attributes: + label: Child Tasks + description: List planned child tasks or linked issues. + placeholder: | + - #12 Implement EngineRuntime minimal orchestration API + - #13 Add engine smoke test for deferred mutation flow + validations: + required: true + - type: textarea + id: architecture + attributes: + label: Architecture / Dependency Notes + description: Record the layer boundaries or dependency constraints this epic must respect. + placeholder: | + - Keep all runtime internals inside `src/engine` + - Do not pull Qt types into `src/domain` + - Preserve `src/` as the include root + validations: + required: true + - type: textarea + id: done-criteria + attributes: + label: Done Criteria + description: Define what counts as complete for this epic. + placeholder: | + - All child tasks are closed + - Demo-critical runtime path is implemented + - No layer rule is violated + validations: + required: true + - type: textarea + id: risks + attributes: + label: Risks / Dependencies + description: Note blockers, dependencies, or uncertainties. + placeholder: Depends on stable vcpkg/Qt setup and the first tracked source files landing in `src/`. + - type: checkboxes + id: checks + attributes: + label: Repository Checks + options: + - label: I checked the current GitHub Project board before creating this epic. + required: true + - label: I will keep the issue title aligned with the repository naming convention. + required: true diff --git a/.github/ISSUE_TEMPLATE/task.yml b/.github/ISSUE_TEMPLATE/task.yml new file mode 100644 index 0000000..56ba35d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/task.yml @@ -0,0 +1,110 @@ +name: Task +description: Create a single implementation, analysis, docs, or maintenance task. +title: "T- " +body: + - type: markdown + attributes: + value: | + Use this form for a single unit of work. + + Prefer one task per PR, and keep the task scoped tightly enough that it can be reviewed and merged independently. + - type: textarea + id: summary + attributes: + label: Summary + description: Describe the task in one short paragraph. + placeholder: Implement a generation-safe entity handle and the corresponding entity registry API. + validations: + required: true + - type: input + id: parent-issue + attributes: + label: Parent Issue + description: Link the parent epic when this task belongs under one. + placeholder: "#1" + - type: dropdown + id: area + attributes: + label: Area + description: Select the main area this task belongs to. + options: + - Engine + - Domain + - Application + - Docs + - Build + - Analysis + - Chore + validations: + required: true + - type: dropdown + id: sprint + attributes: + label: Target Sprint + description: Choose the sprint that should own this task. + options: + - Sprint 1 + - Sprint 2 + - Sprint 3 + - Later + validations: + required: true + - type: textarea + id: scope + attributes: + label: Scope + description: List the concrete changes this task should include. + placeholder: | + - Add `Entity` handle type + - Add generation tracking to the registry + - Add minimal tests or smoke coverage + validations: + required: true + - type: textarea + id: acceptance + attributes: + label: Acceptance Criteria + description: Describe how we know the task is done. + placeholder: | + - Stale entity handles are rejected + - API is reachable from the engine layer + - Behavior is covered by a smoke test or documented check + validations: + required: true + - type: textarea + id: architecture + attributes: + label: Architecture / Dependency Check + description: Record any layer constraints or include-path expectations. + placeholder: | + - Keep the implementation inside `src/engine` + - Do not add Qt usage + - Use `#include "engine/..."` + validations: + required: true + - type: textarea + id: verification + attributes: + label: Verification Plan + description: Explain how this task should be validated. + placeholder: | + - `cmake --preset windows-debug` + - `cmake --build --preset build-debug` + - Add or run the smallest useful smoke test + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Dependencies / Blockers + description: Note anything this task depends on or anything currently blocking it. + placeholder: Waiting on tracked source files or local vcpkg/Visual Studio setup to stabilize. + - type: checkboxes + id: checks + attributes: + label: Repository Checks + options: + - label: I checked for an existing related issue or epic before creating this task. + required: true + - label: I will keep the issue title aligned with the repository naming convention. + required: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0c9e7a0..5bab9ae 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# SafeCrowd PR Rules +# SafeCrowd Contribution Rules 이 저장소는 `application -> domain -> engine` 계층을 유지하는 것을 가장 중요한 규칙으로 둡니다. PR은 작은 단위로 나누고, 어떤 issue를 해결하는지 분명하게 남겨 주세요. @@ -10,6 +10,15 @@ PR은 작은 단위로 나누고, 어떤 issue를 해결하는지 분명하게 - 서로 다른 계층을 동시에 크게 건드리는 PR은 피합니다. - 구조, 빌드, 의존성 규칙이 바뀌면 관련 문서를 함께 업데이트합니다. +## Issue Rules + +- 새 work item은 GitHub issue form으로 생성합니다. +- `Epic`은 여러 task를 묶는 상위 계획에 사용합니다. +- `Task`는 구현, 분석, 문서화 같은 단일 작업 단위에 사용합니다. +- 제목은 저장소 관례에 맞춰 `EPIC-n short title` 또는 `T-xxx short title` 형식을 유지합니다. +- 가능하면 task는 parent epic을 함께 적고, Sprint와 Area를 바로 정합니다. +- 구조나 의존성에 영향을 주는 issue는 본문에 계층 영향과 검증 계획을 남깁니다. + ## PR 제목 규칙 PR 제목은 아래 형식을 따릅니다.