Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -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.
122 changes: 122 additions & 0 deletions .github/ISSUE_TEMPLATE/epic.yml
Original file line number Diff line number Diff line change
@@ -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
110 changes: 110 additions & 0 deletions .github/ISSUE_TEMPLATE/task.yml
Original file line number Diff line number Diff line change
@@ -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
11 changes: 10 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SafeCrowd PR Rules
# SafeCrowd Contribution Rules

이 저장소는 `application -> domain -> engine` 계층을 유지하는 것을 가장 중요한 규칙으로 둡니다.
PR은 작은 단위로 나누고, 어떤 issue를 해결하는지 분명하게 남겨 주세요.
Expand All @@ -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 제목은 아래 형식을 따릅니다.
Expand Down
Loading