본문으로 건너뛰기
cccskills
무료GitHub에 공개

conventional-commit

Load when authoring/reviewing commit messages or PR titles/descriptions, or replacing a materially diverged phase commit contract; not for ordinary implementation or executing an unchanged approved contract.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(2)

  • SKILL.md9.6 KB
  • resources/reader-first-writing.md11.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

<!-- ABOUTME: Changelog-first Conventional Commits policy for reader-friendly release notes. --> <!-- ABOUTME: Groups each commit by releasable outcome instead of code layer or file type. -->

Conventional Commits

Invariants & Rules

  1. Smallest Releasable Vertical Slice: One commit is the smallest complete, independently reviewable outcome—not every change related to a broad feature or workstream. Include only the layers and artifacts required for that exact behavior.
  2. No Orphaned Generated Code: Generated clients/schemas must travel in the commit that triggered them.
  3. No Layer Scopes: Scopes describe capability/engineering concern—never code layers (api, domain, persistence, blazor, client, dto are forbidden).
  4. Cross-Domain Precedence: When a feature spans domains, select the primary initiating capability (registration).
  5. Reader-First Messages: Subjects state the concrete user/operator or engineering outcome in imperative mood, without decoding internal jargon. Bodies explain the problem and changed behavior before the mechanism. Apply reader-first writing to messages and PR descriptions; preserve exact identifiers, breaking-change instructions, and trailers.
  6. Breaking Work & Change-Id: Breaking changes require ! and BREAKING CHANGE: footer. Governed security/migration work requires its change fragment in docs/internal/releases/changes/ and matching Change-Id: CHG-... footer.
  7. Internal Nonbreaking Work: Commits of type test, build, ci, refactor, style, or internal docs/fix must carry both Changelog: skip and non-empty Changelog-Reason: <reason>.
  8. Safe Staging: Never use blind git add . on mixed trees. Explicitly name staged files per atomic commit. On a shared checkout, inspect the existing index first; never unstage another contributor's work. If unrelated paths are already staged, use an explicit path-limited commit only when you own the complete diff of every named file, then verify the resulting commit file list. A file containing another contributor's hunks is a blocker until ownership is separated or coordinated.
  9. Self-Sufficient Planned Contract: Planning writes exact metadata, commit paths, inspection commands, git add, path-limited git commit, and post-commit verification in tasks.md. Pathspecs equal declared paths and the command encodes metadata/trailers. A truthful packet executes without loading this skill.
  10. Material-Divergence Override Gate: The executor loads this skill only when it will not use the planned packet due to user change, atomic split, material divergence, changed breaking/change-fragment classification, or factual invalidity. Before committing, record the reason and a complete metadata/path/command packet for every resulting commit. Style is insufficient.
  11. Execution Protocol: Show the proposed commit plan by default; execute stage-and-commit directly when explicitly instructed. An approved implementation-plan phase-close task is explicit instruction for the implementing agent to commit in the same session.
  12. History Invariants: Commit B is the sole commit whose terminal footers are Changelog: skip and Changelog-Reason: release metadata commit. Never rewrite published history on develop or release lines.
  13. Oversized Commit Gate: A large dirty tree is evidence that more clustering is required, not permission for one umbrella commit. Split independent behaviors, refactors, tests, documentation, plans, cleanup, provider integrations, and operational changes even when they share a capability scope.
  14. Rare Large-Commit Exception: A commit may touch dozens or hundreds of files only when the same indivisible change necessarily applies across them—for example a mechanical repository-wide rename, generated artifacts from one source change, or one schema/migration regeneration whose files cannot build or remain truthful independently. State that necessity in the commit plan; “same feature,” “same workstream,” or “all currently dirty” is never sufficient.

Scope Registry

CategoryAllowed ScopesDescription
Publicevents, registration, ticketing, discovery, notifications, privacy, access, storage, onboarding, federation, webhooks, localization, accessibility, self-hostingUser/operator capabilities (in release notes).
Engineeringci, dependencies, architecture, database, observability, documentation, release, testing, buildCodebase health, build, testing, dev tooling.

File Clustering (Atomic Slicing)

Sort dirty working trees using this priority order:

  1. Vertical Feature/Fix Slice: Domain + App + Persistence + UI + Generated Artifacts + Tests + Docs.
  2. Technical/Resilience Fix: Independent database execution strategies, retries, or middleware.
  3. Test Suite Hardening: Test fixtures, schema isolation (current_schema()), characterization models.
  4. Build & Package Config: Central props (Directory.Build.props), lockfiles, CI pipelines.
  5. Governance & Legal Docs: CLA.md, CONTRIBUTING.md, README.md, ADRs (docs/internal/adr/*), durable findings (dev/_journal/*). (Note: Active task tracking in dev/active/* is gitignored local working memory and excluded from commits).

Then apply the atomicity gate:

  1. Describe each candidate commit in one benefit-led sentence.
  2. Remove every file not required to make that sentence true.
  3. Split files that implement another behavior, cleanup, plan, test-hardening effort, or operator concern.
  4. Keep generated outputs with their exact source change, but do not use generated files to absorb unrelated handwritten work.
  5. For an unusually large candidate, explain why splitting would create a broken build, orphan generated output, or a false intermediate contract. If no concrete break exists, split it.

File count is a warning signal, not the definition of atomicity. Small commits are the default; very large commits are exceptional and must be structurally indivisible.

Format & Non-Interactive CLI Recipes

type(scope): benefit-led subject

Explain the problem and what changes for the reader.
Then explain the relevant technical mechanism and constraints.

Changelog: skip
Changelog-Reason: concise explanation of why commit is excluded from public release notes
TypeMeaning
feat / fix / perfUser/operator capability, bugfix, or efficiency improvement
revert / docsRollback with stated outcome, or documentation-only change
test/build/ci/refactor/choreInternal outcome (skipped from public release notes)

CLI Recipe

Confirm git config --get core.hooksPath resolves to the repository .githooks directory. If unset, use git config core.hooksPath .githooks; do not discard an existing custom hook chain. The tracked commit-msg hook runs the native preflight-commit command before Git records the commit. It validates the proposed message and indexed Change-Id provenance with the policy used by range validation. Never use --no-verify or override hooks to bypass this gate.

git status --short
git diff --cached --name-only
git add -- path/to/OwnedChange.cs path/to/OwnedChangeTests.cs
git commit --only -m "test(access): isolate committed cancellation observation" \
  -m "Observe only keys created by this invocation." \
  -m $'Changelog: skip\nChangelog-Reason: Internal test isolation correction.' \
  -- path/to/OwnedChange.cs path/to/OwnedChangeTests.cs
git show --name-only --format=fuller HEAD

Use literal owned paths. Path-limited commits isolate files, not another contributor's hunks inside a shared file. Add the required changelog/breaking-change trailers for the classified change.

Use one -m argument for both skip declarations. Separate -m arguments introduce blank paragraphs; native policy tolerates whitespace between terminal trailer paragraphs, but keeps duplicates, conflicting values, missing reasons and breaking metadata violations invalid. Ordinary body prose stops the terminal trailer scan. For a saved proposed message, run the same gate explicitly before committing:

dotnet run --project eng/release/src/ISLAMU.ReleaseEngineering/ISLAMU.ReleaseEngineering.csproj \
  --configuration Release -- preflight-commit /absolute/path/to/proposed-message.txt --target develop

Keep preflight-range --target develop --head HEAD as the final local/CI check; successful hook validation does not replace complete-range validation.

Resources

Verification

  • git log --format='- %s' "$(git merge-base HEAD origin/develop)"..HEAD
  • Apply the resource's readability check; confirm every skipped commit has both trailers and every breaking commit has its required footer. Readability never substitutes for release metadata.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Load for Blazor/MudBlazor UI changes involving forms, dialogs, focus, keyboard navigation, landmarks, ARIA, color contrast, RTL-safe styling, or WCAG 2.2 AA tests; not for backend-only changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

Load when a task asks to research, verify, compare, or look up framework/package behavior, release notes, standards, RFCs, CVEs, or unfamiliar APIs; use repository evidence first, then official docs, and not for codebase navigation alone.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

aspire

무료

Load for Aspire AppHost work: start/stop/wait resources, inspect dashboard/logs/traces, add integrations/resources, rebuild a service, run isolated worktrees, or diagnose Aspire orchestration; not for plain dotnet apps, container-only deployments, or cloud deployment.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

Load for authentication or authorization changes involving BFF cookies/tokens, JWT validation, claims/user ID extraction, policies, handler access checks, impersonation, or 401/403 bugs; not for UI affordance gating alone.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

Load for Blazor BFF server work involving YARP proxy routes, cookie sessions, access-token forwarding/refresh, downstream API calls, BFF handlers, or browser-to-API auth failures; not for client component rendering or API JWT validation alone.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

Load when editing Blazor `.razor.css`, scoped selectors, `::deep`, BEM class names, RTL/logical CSS properties, or styling nested MudBlazor components; not for global design tokens or non-Blazor CSS.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

islamu-ngo/Event82026년 10월 19일 업데이트

islamu-ngo의 스킬 모두 보기

이 스킬의 문제 신고