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

spec-writing

Write and change a product spec. Covers what belongs in the spec rather than in architecture, the status vocabulary, requirement IDs and how to keep them stable, and how to size a requirement so it becomes one story. Use when adding or editing a spec chapter, when a PR changes behaviour and the spec has to move with it, or when asked what the product should do. Triggers - "write the spec", "add a requirement", "spec this out", "update the spec", "what should this do".

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

설치 방법 보기

포함된 파일(1)

  • SKILL.md4.4 KB

SKILL.md(원문)

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

Writing the spec

Find the spec and read its own contract first, every time. It wins over anything here.

git ls-files | grep -iE '(^|/)(spec|specs|requirements)(/|$)' | head

A spec root usually holds a README.md stating the rules for the rest, an index, and one folder per domain. If the project has no spec, do not invent one inside a ticket: say so, and propose the root as its own change.

What belongs here

The spec says what the product does and why. Architecture says how the code is shaped. The test: a sentence that survives a full rewrite of the implementation belongs in the spec. A sentence naming a crate, a file, a framework, a wire format or a schema does not.

That line is the one reviewers enforce hardest, because a spec that leaks implementation stops being reviewable by the people who care what the product does.

Before writing

Find the space. One folder per domain, using the nouns the project's architecture already uses. A new space needs a reason, not a new noun for an existing domain.

Read the space's own README and its sibling chapters before adding to them. Two chapters that disagree on the same rule is the worst defect a spec can carry, because both readers think they are right.

Every section carries a status

A reader has to know whether a sentence describes today or an intention. Use the project's vocabulary if it has one. Where it does not, this set covers it:

SHIPPED, AGREED, DRAFT, DESIGN, NOT IMPLEMENTED

A section without a status is a bug in the spec. DESIGN, NOT IMPLEMENTED must say why it was deferred and what shipped instead. That record is worth more than the design was.

Requirement IDs

Every normative statement, anything a reader could implement or test, carries an ID and its own status:

LIB-4 (AGREED) - A rescan never deletes user data. A file that disappears is marked absent; its watch history survives.

  • One prefix per space, one space per prefix. Pick something legible and stay with it.
  • N is assigned once. Never renumbered, never reused. A deleted requirement retires its number, so a link in an old ticket never silently points at a different rule.
  • One ID is one testable idea. A line hiding two requirements needs two IDs.

Take the next number from the project's generated index if it has one, or from git log if it does not. Never by counting the prose in front of you: a retired number is invisible there, and reusing it corrupts every link that pointed at the old rule.

Sizing

A requirement maps to one story; a domain maps to one epic. A requirement that is really five stories wearing one ID is what makes a spec useless for planning. Split it.

The other direction is also wrong: an ID on a sentence nobody could test is noise. If you cannot say how a reader would prove it true, it is prose, not a requirement, and it needs no ID.

Prose

A tired reader on a phone follows it on the first read. Paragraphs under five lines, one idea per sentence, no undefined jargon, no passive construction hiding who acts. A spec that is correct and unreadable is a defect.

Run the unslop skill over anything before committing it, and the ticket-writing skill when the requirement becomes work.

Before the PR

Where the spec ships an index or a checker, regenerate and run it, then commit whatever it wrote. Look for the scripts in the project's manifest; they usually fail on a stale index, a duplicate ID, a mixed prefix or a missing status. Generated artefacts are never hand-edited.

The spec changes only through a pull request, and a PR that changes behaviour changes the spec in the same PR. For anything large or contested, write the design document the project uses for that (an RFC or an ADR) first, and let the spec record the outcome rather than the argument.

Where the project ships a spec review agent, write for that review and run it before asking for a human one.

리뷰

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

댓글

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

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

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

0 / 1,000자

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

같은 저장소의 스킬

One file, one job, and short enough to hold in your head. Covers the size policy (hard-split over 300 lines, split 200 to 300 at a seam, aim for 150), what a natural seam is and where to cut, the exemptions, the dependency rules that decide where the split lands, and the signals that a file is already two files. Use before adding to a file that is already long, when naming a new file, when a function has nowhere obvious to live, or when a review says a file is doing too much. Triggers - "this file is too long", "where should this go", "split this file", "is this file too big", "one responsibility".

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

kromatv/kroma602026년 10월 19일 업데이트

naming

무료

What things get called. A file is named after its export in the project's case convention, a suffix is a resolution instruction rather than decoration, an index file only re-exports, and some symbol names are always wrong (utils, helpers, V2, Enhanced, New). Covers learning a tree's local vocabulary before adding to it, test and platform-variant naming, and the per-language conventions. Use when creating a file or directory, naming a test file, adding a platform variant, or when a name has to change. Triggers - "what should I call this file", "where does this file go", "naming convention", "kebab or camel", "name this test".

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

kromatv/kroma602026년 10월 19일 업데이트

Spawn the comment hunter, fix accepted findings, and offer encodings for claimed constraints.

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

kromatv/kroma602026년 10월 19일 업데이트

Write a short release note people finish reading. Picks the few changes a user will notice from the pull requests since the last release, names each by what the reader can now do, keeps to a length budget, writes every language from the intent instead of translating, and traces every line to a PR. Use when cutting a release, or filling a GitHub Release body, a store "what's new", a package changelog or an in-app what's new screen. Triggers - "write the release notes", "release notes for 0.4.0", "what's new", "changelog for this release", "notes de version".

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

kromatv/kroma602026년 10월 19일 업데이트

Rust best practices. Use when reading or editing any .rs file, designing a crate's public API, choosing an error type, splitting a workspace, or writing async code on tokio. Triggers - "rust best practices", "is this idiomatic", "should this be a newtype", "anyhow or thiserror", "why does the borrow checker", "review this Rust".

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

kromatv/kroma602026년 10월 19일 업데이트

Write cargo tests. A test name is a sentence, the body is setup, mock, test and verify blocks separated by blank lines with no comments, and shared setup lives in a named test-support module rather than in each test. Covers naming, the block shape, where a test file goes, async and time, workspaces, and running one crate or one filter. Use when adding or changing any #[test] or #[tokio::test], or when Rust coverage has to come up. Triggers - "write a rust test", "cargo test", "test this crate", "cover this handler".

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

kromatv/kroma602026년 10월 19일 업데이트

kromatv의 스킬 모두 보기

이 스킬의 문제 신고